0

我有一个带有 PHP 验证的有效注册脚本。

我现在将其转换为通过 AJAX 运行。

我可以根据输入的 val 来理解验证表单。例如空,格式和内容等。

但是我需要帮助来检查数据库中是否已经存在用户名。

所以,我有这个用于 PHP 方面:

        $query = " SELECT 1 FROM users WHERE username = :username "; 

    $query_params = array( 
        ':username' => $_POST['username'] 
    ); 

    try 
    { 
        $stmt = $db->prepare($query); 
        $result = $stmt->execute($query_params); 
    } 
    catch(PDOException $ex) 
    { 
        die("Failed to run query: " . $ex->getMessage()); 
    } 
    $row = $stmt->fetch(); 

    if($row) 
    { 
    echo 'Username Taken';
    die(); 
    }

我在我的网站上的其他地方使用了 AJAX,但仅用于简单的验证,代码如下:

$(document).ready(function(){
$(".registerform").submit(function(){
    var $targetForm = $(this);

    $targetForm.find(".error").remove();
    $targetForm.find(".success").remove();

    // If there is anything wrong with 
    // validation we set the check to false
    var check = true;

    // Get the values
    var username = $('.regusername').val();
    var password = $('.regemail').val();
    var email = $('.regpassword').val();
    var ut = response.usernameTaken;

    // Username Validation

    // If isername empty
    if (username == '') {
        check = false;
        $('.regusername').css('border', 'solid 2px red');
    } else {
        $('.regusername').css('border', 'solid 2px green');
    }



  // ... goes after Validation
    if (check == true) {
        ShowAjaxLoader();
$.ajax({
type: "POST",
url: "process/register.php",
data: $targetForm.serialize(),
dataType: "json",
success: function(response){

    if (response.databaseSuccess == true)
; // ok
    else
; //error

}
        });
    }
    return false;
});
});

关于下一步验证数据库中项目的任何帮助。

我打算做一个 JSON 返回,例如

$return['emailTaken'] = true;
echo json_encode($return);

然后在 AJAX 验证中检查它,但只是......不要认为它是正确的方法。

对不起,如果它真的是基本知识。只需要指向正确的方向。

4

1 回答 1

0

我会返回一条错误消息,以及导致错误的字段的类/ID。这样,您可以显示错误消息并标记该字段,以便用户更容易看到他们需要更正的地方。

{
  'errorMsg':'e-mail address already taken',
  'formField': 'regemail'
}

或类似的东西。这也可以包装到一个数组中,因此您可以返回多个错误(通常在大型表单中很有用)

于 2013-10-25T22:00:42.737 回答