2010-12-28 19 views
0

私は以下のコードを使用していますが、空欄を確認して電子メールを確認しますが、パスワードが正しい場合でもログインしません。パスワードはmd5保護で挿入されています。以下はコードです。私はこれに新しいので、私と一緒に裸をしてください。ありがとう!パスワードチェックがありません

PHP:

PHP:

 // here we encrypt the password and add slashes if needed 
     $_POST['password'] = md5($_POST['password']); 
     if (!get_magic_quotes_gpc()) { 
     $_POST['password'] = mysql_escape_string($_POST['password']); 
    $_POST['email'] = mysql_escape_string($_POST['email']); 
     $_POST['full_name'] = mysql_escape_string($_POST['full_name']); 
    $_POST['user_url'] = mysql_escape_string($_POST['user_url']); 
     } 


     // now we insert it into the database 
    $insert = "INSERT INTO accounts (Uniquer, Full_name, Email, Password, User_url) 
    VALUES ('".$uniquer."','".$_POST['full_name']."', '".$_POST['email']."','".$_POST['password']."', '".$_POST['user_url']."')"; 
    $add_member = mysql_query($insert); 

私は、エラーを見てみましたini_set関数を使用した後、私は

 session_start(); 




     //Checks if there is a login cookie 

     if(isset($_COOKIE['ID_my_site'])) 


    //if there is, it logs you in and directes you to the members page 

    { 
     $email = $_COOKIE['ID_my_site']; 

     $pass = $_COOKIE['Key_my_site']; 

      $check = mysql_query("SELECT * FROM accounts WHERE email = '$email'")or    die(mysql_error()); 

     while($info = mysql_fetch_array($check)) 

     { 

      if ($pass != $info['password']) 

        { 

          } 

      else 

      { 

       header("Location: home.php"); 



       } 

      } 

     } 


    //if the login form is submitted 

    if (isset($_POST['submit'])) { // if form has been submitted 



    // makes sure they filled it in 

      if(!$_POST['email'] | !$_POST['password']) { 

      die('You did not fill in a required field.'); 

      } 

      // checks it against the database 



      if (!get_magic_quotes_gpc()) { 

      $_POST['email'] = addslashes($_POST['email']); 

      } 

      $check = mysql_query("SELECT * FROM accounts WHERE email = '".$_POST['email']."'")or die(mysql_error()); 



     //Gives error if user dosen't exist 

    $check2 = mysql_num_rows($check); 

    if ($check2 == 0) { 

       die('That user does not exist in our database. <a href=add.php>Click Here to Register</a>'); 

      } 

      while($info = mysql_fetch_array($check)) 

     { 

     $_POST['password'] = stripslashes($_POST['password']); 

    $info['password'] = stripslashes($info['password']); 

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



    //gives error if the password is wrong 

     if ($_POST['password'] != $info['password']) { 

      die('Incorrect password, please try again.'); 

     } 

     else 

     { 


       // if login is ok then we add a cookie 

      $_POST['email'] = stripslashes($_POST['email']); 

      $hour = time() + 3600; 

       setcookie(ID_my_site, $_POST['email'], $hour); 

       setcookie(Key_my_site, $_POST['password'], $hour);  



       //then redirect them to the members area 

       header("Location: home.php"); 

      } 

      } 

     } 

    else 

    { 



     // if they are not logged in 



    <form action="<?php echo $_SERVER['PHP_SELF']?>" method="post"> 

     <table border="0"> 

    <tr><td colspan=2><h1>Login</h1></td></tr> 

    <tr><td>email:</td><td> 

    <input type="text" name="email" maxlength="40"> 

    </td></tr> 

     <tr><td>Password:</td><td> 

    <input type="password" name="password" maxlength="50"> 

    </td></tr> 

    <tr><td colspan="2" align="right"> 

    <input type="submit" name="submit" value="Login"> 

    </td></tr> 

    </table> 

    </form> 

}

ここで登録コードがありますこのメッセージを受け取っても、意味が分からない場合:

There are the lines where the errors are at: 

       if ($pass != $info['password']) 

10と、このライン

     if ($_POST['password'] != $info['password']) { 

答えて

0

私はそれを解決しました。あなたがSELECT *と言うクエリに気付いたら、代わりにSELECT電子メール、パスワードを試みました。

+1

それはまったく違いを生むべきではありません。 – JakeParis

+0

真。しかし、なぜそれが働いたかわからない、私は何かを変えることを思い出さない。 – AAA

1

私が見ることができる一つのことは、あなたが投稿したパスワード(非MD5版)にstripslashesを使用していますが、保存されたパスワードのMD5バージョンでそれを使用することです。

データベースのパスワードには、実際にはstripslashesを使用する必要はありません。これは、最初にスラッシュでパスワードを保存する必要がないためです。

$_POST['password'] = stripslashes($_POST['password']); 
$info['password'] = stripslashes($info['password']); 
$_POST['password'] = md5($_POST['password']); 

た::

$_POST['password'] = md5($_POST['password']); 
$_POST['password'] = stripslashes($_POST['password']); 
$info['password'] = stripslashes($info['password']); 
+0

ありがとうございました。私は変更を加えた、私はまだ倒れません。 – AAA

0

あなたはcomepletely異なるコードでいくつかの時間前に同様の質問をしたので、私はそれがデータベースの問題の多くはであると仮定していますが、変更するとどうなりますか

今。

パスワードフィールドでmd5ハッシュに32文字を使用できますか?パスワードフィールドが短すぎるとmd5ハッシュが切り捨てられ、ログインに失敗します。

+0

ねえ、私は別のコードを使っていますので、ここで再掲載しました。パスワードmaxlengthは50に設定されています。 – AAA

+0

dbのパスワードフィールドはvarchar(40)に設定されています – AAA

+0

info ['password']の目的は何ですか。 ? – AAA

1

$info['password']でdbフィールドにアクセスしようとしていますが、データベースフィールドは実際にはPasswordで、資本金はPです。

DBにデータを保存するには、mysql_escape_stringに電話をかけています。提出されたログインフォームのstripslashesを呼び出してください。おそらく彼らはパスワードとは異なることをしているのかもしれない。考えるよりいくつかのこと:

  • あなたはデシベルでそれを格納するためのパスワードをMD5場合、あなたはそれにstripslashesまたはmysql_escape_stringを呼び出す必要はありません。すでに英数字に変換されています。
  • mysql_escape_stringは推奨されていません。
  • メールフィールドをエスケープする代わりに、メールフィールドのフォーマットを検証する方が良いかもしれません。

新しい登録を挿入した後、使用したパスワードを手動でmd5してから、dbに格納されているパスワードと照合してください。彼らは違うかもしれません。

+0

JMCに感謝します。私はテスト、私は入力されたパスワードとデータベースに1つ、彼らはmd5と一致エコーした。私はまだそれを見つけることを試みている。とにかく、ありがとう。 – AAA

+0

これで私を助けてもらえれば、私は感謝します。私は、問題が$ info ['password']であるかもしれないという結論に達しました。私はそれをエコーし​​ましたが、何も表示されません.... – AAA

+0

画面にエラーが表示されたら、次のメッセージが表示されます。 /var/www/domain.com/htdocs/login.php in line 103注意:定義されていない定数パスワードの使用 - /var/www/domain.com/htdocs/login.php on line 11の「パスワード」とみなされる – AAA

関連する問題