我有一个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();
?>
的login.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>
同样,除了验证我提供的电子邮件地址之外,一切都有效。无论我做什么,我都不认为这样做。
答案 0 :(得分:1)
尝试更改此
$check = "SELECT * FROM users WHERE email = '$_POST[email]'";
到
$check = "SELECT * FROM users WHERE email = '" . $_POST['email'] . "'";
你也想改变if - fetch_row返回null或数组(http://php.net/manual/en/mysqli-result.fetch-array.php)
所以你要做的是if($data)
而不是if($data == 1)
,因为它永远不会返回1.
答案 1 :(得分:1)
修改您的app.js
$(document).ready(function() {
$("submit").click(function() {
alert("This was a test.");
var email = $("#email").val(); // This line...
$.ajax({
type: "POST",
url: "main_login.php",
data: {email : email}, // This line..
success: function(data) {
alert(data);
$(".message").text(data);
}
});
});
});
修改你的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();
?>
答案 2 :(得分:0)
主要问题在于你的app.js
/* attach a submit handler to the form */
$("#formID").submit(function(event) {
/* stop form from submitting normally */
event.preventDefault();
/* get some values from elements on the page: */
var $form = $( this ),
url = $form.attr( 'action' );
/* Send the data using post */
var posting = $.post( url, { name: $('#emailID').val() } );
/* Alerts the results */
posting.done(function( data ) {
alert('success');
});
});
这是一种更好的方法,其中formID是表单的ID,而emailID是您必须在html中输入的电子邮件输入的ID。
但更简单的方法是不使用表单,而是使用带有id的简单按钮和输入字段然后使用
$("#buttonID").click(function() {
var postData = $('#emailID').val();
$.ajax({
type: "POST",
data : {'pd' : postData},
url: "main_login.php",
success: function(data) {
alert(data);
$(".message").text(data);
}
});
此处emailID是电子邮件输入字段的ID,如果是按钮的ID,则为buttonID。另外,请在您的html中包含jquery脚本。检查php文件中的$ _POST ['pd']。
你的html可以像
一样简单<input type="email" id="emailID"/>
<button id="buttonID">Click</button>
请注意,您的代码存在各种安全问题。
修改强>
main_login.php
<?php
$conn = new mysqli('localhost', 'user', 'pass!', 'db');
mysqli_set_charset($conn, 'utf8mb4');
if(isset($_POST['pd'] && !empty($_POST['pd'])) {
$check = "SELECT * FROM users WHERE email =" . $_POST[email];
$results = mysqli_query($conn, $check);
$data = mysqli_fetch_array($results, MYSQLI_NUM);
$conn->close();
if($data == 1) {
echo "Login successful";
} else {
echo "This account does not exist";
}
}
else { echo 'postdata not received'; }
?>
请注意,我在发送AJAX resopnse之前已关闭数据库连接。尝试在使用AJAX时将响应保持为代码的最后一行,因为如果我在AJAX响应之后保留其他代码,我在不同情况下遇到了很多问题。但是,如果事情对你来说正常,你也可以忽略这一点。还要发布运行代码时遇到的错误。