2012-01-03 20 views
-1

登録フォームとログインフォームを作成しました。md5パスワード取得

私は最初にtrim()を使用し、次にmd5()を使用してパスワードをデータベースに格納しました。

私はログインフォームでデータベースのパスワードをチェックするのに同じ方法を使用しましたが、何らかの不明な理由でログインフォームからmd5パスワードが一致しません。

私が欲しいのは、データベースからパスワードを取得することです。

問題は私がデータベースに保管し、php myadminでmd5パスワードが123456789のようなものであることを確認するときです。ログインフォームでecho'dすると、私にはこの1234567890が与えられます。ゼロの最後にゼロが問題を作り出しています。さもなければ、md5パスワード全体が一致します。私のデータベース照合はlatin_1_swedish_ciです。

照合の問題はありますか?

i hvはvarchar値255を使用し、テキストなどを使用しますが解決策はありません。

フォーマットや構造に問題はありますか?

不要なゼロを正しく削除するmd5パスワードを取得する際にお役立てください。

function login() 

    { 
     if(isset($_POST['login'])) 
     { 
      if(!$_POST['username'] || !$_POST['password']) 
       {die (mysql_error());} 

      else 
      { 
       $username = trim($_POST['username']); 
       $username = addslashes($_POST['username']); 

       $password = trim($_POST['password']); 
       $password = md5($_POST['password']); 
       echo $password; 


       $check_username = mysql_query("SELECT * FROM users WHERE username = '".$username."'")or die(mysql_error()); 
       $check_username2 = mysql_num_rows($check_username); 

       if ($check_username2 == 0) 
        {die ("Username and password doesnt exist");} 
       else 
        { 
         $check_pass = mysql_query("SELECT * FROM users WHERE username = '".$password."'")or die(mysql_error()); 
         $check_pass2 = mysql_num_rows($check_pass); 
         echo $check_pass2; 
        } 


      } 
     } 
    } 

function register() 

    { 
     if(isset($_POST['submit'])) 
     { 
      if(!$_POST['first_name'] || !$_POST['last_name'] || !$_POST['username'] || !$_POST['password']) 
       {header ("Location:user_registration.php");} 

      else 
       { 
        $firstname = trim($_POST['first_name']); 
        $firstname = addslashes($_POST['first_name']); 
        $lastname = trim($_POST['last_name']); 
        $lastname = addslashes($_POST['last_name']); 
        $username = trim($_POST['username']); 
        $username = addslashes($_POST['username']); 
        $password = trim($_POST['password']); 
        $password = md5($_POST['password']); 

        connect(); 

        if($mysql_check_user = mysql_query("SELECT * FROM `users` WHERE `username` LIKE '$username' ")) 
         { 
          $check_row = mysql_num_rows($mysql_check_user); 
          if($check_row > 0) 
          die ("username Exist"); 
          else 
           { 
            $store = mysql_query 
              ("INSERT INTO `project_upload`.`users` 
              (`id`, `fname`, `lname`, `username`, `password`) 
            VALUES (NULL, '$firstname', '$lastname', '$username', '$password')"); 

           } 
          if ($store) 
           {echo "You have regstered succesfully. please go to <a href = 'uploads_login.php'>login page</a>";           } 
          else {echo mysql_error();} 

         } 
       } 
     } 
    } 
+20

なぜ、あなたはパスワードに 'trim()'を使いましたか? –

+7

パスワードの取得と保存に使用するコードを投稿してください。 – lfxgroove

+2

ゼロがデータベースから来て、あなたのコードに何か他のものによってエコーされていないことは確かですか? – Piskvor

答えて

4

私が見ることができる問題は、ログインのコードの始めに次のようなものがあります:echo $password;とそれ以降の行数がecho $check_pass_2;の場合、ブラウザに文字列が表示されるその後のように0があります。これは、$check_pass_2にmysqlクエリから返された行の数がカウントされているだけなので、パスワードと同じユーザ名を持つユーザがないため、0です。あなたの実際の問題はmysql-queryです。誰かが入力したパスワードと同じユーザー名を持つユーザーがいるかどうかを確認します。これは不思議です。 login.phpであなたの最後のクエリを変更してみてください:username = '".$password."'password = '".$password."'に変更した

$check_pass = mysql_query("SELECT * FROM users WHERE password = '".$password."'") 
or die(mysql_error()); 

は注意してください。 第二に、あなたが何か行うとことを理解する必要があります。

$pass = trim($_POST['pass']); 
$pass = md5($_POST['pass']); 

を次に$パス変数はちょうどあなたが何をすべきこれを達成するために、その上にトリム効果を持たずにmd5'dされます。

$pass = trim($_POST['pass']); 
$pass = md5($pass); 

しかし、それはちょっと変わって不便なので、実際には何も追加しないので、パスワードを調整しないでください。

あなたがこれを行う行:

if($mysql_check_user 
    = mysql_query("SELECT * FROM `users` WHERE `username` LIKE '$username' ")) 

文があれば、superfluosであなただけの割り当てを作っていることから、あなたがあれば削除し、ちょうどそれがあるとして、変数があること聞かせてできること。すなわち:

また
$mysql_check_user = mysql_query("SELECT * FROM `users` WHERE `username` LIKE '$username'"); 

は、コーディング、これはそれがはるかに簡単にあなたのコードを読むために行ったときに、スタイルのいくつかの種類を維持しようとします。ほとんどのコードエディタはデフォルトでこの機能を持っていますが、改行のたびにTabキーを押して適切にインデントする必要がありますが、これは大きな助けになります。どのように見えるかの例:

function register() 
{ 
    if(isset($_POST['submit'])) 
    { 
     if(!$_POST['first_name'] || 
      !$_POST['last_name'] || 
      !$_POST['username'] || 
      !$_POST['password']) 
      header ("Location:user_registration.php"); 
     else 
     { 
      $firstname = trim($_POST['first_name']); 
      $firstname = addslashes($_POST['first_name']); 
      $lastname = trim($_POST['last_name']); 
      $lastname = addslashes($_POST['last_name']); 
      $username = trim($_POST['username']); 
      $username = addslashes($_POST['username']); 
      $password = trim($_POST['password']); 
      $password = md5($_POST['password']); 

      connect(); 

      if($mysql_check_user = mysql_query("SELECT * FROM `users` WHERE `username` LIKE '$username' ")) 
      { 
       $check_row = mysql_num_rows($mysql_check_user); 
       if($check_row > 0) 
        die ("username Exist"); 
       else 
       { 
        $store = mysql_query 
          ("INSERT INTO `project_upload`.`users` 
          (`id`, `fname`, `lname`, `username`, `password`) 
          VALUES (NULL, '$firstname', '$lastname', '$username', '$password')"); 
       } 
       if ($store) 
        echo "You have regstered succesfully. please go to <a href = 'uploads_login.php'>login page</a>";           
       else 
        echo mysql_error(); 
      } 
     } 
    } 
} 
1

実際にMD5の文字を解読するオプションはありません。比較する場合は、入力をMD5文字列に変換してから、dbの格納された値と簡単に比較する必要があります。

+0

私はそれを行いましたが、MD5番号の末尾にある拡張ゼロのために正しい一致を得られませんでした。たとえば、md5変換が123456789の場合1234567890が0になります – user1110597

+0

"1234567890" 。また、trim()メソッドを削除した後でチェックしましたか? –

+0

@Krishnanはい私はトリムを削除してみました。私はユーザー名とmd5パスワードを登録して保存しました。私はhpがそのパスワードを保存したphp myadminユーザテーブルのmd5コードを見ました。私はパスワードを一致させるためにログインフォームでmd5暗号化方式を再度使用しました。しかし、パスワードが一致しなかったというエラーが表示されたとき。私は私のブラウザ(私はログインフォームで使用)でパスワードを変換したmd5をエコーし​​ました。私は、コードの最後に追加のゼロを除いて全く同じmd5暗号化コードを取得します。 – user1110597

関連する問題