我有一个简单的表单,用于向数据库提交电子邮件地址。我想首先检查,使用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();
}
}
答案 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');
}
},
顺便说一下,你应该使用预备语句。我不知道您是否查询是否有效,但原始问题中问题的根源是回显true
或false
将无法正常工作。
答案 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;
}
}