尝试使用php和mysql登录时收到“无效登录”
我查看了许多网站比较各种登录脚本并找不到任何解决方案。我把正确的信息,并得到一个'无效登录',如果我不把任何东西在那里我得到一个'无效登录'。我真的可以使用一些帮助来排除故障。下面是代码尝试使用php和mysql登录时收到“无效登录”
<?php
include_once ('dbc.php');
$user_email = mysql_real_escape_string(isset($_POST['email']));
if (isset($_POST['Submit'])=='Login')
{
$md5pass = md5($_POST['pwd']);
$sql = "SELECT id,user_email FROM users WHERE
user_email = '$user_email' AND
user_pwd = '$md5pass' AND user_activated='1'";
$result = mysql_query($sql) or die (mysql_error());
$num = mysql_num_rows($result);
if ($num = 0)
{
// A matching row was found - the user is authenticated.
session_start();
list($user_id,$user_email) = mysql_fetch_row($result);
// this sets variables in the session
$_SESSION['user']= $user_email;
if (isset($_GET['ret']) && !empty($_GET['ret']))
{
header("Location: $_GET[ret]");
} else {
header("Location: myaccount.php");
}
//echo "Logged in...";
exit();
}
header("Location: login.php?msg=Invalid Login");
//echo "Error:";
exit;
}
?>
表单代码----
<td bgcolor="#e5ecf9" class="mnubody"><form name="form1" method="post" action="">
<p> </p>
<p align="center">Your Email:
<input name="email" type="text" id="email">
</p>
<p align="center"> Password:
<input name="pwd" type="password" id="pwd">
</p>
<p align="center">
<input type="submit" name="Submit" value="Login">
</p>
<p align="center"><a href="register.php">Register</a> | <a href="forgot.php">Forgot</a></p>
</form></td>
if (isset($_POST['Submit'])=='Login')
永远不会在该块运行代码。 isset返回true或false。
尝试
if (isset($_POST['Submit']) && $_POST['Submit'] =='Login')
这就是为什么你总是重定向到无效的登录网址。除此之外,我没有真正检查代码中是否存在逻辑错误。
另外,$user_email = mysql_real_escape_string(isset($_POST['email']));
也不会给你想要的结果。
你也需要改变if ($num = 0)
到if ($num > 0)
。无论哪种情况,您都需要使用双等于==
来比较值。这将分配0到$ num并执行该if语句正文中的代码。
这应该如何处理?另外,$ user_email = mysql_real_escape_string(isset($ _ POST ['email']));也不会给你想要的结果。 – user1144511 2012-01-13 02:07:52
如果某个值没有像下面这样设置,你可以禁止一个警告:'$ user_email = mysql_real_escape_string(@ $ _ POST ['email']);'或者如果未设置则重定向到错误页面' if(!isset($ _ POST ['email'])){header('Location:error.php?msg = No%20email%20address%20provided');出口; }'或者只是'$ user_email =(isset($ _ POST ['email']))? mysql_real_escape_string($ _ POST ['user_email']):'';' – drew010 2012-01-13 16:53:20
如果($ NUM = 0)
应该
如果($ NUM == 1)
http://php.net/manual/en/language.operators.comparison.php
更新:
您应该检查匹配的多行。随时抛出异常/日志$ num> 1。这样的检查将有助于检测数据库一致性问题,这些问题在数据库完全灾难发生之前就会出现。
它应该是'if($ num> 0)'或'if($ num == 1)' – drew010 2012-01-12 02:28:10
@ drew010:P是啊我只是抹去了什么我第一遍就注意到了。 (更新) – Pat 2012-01-19 23:03:01
如果(1 == $ num)更好的做法:) – vascowhite 2012-01-19 23:10:13
这是一个建议:简化代码直到它工作,然后逐个添加功能。 – 2012-01-12 02:18:04
请发布表格代码 – 2012-01-12 02:19:44
我看到你正在做某种类型的电子邮件激活。你确定该部分正在工作,并将值设置为1? – 2012-01-12 02:21:18