2012-01-12 305 views
0

我查看了许多网站比较各种登录脚本并找不到任何解决方案。我把正确的信息,并得到一个'无效登录',如果我不把任何东西在那里我得到一个'无效登录'。我真的可以使用一些帮助来排除故障。下面是代码尝试使用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>&nbsp;</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> 
+2

这是一个建议:简化代码直到它工作,然后逐个添加功能。 – 2012-01-12 02:18:04

+0

请发布表格代码 – 2012-01-12 02:19:44

+0

我看到你正在做某种类型的电子邮件激活。你确定该部分正在工作,并将值设置为1? – 2012-01-12 02:21:18

回答

2
if (isset($_POST['Submit'])=='Login') 

永远不会在该块运行代码。 isset返回true或false。

尝试

if (isset($_POST['Submit']) && $_POST['Submit'] =='Login') 

这就是为什么你总是重定向到无效的登录网址。除此之外,我没有真正检查代码中是否存在逻辑错误。

另外,$user_email = mysql_real_escape_string(isset($_POST['email']));也不会给你想要的结果。

isset()

你也需要改变if ($num = 0)if ($num > 0)。无论哪种情况,您都需要使用双等于==来比较值。这将分配0到$ num并执行该if语句正文中的代码。

+0

这应该如何处理?另外,$ user_email = mysql_real_escape_string(isset($ _ POST ['email']));也不会给你想要的结果。 – user1144511 2012-01-13 02:07:52

+0

如果某个值没有像下面这样设置,你可以禁止一个警告:'$ 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

2

如果($ NUM = 0)

应该

如果($ NUM == 1)

http://php.net/manual/en/language.operators.comparison.php

更新:

您应该检查匹配的多行。随时抛出异常/日志$ num> 1。这样的检查将有助于检测数据库一致性问题,这些问题在数据库完全灾难发生之前就会出现。

+0

它应该是'if($ num> 0)'或'if($ num == 1)' – drew010 2012-01-12 02:28:10

+0

@ drew010:P是啊我只是抹去了什么我第一遍就注意到了。 (更新) – Pat 2012-01-19 23:03:01

+0

如果(1 == $ num)更好的做法:) – vascowhite 2012-01-19 23:10:13