2012-01-12 267 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