2009-07-24 13 views
3

auszuwählen, muss ich nur das Passwort aus der Tabelle mit dem spezifischen Benutzernamen wählen, der über das Login-Formular eingegeben wurde. Ich speichere das Passwort verschlüsselt in der mysql-Tabelle. Also muss ich das angegebene Passwort und das gespeicherte Passwort vergleichen und muss "erfolgreich eingeloggt" drucken. sonst ist das Passwort falsch. Das ist mein code.Now ich die Ausgabe als „1Resource id # 4“ .can einer plz Hilfe zu bekommen ...Um das verschlüsselte Passwort von mysql

mysql_select_db($dbName); 
$user_name=$_POST['name']; 
$pswd=$_POST['pswd']; 
$res  = mysql_query("select * from xxx where Name='$user_name'"); 
$row  = mysql_num_rows($res); 
echo $row; 
$encpass=mysql_query("SELECT password FROM xxx WHERE Name = '$user_name'"); 
$result1= mysql_fetch_array($encpass); 
echo $result1; 
if($row>0) 
{ 
//echo 'hi'; 
    if(md5($pswd)==$result1) 
     { 
     echo 'hi'; 
     echo "you have successfully signed in!!!"; 
     //echo $name = $row['Name']; 
     //header("location:check.html"); 
     } 
} 

else 
echo "you are not a member"; 

Antwort

1

Sie drucken das Resultset als Array, haben Sie immer noch, es zu durchqueren.

Gerade Änderung:

if(md5($pswd)==$result1) 

An:

if(md5($pswd)==$result1[0]) 
2

Sie sind über diese zu verkomplizieren. Sie müssen die Kennwörter nicht aus der Datenbank abrufen. Sie müssen nur sehen, ob Sie eine Zeile mit dem gesendeten Benutzernamen und Passwort auswählen können.

Erste - den Benutzernamen und das Passwort von dem Benutzer erhalten und sie in Form erhalten, die jedoch übereinstimmt Sie es gespeichert haben.

$username = $_POST['name']; 
$password = my_password_encryption_function($_POST['pswd']); 

Zweitens - richten Sie Ihre SQL ein. Verwenden Sie eine vorbereitete Anweisung zum Schutz vor SQL-Injection-Angriffen. Ihr aktueller Ansatz ist unsicher und ermöglicht es Benutzern, unter anderem die Passwörter von willkürlichen Benutzern zu ändern.

$preparedStatement = $db->prepare('SELECT * FROM xxx WHERE Name = :name AND password = :password'); 
$preparedStatement->execute(array(':name' => $username, ':password' => $password)); 
$rows = $preparedStatement->fetchAll(); 

Drittens - zählen Sie einfach die zurückgegebenen Zeilen. Wenn Sie ein Ergebnis erhalten, stimmt das Passwort überein. Wenn Sie keine Ergebnisse erhalten, stimmt das Passwort nicht überein.

0

Neben sage Ihnen, was slipbull sagte - „Sie drucken das Resultset als Array, man muss es immer noch durchqueren“ - Ich werde Ihnen auch sagen, dass Ihr Code ist derzeit SEHR gefährlich.

Sie kleben die Benutzer weitergegeben Daten direkt in einer SQL-Abfrage. Sie können Ihre Datenbank dadurch übernehmen.

Stattdessen übergeben Sie den Parameter durch mysql_real_escape_string() bevor sie mit den Daten etwas zu tun.

Fix dies, bevor Sie etwas anderes tun !!

Verwandte Themen