ajax - 验证数据库中是否已存在行

时间:2017-09-12 08:05:27

标签: javascript php jquery ajax

我有一个简单的表单,用于向数据库提交电子邮件地址。我想首先检查,使用javascript和AJAX,如果表格中已存在该电子邮件地址。无论数据库中是否已存在该行,我使用的代码始终返回true。任何提示?

JS代码

<script> 
$('form').submit(function(e) 
{
  alert('submit intercepted');
  e.preventDefault(e);
  var u = $('#email').val();
  $.ajax({
      url: './test2.php',
      type: 'POST',
      data: u,
      success: function (response) {
      //get response from your php page (what you echo or print)
        $('#status').append('<p>The email is ok to use and the row has been inserted </p><p>' + response);
        console.log('Submitted');
      },
      error: function(jqXHR, textStatus, errorThrown) {
        console.log(textStatus, errorThrown);
        alert('Email exists');
      }
    });
});
</script>

HTML代码

<form id="form" action="./test2.php" method="post"> 
    E-mail: <input type="email" name="email" id="email" required><br>
    <span id="status">   </span>
    <input type="submit" id="btnsub">
  </form>

PHP代码

if(isset($email)) {

  $sql_email_check = $conn->query("SELECT Email FROM test WHERE Email='$email' LIMIT 1") ;

  $email_check = $sql_email_check->num_rows;

  if ($email_check < 1) {

    //return "Available";
    return true;   
    //header('Location: /test.php');
    exit();

  } 
  else 
  {
    //return "Unavailable";
    return false;
    //header('Location: /test.php');
    exit(); 

  }
}

3 个答案:

答案 0 :(得分:0)

在PHP中返回true和false会在浏览器中输出任何内容。尝试这样的事情:

header('Content-Type: application/json');
if (isset($email)) {
  $sql_email_check = $conn->query("SELECT Email FROM test WHERE Email='$email' LIMIT 1") ;
  $email_check = $sql_email_check->num_rows;
  if ($email_check < 1) {
    echo json_encode(['status' => 1]);
    die();
  } 
}

echo json_encode(['status' => 0]);

然后,在您的JavaScript代码中,您执行以下操作:

success: function (response) {
  if (response.status === 1) {
    $('#status').append('<p>The email is ok to use and the row has been inserted </p><p>' + response);
  } else {
    alert('Email exists');
  }
},

顺便说一下,你应该使用预备语句。我不知道您是否查询是否有效,但原始问题中问题的根源是回显truefalse将无法正常工作。

答案 1 :(得分:0)

了解如何在test2.php中设置$ email会有所帮助。这是您稍后创建实际输出的函数的一部分吗?

我的猜测是你的jquery实际上并没有填充$ _POST [&#39; email&#39;]变量,因为当你真正想要给它一个对象时,你只是给数据一个字符串值

var u = { 'email': $('#email').val() };

此外,你需要处理错误;以及成功回调您的请求的成功案例。错误回调是针对实际的请求错误。

这解决了你的问题吗?

答案 2 :(得分:0)

所以基本上问题是将PHP代码的答案返回给ajax函数。由于某种原因,返回值没有按预期正确解释(无论如何我的理解)

PHP代码

DECLARE @DATA VARCHAR(256);

SET @DATA = 'ABC001'

SELECT STUFF(@DATA, PATINDEX('%[1-9]%', @DATA), LEN(@DATA), SUBSTRING(@DATA, PATINDEX('%[1-9]%', @DATA), LEN(@DATA))+1) AS DATA

JS CODE

if(isset($email)) {    
  $sql_email_check = $conn->query("SELECT Email FROM test WHERE Email='$email' LIMIT 1") ;     
  $email_check = $sql_email_check->num_rows;    

  if ($email_check == 0) {
    echo 'true';  
    return; 
    } 
  else 
  {
    echo 'false';
    return;    
  }
}