当我将电子邮件和密码存储在数据库中,然后发布相同的电子邮件和密码时,它与最新插入的电子邮件和密码匹配;如果我尝试使用之前插入的其他电子邮件和密码登录,则会显示错误。
<?php
include 'connection.php';
if(isset($_POST['Login'])) {
$mail = $_POST['email'];
$pwd = $_POST['password'];
$query="SELECT email,password FROM fb_log";
$result=mysql_query($query);
while($data=mysql_fetch_array($result)) {
if($mail==$data['email'] && $pwd==$data['password']) {
$_SESSION['email'] = $mail;
$_SESSION['password'] = $pwd;
header("location:home.php");
} else {
header("location:bhag.php");
}
}
}
?>
答案 0 :(得分:1)
避免使用mysql_函数已弃用。
使用mysqli_功能
以下示例使用mysqli_ functions:
<?php
include 'connection.php';
if(isset($_POST['Login']))
{
//uses mysqli connection
$conn = new mysqli($servername, $usr, $passwd, $dbname);
$mail = $_POST['email'];
$pwd = $_POST['password'];
/*search the email and passwd via the sql query itself
to avoid looping through the huge dataresult in your previous code
*/
$query="SELECT email,password FROM fb_log where email='$mail' AND password='$pwd";
$res = $conn->query($query);
if($res->num_rows >0){
$_SESSION['email'] = $mail;
$_SESSION['password'] = $pwd;
$conn->close();
header("location:home.php");
}else{
$conn->close();
header("location:bhag.php");
}
}
?>
答案 1 :(得分:0)
<?php
include 'connection.php';
if(isset($_POST['Login']))
{ $mail = $_POST['email'];
$pwd = $_POST['password'];
$query="SELECT email,password FROM fb_log";
$result=mysql_query($query);
$flag=0;
while($data=mysql_fetch_array($result))
{
if($mail==$data['email'] && $pwd==$data['password'])
{
$flag=1;
break;
}
}
if($flag==1)
header("location:home.php");
else
header("location:bhag.php");
}
?>
答案 2 :(得分:0)
你做的方式不合适。您可以在select查询中简单地传递post变量,而不是使用while循环。
<?php
include 'connection.php';
if(isset($_POST['Login'])) {
$mail = $_POST['email'];
$pwd = $_POST['password'];
$query='SELECT email,password FROM fb_log WHERE email = "'.$mail.'" AND password = "'.$pwd.'" ';
$result=mysql_query($query);
$data=mysql_fetch_array($result);
if(isset($data) && !empty($data)) {
$_SESSION['email'] = $mail;
$_SESSION['password'] = $pwd;
header("location:home.php");
} else {
header("location:bhag.php");
}
}
?>
希望它能解决你的问题。
答案 3 :(得分:0)
首先,您不需要从'fb_log'表中选择所有数据。
您可以使用mysql有条件地选择字段:
$query = "SELECT email,password
FROM fb_log
WHERE email = '$mail'
AND password = 'md5($pwd)'";
$result = mysql_query($query);
if (mysql_num_rows($result) > 0) {
// You have some result
} else {
// Result is empty
}
我还建议您使用mysqli而不是mysql并验证$ _POST数据。
答案 4 :(得分:0)
这是让你忙碌的东西,你可以沿途学到一些东西。让我们一步一步地,或者说逐行。
<?php
include 'connection.php';
if(isset($_POST['Login'])) {
$mail = $_POST['email'];
$pwd = $_POST['password'];
$query="SELECT email,password FROM fb_log";
$result=mysql_query($query);
while($data=mysql_fetch_array($result)) {
if($mail==$data['email'] && $pwd==$data['password']) {
$_SESSION['email'] = $mail;
$_SESSION['password'] = $pwd;
header("location:home.php");
} else {
header("location:bhag.php");
}
}
}
?>
$query="SELECT email,password FROM fb_log";
这是您的主要问题所在。目前,此查询将返回fb_log表中的所有电子邮件和密码。你正在寻找一个特定的条目。这是你的WHERE子句,如下所示:
$query="SELECT email,password FROM fb_log WHERE email=SOMETHING AND password=SOMETHING";
我建议使用数据库抽象层,例如MySQLi或PDO,但我会更加困惑,所以让我们采取SQL注入倾向的路径,并这样做:
$query="SELECT email,password FROM fb_log WHERE email=$_POST['email'] AND password=$_POST['password']";
现在,您的查询将仅返回您要查找的电子邮件/密码组合。
上面的代码有很多问题,但暂时不要强调自己。学习基础知识,并在您准备好时开始研究更高级的主题。
如果您有这种感觉,请查看at this tutorial on PDO。
另外,如果你遇到困难,请在这里给我一个个人信息,我会帮助你。