2

ユーザー登録ページは機能します。つまり、salt とハッシュ化されたパスワードがデータベースに正しく保存されます。ログインは、無効なユーザー名/パスワードを報告します。それが重要な場合は、データベースでソルトとパスワードを varchar(64) に設定しています。

なぜそれが機能しないのかを見つけることができないようです。エラーは $query または $count 変数にあると思います。

登録:

<?php
include('config.php');
#Setup Credentials
$uname = mysql_real_escape_string($_POST['uname']);
$escapedPW = mysql_real_escape_string($_POST['pass']);
$email = mysql_real_escape_string($_POST['email']);
#Salt Credentials
$salt = bin2hex(mcrypt_create_iv(32, MCRYPT_DEV_URANDOM));
$saltedPW =  $escapedPW . $salt;
$hashedPW = hash('sha256', $saltedPW);
#checks and queries
$usercheck = mysql_query("SELECT * FROM users WHERE username = '$uname'");
$emailcheck = mysql_query("SELECT * FROM users WHERE email = '$email'");
$count = mysql_num_rows($usercheck);
$count2 = mysql_num_rows($emailcheck);
$query = "INSERT INTO users (username, password, email, salt) VALUES ('$uname', '$hashedPW', '$email', '$salt')";
$error = "";

if(isset($_POST['submit'])){
    if(empty($_POST['uname']) || empty($_POST['pass']) || empty($_POST['email'] )){
      echo 'A field is empty!';}      
    else{
            if($count != 0){$error = 'Username is already registered.';}
            elseif ($count2 != 0 ) {$error = 'Email is already registered.';}
                else{ mysql_query($query);}
    }
}
?>

ログイン:

<?php
include("config.php");
if (isset($_POST['submit'])) { 
   if (!$_POST['username'] | !$_POST['password'] ) {
    die('You did not complete all of the required fields');
  }
else{
    $username = mysql_real_escape_string($_POST['username']);
    $escapedPW = mysql_real_escape_string($_POST['password']);

    $saltquery = "SELECT salt FROM users WHERE username = '$username';";
    $result = mysql_query($saltquery);

    $row = mysql_fetch_assoc($result);
    $salt = $row['salt'];

    $saltedPW =  $escapedPW . $salt;

    $hashedPW = hash('sha256', $saltedPW);

    $query = "SELECT * FROM users WHERE username = '$username' and password = '$hashedPW';";
    $count = mysql_num_rows($query);

    if($count == 0){
      header("location:index.php?status=1");
    }
      else {
              // store cookie $myusername, $mypassword and redirect to index
      session_start(); 
      $_SESSION['username'] = $username;
      $_SESSION['password'] = $hashedPW;
      setcookie('username', $username, time()+60 * 60 * 4, '/', 'www.site90.net');
      setcookie('password', $hashedPW, time()+60 * 60 * 4, '/', 'www.site90.net');
      header("location:index.php");
    }
}}
?>
4

1 に答える 1

1

問題は次のとおりです。

$query = "SELECT * FROM users WHERE username = '$username' and password = '$hashedPW';";
$count = mysql_num_rows($query);

彼らはする必要があります:

$sql = "SELECT * FROM users WHERE username = '$username' and password = '$hashedPW';";
$query = mysql_query($sql);
$count = mysql_num_rows($query);

mysql_num_rows() は、引数が文字列ではなくリソースであることを想定しています: http://php.net/manual/en/function.mysql-num-rows.php

于 2012-10-01T01:31:52.093 に答える