2014-03-27 23 views
0

我試圖用php做一個登錄表單,但是我有一個問題,我沒有找到該錯誤的位置。爲基本登錄系統中的foreach()提供的無效參數

當我提交表單與具有這種誤差修改爲正確的數據I'm:

錯誤之一:

- >警告:提供的foreach無效參數():

`foreach($query as $autUser);` 

錯誤二:

- >注意:未定義的變量: autUser here

if($autEmail == $autUser['email'] && $autSenha == $autUser['senha']) 

而且還給我錯誤'錯誤的通行證',我提出了正確的答案。

有人有這種錯誤的exprience?

你能看到一些錯誤嗎?

我的PHP:

 <?php if(isset($_POST['sendLogin'])) 
     { 
      $f['email'] = mysql_real_escape_string($_POST['email']); 
      $f['pass'] = mysql_real_escape_string($_POST['pass']); 

      if(!$f['email'] || !valMail($f['email'])) 
      { 
       echo 'Email empty or invalid'; 
      } 

      else if(strlen($f['pass']) <8 || strlen($f['pass'])>12) 
      { 
       echo 'Pass must have between 8 and 12 chars!'; 
      } 

      else 
      { 
       $autEmail = $f['email']; 
       $autpass = $f['pass']; 
       $query = "SELECT * FROM users where email= '$autEmail'"; 
       $exeqr = mysql_query($query) or die(mysql_error()); 

      if($query) 
      { 
       foreach($query as $autUser); 
       if($autEmail == $autUser['email'] && $pass == $autUser['pass']) 
       { 
        echo 'Login Sucess'; 
       } 

       else 
       { 
        echo ' Wrong Pass'; 
       } 


      } 
      else 
      { 
       echo 'Informed email does not exist'; 
      } 

      } 
     } 


?> 

我的HTML:

<form name="login" action="" method="post"> 
    <label> 
     <span>E-mail:</span> 
     <input type="text" class="radius" name="email" value="<?php if(isset($f['email'])) echo $f['email']; ?>" /> 
    </label> 
    <label> 
     <span>Password:</span> 
     <input type="password" class="radius" name="pass" value="<?php if(isset($f['pass'])) echo $f['pass']; ?>" /> 
    </label> 
    <input type="submit" value="Login" name="sendLogin" class="btn" /> 
</form> 
+3

分配電子郵件後,您正在使用密碼重寫''$ autEmail''。 ''$ autEmail = $ f ['email']; $ autEmail = $ f ['pass'];''因此它無法找到等於數據庫密碼的電子郵件。也在登錄成功循環theres未定義的常量(可能你想$'autpass''變量) – arma

+0

感謝您的提示..但現在我得到不同的和最糟糕的錯誤! – OzzC

+0

那麼,我解決它使用mysql_fectch_assoc($ exeqr),而不是foreach循環。感謝您的幫助! – OzzC

回答

2

我建議如下:

  • 不要使用MySQL的 - 使用的mysqli或PDO改爲
  • 回聲出/轉儲$ autEmail變量,看看它保持
  • 複製查詢並沒有PHP代碼測試它(通過phpMyAdmin的例如或命令行SQL)

嘗試改變用於if(mysql_num_rows($exeqr) === 0)

比較
+0

謝謝,但我還不知道如何使用PDO或mysqli,如果你的條件不解決我的問題......但我改變了一些東西,現在我現在有一個不同的問題,它進入我的if條件時通過是錯誤的,並說「爲foreach()提供的無效參數!」 – OzzC

+0

那麼,我解決它使用mysql_fectch_assoc($ exeqr),而不是foreach循環。感謝您的提示!順便說一下,我可以使用普通的php和mysql開發這個登錄系統,然後只將sql語句更改爲pdo,並且我的登錄系統的邏輯保持不變?或者改成pdo的時候,我們已經用正常的php/mysql做了邏輯,也會不同 而不僅僅是sql語句? – OzzC