0
$query = "SELECT username, email
              FROM members
              WHERE username = :username OR email = :email";
    $stmt = $sql->prepare($query);
    $stmt->execute(array(
        ':username' => $_POST['username'],
        ':email' => $email
    ));

    $existing = $stmt->fetchObject();

    if ($existing)
    {
        if ($existing->username == $_POST['username'])
        {
            $errors['username'] = "Username already in use !";
        }
        if ($existing->email == $email)
        {
            $errors['email'] = "Mail already in use !";
        }
    }

これは register.php ファイルの一部です。この部分だけが問題の原因かどうかはわかりませんが、私は推測します。
そのためif table members is empty、フォームが送信されます - Firefox は 30 分ほどビジー gif であることを示しますが、新しいユーザーを登録せず、エラーも表示せずに終了します。凍らせ続けるだけ。
次にF5、再送信情報を承認するウィンドウが表示されたら、クリックResendします。新しいユーザーが登録されます。
If the tableメンバーis not empty- すべて正常に動作します。
どうやら-問題は、上記のコードが存在しないデータを見つけるためにビジーであるためです。
If so、次のようなことを伝える方法-テーブルが空の場合-試行を停止-新しいユーザーを登録するだけです。

4

3 に答える 3

2

空のオブジェクトをフェッチしていると確信し$existing = $stmt->fetchObject();ていますが、暗黙的にに評価されないオブジェクトですfalse。その後、トリガーするコードは何もないため、出力が空白になります。

var_dump($existing)コードが実際に何を操作しているかを確認してみてください。

編集

$existing = $stmt->fetchObject(); //this might be returning an empty object

if ($existing) { //empty objects evaluate to true
    if ($existing->username == $_POST['username']) {
        $errors['username'] = "Username already in use !";
    } else if ($existing->email == $email) {
        $errors['email'] = "Mail already in use !";
    } else {
        //this will trigger if something ELSE is wrong other than what you're explicitly checking for.
        $errors['other'] = "Something else is wrong.\n" . var_export($existing, TRUE);
    }
}
于 2012-12-27T18:36:05.823 に答える
1

すべきです$email$_POST['email']ifそして、完全なコードは何ですか -ここには右中括弧がありません。その場合、それ以降$existingは true の場合にのみ実行されます。そのため、最初は何も表示されません。また、MySQL のように重複しないようにデータベースの制約を使用することをお勧めします - テーブルを作成するときに一緒に使用する場合の「PRIMARY KEY」、「UNIQUE KEY」、および「KEY」の意味

于 2012-12-27T18:26:02.107 に答える