2

夕方の皆さん、

「このあまりにも長い瞬間を見た」それらの別のものを持つこと。

このコードを実行すると成功メッセージが返されますが、データベース テーブルには何も入力されず、エラーも発生しません。_post から正しい値がすべて受信されていることはわかっていますが、何が問題なのかわかりません。ほぼ同じクエリがあります。別のページで、正常に動作します。

誰でもコードの問題を確認できますか?

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

    $salted = md5($_POST['pass1'] . 'salt');

  try
  {
    $sql = 'INSERT INTO users SET 
      username = :username,
      firstname = :firstname,
      lastname = :lastname,
      email = :email,
      password = $salted,
      joined = CURDATE()';
    $s = $PDO->prepare($sql);
    $s -> bindValue(':username', $_POST['username']);
    $s -> bindValue(':firstname', $_POST['firstname']);
    $s -> bindValue(':lastname', $_POST['lastname']);
    $s -> bindValue(':email', $_POST['email']);
    $s -> execute();

  }
  catch (PDOException $e)
  {
    $error = 'Error adding submitted user.';
    echo $error;
    exit();
  }

  ?> <div class="alert alert-success">User added to the database.</div> <?php

}
4

1 に答える 1

1

答えを得るために、ここでコメントを要約します。マーク付きコミュニティ Wiki。

  • INSERT ステートメント内の文字列は引用符で囲む必要があります。

      password = '$salted',
    
  • とにかくパラメータを使用する必要があります。

      password = :password,
    
      . . .
    
      $s -> bindValue(':password', $salted);
    
  • MD5 は、最新の強力なパスワード ストレージに推奨されるハッシュ関数ではありません。どちらもSHA1ではありません。
    代わりに SHA256 または Bcrypt を使用してみてください。

    $salted = hash('sha256', $_POST['pass1'] . 'salt');
    
  • ユーザーごとにランダムなソルト文字列を使用すると、ソルトがより適切になります。

  • PDO インスタンスが例外をスローするように構成されていることを確認してください。

    $PDO->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    
  • ユーザーに出力しない場合でも、PDO 例外のエラー メッセージを常にキャプチャします。

    error_log($e->getMessage());
    
于 2013-10-06T19:09:50.717 に答える