【发布时间】:2015-10-24 21:54:59
【问题描述】:
我有一个 PHP 脚本,它应该检查我输入的用户电子邮件所在的数据库。我已经设置好所有内容,以便在提交表单时运行脚本,但我认为我的表单设置方式一定有问题。它似乎没有认识到存在一行。我输入了一个我知道存在的电子邮件地址;但是,它似乎没有找到它。
app.js
$(document).ready(function() {
$("submit").click(function() {
alert("This was a test.");
$.ajax({
type: "POST",
url: "main_login.php",
success: function(data) {
alert(data);
$(".message").text(data);
}
});
});
});
main_login.php
<?php
$conn = new mysqli('localhost', 'user', 'pass!', 'db');
mysqli_set_charset($conn, 'utf8mb4');
$check = "SELECT * FROM users WHERE email = '$_POST[email]'";
$results = mysqli_query($conn, $check);
$data = mysqli_fetch_array($results, MYSQLI_NUM);
if($data == 1) {
echo "Login successful";
} else {
echo "This account does not exist";
}
$conn->close();
?>
登录.php
<div class="container login">
<div class="panel panel-default login-panel">
<div class="panel-heading">span class="log-h1">Sign-in</span>
</div>
<div class="panel-body">
<form name="loginform" action="login.php" method="post">
<div class="form-group">
<label for="username">Email</label>
<input type="email" class="form-control"
name="email" id="email" placeholder="Email address">
</div>
<div class="form-group" style="float: right;">
<input type="submit" class="btn btn-primary" name="Submit"
value="Sign-in">
</div>
</form>
<span class='message'></span>
</div>
</div>
</div>
再一次,除了验证我提供的电子邮件地址存在之外,一切正常。我认为不管我做什么都不会。
【问题讨论】:
-
您应该首先检查您从 app.js 发送到 main_login.php 的数据是否被接收。使用 isset($_POST['email']) 方法。
-
永远不要ever将原始的
$_POST变量直接传递到这样的SQL 字符串中。任何包含引号字符的输入都会使您的程序崩溃,这使得黑客可以很容易地对您的数据库做任何他想做的事情。使用mysqli_prepare()了解参数化查询以确保您的查询安全。 -
也就是说,您没有从 app.js 发送任何数据。这就是您的代码返回“帐户不存在”的原因。看看这里:stackoverflow.com/questions/5046930/…
-
所以基本上我需要在我的
$.ajax函数中添加一个data: { 'email':'email' },? -
附带说明,您应该真正从该发布请求中转义数据。