使用javascript和php的注册表单
在此之前我已经问过这个问题,但在我下面的代码中,这个问题并没有得到解决。我正在使用javascript和php构建注册表。有两个文件使用javascript和php的注册表单,javascript,php,jquery,html,forms,Javascript,Php,Jquery,Html,Forms,在此之前我已经问过这个问题,但在我下面的代码中,这个问题并没有得到解决。我正在使用javascript和php构建注册表。有两个文件register.php,其中包含表单的html代码、javascript库和javascript代码。第二个文件reghand.php处理用于验证和插入数据的php代码。表单验证后数据正确插入数据库,但验证失败时会出现问题。这就像没有javascript起作用一样,当验证失败时,我会被重定向到reghand.php,其中显示验证错误{“username”:“inu
register.php
,其中包含表单的html代码、javascript库和javascript代码。第二个文件reghand.php
处理用于验证和插入数据的php代码。表单验证后数据正确插入数据库,但验证失败时会出现问题。这就像没有javascript起作用一样,当验证失败时,我会被重定向到reghand.php,其中显示验证错误{“username”:“inuse”,“password”:“missmatch”}
这些是我的reghand.php
中的错误,但我想使用register.php
上的javascript错误消息,它也应该出现在表单页面本身上,而不是reghand.php
请帮助
register.php
<script type="text/javascript" src="./js/jquery.min.js"></script>
<script>
$(document).ready(function(){
$("form.register").change(function() {
$.post("register.php", $("form.register").serialize(), function( data ) {
if( data.flname == "cntbempty" )
$("p#name_error").slideDown();
else
$("p#name_error").hide();
if( data.username == "inuse" )
$("p#username_error").slideDown();
else
$("p#username_error").hide();
if( data.password == "missmatch" )
$("p#password_error").slideDown();
else
$("p#password_error").hide();
if( data.email == "notvalid" )
$("p#email_error").slideDown();
else
$("p#email_error").hide();
}, "json");
});
});
</script>
<form action="reghand.php" method="post" class="register">
<fieldset>
<legend>Registration</legend>
<input type="text" name="fname" required="required" maxlength="15" placeholder="First Name"/>
<input type="text" name="lname" required="required" maxlength="15" placeholder="Last Name"/>
<p id="name_error" class="error">First name Last name cannot be empty and can be same</p>
<input type="text" name="username" required="required" maxlength="15" placeholder="Username" class="username" />
<p id="username_error" class="error">That Username is unavailable</p>
<input type="email" name="email" required="required" maxlength="35" placeholder="Email"/>
<p id="email_error" class="error">That Email is already registered</p>
<input type="password" name="password" required="required" maxlength="15" placeholder="Password"/>
<input type="password" name="password2" required="required" maxlength="15" placeholder="Confirm Password"/>
<p id="password_error" class="error">Passwords do not match</p>
<input type="submit" name="reg" value="Sign Up!">
</fieldset>
</form>
<?php
if(isset($_POST['reg'])){
$fn = ucfirst($_POST['fname']);
$ln = ucfirst($_POST['lname']);
$un = $_POST['username'];
$em = $_POST['email'];
$pswd = $_POST['password'];
$pswd2 = $_POST['password2'];
$sql=$db->prepare("SELECT username FROM users WHERE username=:username");
$sql->execute(array(':username'=>$un));
$row = $sql->fetch(PDO::FETCH_ASSOC);
$db_username = $row['username'];
$usernames = $db_username;
$data = array();
if( isset($fn) && isset($ln) ) {
if( $fn != "" && $ln!="" && $fn == $ln ) {
$data["flname"] = "cntbempty";
}
}
if( isset($un) ) {
if ($un == $usernames ) {
$data["username"] = "inuse";
}
}
if( isset($pswd) && isset($pswd2) ) {
if( $pswd2 != "" && $pswd != $pswd2 ) {
$data["password"] = "missmatch";
}
}
if( isset( $em ) ) {
if( $em != "" && !preg_match( "/^([a-zA-Z0-9])+([a-zA-Z0-9\._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9\._-]+)+$/", $_POST["email"] ) ) {
$data["email"] = "notvalid";
}
}
if(!empty($data))
{
echo json_encode($data);
die;
}
else{
$pswd = password_hash($pswd, PASSWORD_DEFAULT);
$pswd2 = password_hash($pswd2, PASSWORD_DEFAULT);
$stmt = $db->prepare("INSERT INTO users (username,first_name,last_name,email,password,password2) VALUES (:username,:first_name,:last_name,:email,:password,:password2)");
$stmt->execute( array(':username'=>$un,':first_name'=>$fn,':last_name'=>$ln,':email'=>$em,':password'=>$pswd,':password2'=>$pswd2));
}
if ($stmt->rowCount() == 1) {
header("Location: login.php");
}
else {
echo "error";
}
}
?>
我将阻止“提交”按钮发送表单:
jQuery("#submit").click(function(event)
{
event.preventDefault(); // cancel default behavior
});
验证javascript中的字段,然后如果所有字段都正确,请按如下方式提交表单:
jQuery('#form').submit();
当然,您也应该在php中运行字段的第二次验证。忽略所有其他错误,您的查询中存在语法错误 您应该从这一行中得到一个错误
$stmt = $db->prepare("INSERT INTO users
(username,first_name,last_name,
email,password,password2,)
VALUES
(:username,:first_name,:last_name,
:email,:password,:password2,)");
注意后面的2个逗号
然而,您实际上并没有寻找任何错误,因此它可能没有被您注意到
由于所有PDO方法都有可能返回错误,或者在配置为返回错误时抛出PDOException,所以最好像这样查找它们
$stmt = $db->prepare("INSERT INTO users
(username,first_name,last_name,
email,password,password2)
VALUES
(:username,:first_name,:last_name,
:email,:password,:password2)");
if ( $stmt === false) {
print_r( $db->error_info();
exit;
}
这是一个打字/语法错误。您是否费心检查错误……。您可以使用$(“form.register”).submit(函数(e){e.preventDefault();//rest您的代码});为什么要投票?只是出于兴趣!为什么要对密码2(确认密码)进行哈希运算?还有,为什么要将其存储在数据库中?DUH“这只是为了检查用户没有输入2个不同的密码,即输入错误。