My last question was not clear so I am posting it with all clarification here. In the code below I want to show error messages using jQuery for registration form errors. Problem here is this code simply inserts data into database without checking any errors or showing error message and redirects to login page. So where I am going wrong?

我的最后一个问题不明确,所以我在这里发布了所有澄清。在下面的代码中,我想使用jQuery显示注册表单错误的错误消息。问题在于此代码只是将数据插入数据库而不检查任何错误或显示错误消息并重定向到登录页面。那么我哪里出错了?


Now I have updated my code, data is not submitted unless all conditions are fulfilled as I wanted but errors are displayed on clicking submit button, register.php page is reloaded where now it displays only error messages and no registration form like there is no use of jQuery. I don't want page to be reloaded It should show error messages right there.

现在我已经更新了我的代码,除非所有条件都按照我的要求完成,但是没有提交数据,但是单击提交按钮时会显示错误,register.php页面会重新加载,现在它只显示错误消息而没有注册表单就像没有用的jQuery。我不想重新加载页面它应该在那里显示错误消息。

<?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";
  }
}
?>

jquerycode

jquerycode

$(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");
  });
});

7 个解决方案

#1


8

You need to fix a few things.

你需要解决一些问题。

  • First, the file that handles registration process should not be the same file as form.
  • 首先,处理注册过程的文件不应与表单相同。
  • It is purely for handling data so it cannot redirect the browser directly using header("Location: login.php"). This part should be handled by your javascript code.
  • 它纯粹用于处理数据,因此无法使用标题直接重定向浏览器(“Location:login.php”)。这部分应该由您的JavaScript代码处理。
  • You also need to tell the browser that the content being served is JSON.
  • 您还需要告诉浏览器所提供的内容是JSON。
  • You also need to prevent form from submitting directly
  • 您还需要阻止表单直接提交

Look at the following updated code.

查看以下更新的代码。

Create a file called: registrationHandler.php

创建一个名为:registrationHandler.php的文件

<?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))
{
  header('Content-Type: application/json');
  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));
}
//! Send Success Status to browser for it to understand
if ($stmt->rowCount() == 1) {
  $data['success'] = true;
} 
else {
  $data['success'] = false;
}
header('Content-Type: application/json');
echo json_encode($data);
}
?>

your Javascript Code:

你的Javascript代码:

$(document).ready(function(){
      $("form.register").submit(function(e) {
        e.preventDefault();
        $.post("registrationHandler.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();

          if(data.success) {
            // registration succesful. Redirect
            window.location = "login.php";
          }
          else {
            // Some database error?
          }
        }, "json");
      });
    });

更多相关文章

  1. JSON解析错误:无法识别的标记'<'处于角度
  2. 获取所有网站的错误,[重复]
  3. 如何让jQuery ajax执行错误功能
  4. Yii 访问 Gii(脚手架)时出现 403 错误
  5. PHP强大包括处理错误?
  6. 您是否认为PHP中的错误形式是在类方法中访问超级全局变量?
  7. 解析错误:语法错误,第12行/home/public_html/gigs.html中的意外T_L
  8. eclipse 编写php错误
  9. php mail函数一段好的代码

随机推荐

  1. Android(安卓): 控制图片如何resized/mov
  2. Android驱动使用JNI调用
  3. Android使用HttpURLConnection和HttpClie
  4. Android(安卓)JNI 使用的数据结构JNINati
  5. Android-通过TensorFlow添加机器学习到Ap
  6. Android HelloWorld 例子
  7. Java Android 线程池
  8. Android 各国语言缩写-各国语言简称
  9. Android网络渗透套件—dSploit
  10. 〖Android〗简单隐藏Android虚拟键盘的方