尝试使用php和mysql登录时收到“无效登录”

时间:2012-01-12 02:16:05

标签: php

我查看了许多网站,比较了各种登录脚本,无法找到任何解决方案。我输入了正确的信息并获得了无效的登录信息'如果我没有在那里放任何东西,我也会收到无效的登录信息。我真的可以使用一些帮助进行故障排除。这是代码

<?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 个答案:

答案 0 :(得分:2)

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

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

尝试

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

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

此外,$user_email = mysql_real_escape_string(isset($_POST['email']));也不会为您提供所需的结果。

请参阅isset()

您还需要将if ( $num = 0 )更改为if ( $num > 0 )。在任何一种情况下,您都需要使用双等于==来比较值。这会将0分配给$ num并执行该if语句的主体中的代码。

答案 1 :(得分:2)

if($ num = 0)

应该是

if($ num == 1)

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

更新

您应检查多个匹配的行。随时抛出异常/日志$ num&gt; 1.这样的检查有助于检测在数据库完全发生灾难之前陷入的任何数据库一致性问题。