2009-07-24 2 views
3

ログインフォームで入力した特定のユーザー名を持つテーブルからパスワードのみを選択する必要があります。私は、mysqlテーブルの暗号化された形式でパスワードを保存します。だから、私は与えられたパスワードと保存されたパスワードを比較し、 "ログインに成功しました"と表示する必要があります。パスワードが間違っています。これは、私は、配列が、あなたはまだそれを通過する必要があるとして、あなたは結果セットを印刷している...いずれかplzのヘルプ.can「1ResourceのID#4」として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"; 

答えて

1

を出力を取得しています私のcode.Nowです。

だけの変更:

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

へ:

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

あなたはこれを複雑に超えています。データベースからパスワードを取得する必要はありません。送信されたユーザー名とパスワードを持つ行を選択できるかどうかを確認するだけです。

まず、ユーザーからユーザー名とパスワードを取得し、ユーザーが保存した形式で取得します。

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

第2 - SQLをセットアップします。準備された文を使用して、SQLインジェクション攻撃から保護します。あなたの現在のアプローチは安全ではなく、ユーザーは任意のユーザーのパスワードを変更することができます(とりわけ)。

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

3番目の数字は、返される行の数です。 1つの結果が得られた場合、パスワードは一致します。結果がゼロになると、パスワードが一致しませんでした。

0

スリップブルが言ったことを伝えるだけでなく、「結果セットを配列として印刷していますが、それでもトラバースする必要があります。 - あなたのコードは現在VERYであることをお知らせします。

ユーザーは、渡されたデータをそのままSQLクエリに貼り付けます。そうすることで、データベースを引き継ぐことができます。

代わりに、データを処理する前にパラメータmysql_real_escape_string()を渡してください。

他にもこれを修正してください。

関連する問題