我知道这已经进行了讨论,但是问题有些混乱。我正在使用MySqli准备的语句,但我也尝试了原始查询。num_rows总是0,我不知道为什么。因此,登录形式是故障。以下是PHP代码:
<?php
include("config.php");
session_start();
if(isset($_POST["userLogin"])){
$email = ($_POST["userEmail"]);
$password =($_POST["userPassword"]);
$stmt = $con->prepare("SELECT * FROM customers WHERE
'customer_email'=? AND 'customer_password' =?");
$stmt->bind_param("ss", $email, $password);
$stmt->execute();
$stmt->store_result();
$stmt->bind_result($email, $password);
if($stmt->affected_rows == 1){
$stmt->fetch_assoc();
$_SESSION["user"] = $row["customer_id"];
$_SESSION["email"] = $row["customer_email"];
echo "logged in";
} else {
echo "Email / password combination incorrect";
}
}
?>
这是下面的JavaScript代码。
$("#login").click(function(event){
event.preventDefault();
var email = $("#email").val();
var pass = $("#password").val();
$.ajax({
url :"login.php",
method: "POST",
data : {userLogin:1,userEmail:email,userPassword:pass},
success :function(data){
alert(data);
}
})
})
以下是html
<label for="email">E-mail Address</label>
<input type ="email" class ="form-control" id="email" required/>
<label for="email">Password</label>
<input type ="password" class ="form-control" id="password" required/>
<p><br/></p>
<a href="#" style="color:white; list-style:none;">Forgotten
Password</a><input type="submit" class="btn btn-success"
style="float:right;" id="login" value="Login">
相关数据库看起来像这样。
INSERT INTO `customers` (`customer_id`, `customer_name`,
`customer_email`, `customer_pass`, `customer_country`,
`customer_city`, `customer_address`, `customer_zipcode`)
注册效果很好,没有其他问题。我之前的mySQL num_rows返回0,并存储结果解决了问题。但是,这一次太复杂了。我一直在尝试调试几个小时,而不是一件事情。非常感谢帮助。
偶然发现了这个旧问题。看来您在字段/列名称周围使用引号('(。据我所知,文档同意,MySQL不支持这一点。如果以下内容,则必须使用一个:
- 什么都没有,示例:从table1中选择field1
- 示例:从table1中选择`field1`
- 双引号,示例:从table1中选择" field1"
最后一个仅在启用ANSI_Quotes时适用。
现在,我还没有尝试过您的代码,但是引号的使用使您的查询比较两个字符串,而不是字符串的字段/列。您的查询
'customer_email'=?
文学意思是:将文本customer_email与绑定参数的值进行比较。除非表格中输入的用户名/电子邮件是Customer_email,否则它将永远不会匹配。密码相同。