使用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

在此之前我已经问过这个问题,但在我下面的代码中,这个问题并没有得到解决。我正在使用javascript和php构建注册表。有两个文件
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个不同的密码,即输入错误。