0

こんにちは、登録の詳細がデータベースで一致しないかどうかを確認する関数があります。一致する場合は、コードを返します。

しかし、コードを返すたびに、HTML の読み込みが妨げられるため、HTML が読み込まれません。特定の理由で、HTML を常に PHP コードの下に配置したい (フォームの下ではなく、フォームまでエラーを表示したい)。

これは私の機能の例です:

function check_available($name, $password, $email)
{
    global $pdo;

    $check_user = $pdo->prepare("SELECT * FROM users WHERE user_name = :username LIMIT 1");
    $check_user->execute( array(':username' => $name) );        

    $check_email = $pdo->prepare("SELECT * FROM users WHERE user_email = :email LIMIT 1");
    $check_email->execute( array(':email' => $email) ); 

    $error = '';
    if ($check_user->rowCount())
    {
        $error .= 'Username already exists!';
        return handle_errors($error);
    }
    else if($check_email->rowCount() && !$check_user->rowCount())
    {
        $error .= 'Email already exists!';
        return handle_errors($error);
    }
    else
    {
        return true;
    }
}

    if (isset($_POST['submit']))
    {
        $check_in = check_available($name, $password, $email);


        if ($check_in == true)
        {
            echo 'Created account sucessfully!';
        }
    }
?>  
<html>
<form action="register.php" method="POST">
Username: <input type="text" name="username"><br />
Password: <input type="password" name="password"><br />
Email: <input type="text" name="email"><br />
<input type="submit" name="submit">
</form>
</html> 

送信後 (データベースで既に一致するユーザー名を使用)、HTML が非表示になり、エラーが表示されます。

これを防ぐにはどうすればよいですか?そのためのトリックはありますか?

4

1 に答える 1

3

フォームを非表示にしても意味がありません。
逆に、ユーザーが別の名前を入力できるようにするには、フォームを表示する必要があります。

したがって、フォームにエラー出力を追加するだけです - 必要なのはそれだけです

編集
は、それが原因の handle_errors() 関数のように見えます。

function reg_has_errors($name, $password, $email)
{
    global $pdo;

    $error = '';

    $sql = "SELECT 1 FROM users WHERE user_name = ? LIMIT 1";
    $stm = $pdo->prepare($sql);
    $stm->execute( array($name) );        
    if($stm->rowCount())
    {
        $error .= 'Username already exists!';
    }

    $sql = "SELECT * FROM users WHERE user_email = ? LIMIT 1";
    $stm = $pdo->prepare($sql);
    $stm->execute( array($email) );        
    if($stm->rowCount())
    {
        $error .= 'Email already exists!';
    }
    return $error;
}

$errors = '';
if (isset($_POST['submit']))
{
    $errors = reg_has_errors($name, $password, $email);

    if (!$errors)
    {
        echo 'Created account sucessfully!';
    }
}
echo errors;
于 2013-04-18T13:03:30.367 に答える