2

コードを mysql_connect から PDO に変更しようとしていますが、いくつか問題があります。私は PHP が初めてで、mysql_connect は古いと言われたので、ここに私のコードを示します。ユーザーを検証できないようです。間違ったユーザーを入力しても、無効なユーザーは出力されません。

     $_GET['errorCode'];

        $errors = array(
      1 => 'Invalid User',
      2 => 'Incorrect Password');

      if(isset($_GET['errorCode'])){
      $code = $_GET['errorCode'];
      print isset($errors[$code]) ? $errors[$code] : 'Unknown error';
    }


         if($_SERVER['REQUEST_METHOD']== 'POST'){


        $username = $_POST['username'];
        $password = $_POST['password'];




        if(isset($_POST['username']) && isset($_POST['password'])){


              $stmt = $dbh->prepare("SELECT password, salt FROM user WHERE username = :user_name");
         $stmt->execute(array(':user_name' => "$username"));
            $stmt->bindParam(':user_name', $username, PDO::PARAM_STR);


        if(!$stmt->rowCount() > 0)

       {
        header('Location: index.php?errorCode=1');

        exit;

    }
        $result = $stmt->fetch(PDO::FETCH_ASSOC);

    $hash = hash('sha256', $result['salt'] . hash('sha256', $password) );
if($hash != $result['password']) //incorrect password
    {

      header('Location: index.php?errorCode=2');

       exit;
        }
        else
        {
            validateUser(); //sets the session data for this user
            Header("Location: index.php");
        exit;
        } 
        }
           }
4

2 に答える 2

2

$stmt->execute();ステートメントを実行するのを忘れました -パラメータをバインドした後に実行するだけです。

-- 編集 --
次の行を削除します: $userData = $dbh->query($stmt);; $result行は現在のコードでフェッチされます。

于 2013-02-27T16:04:01.653 に答える
1

欠落しているステートメントを除けばexecute、これは決して機能しません。

Header("Location: index.php");
$errmessage = "Invalid user";
print "<p id\"errmessage\"> $errmessage </p>";
exit;

リダイレクトするとすぐにブラウザが読み込まindex.phpれるため、エラー メッセージは表示されません。エラーメッセージをリダイレクトまたは表示する必要がありますが、両方を行う必要はありません。

于 2013-02-27T16:07:36.927 に答える