2015-09-28 82 views
-3

我的問題與我的foreach ...你能幫我修復這個問題嗎?第33行警告:爲foreach()提供的無效參數() - > MySQL連接

 if(isset($_POST["UserName"]) AND isset($_POST["Password"])){ 
     $UserName = $_POST["UserName"]; 
     $Password = $_POST["Password"]; 
     $Password = hash("SHA256", $_POST["Password"]); 


      $sql = "SELECT UserName FROM Login WHERE UserName=$UserName"; 
    foreach($db->query($sql) as $data) { 
       if ($_POST['UserName'] == $data["UserName"] && $_POST['Password'] == $data["Password"]){ 
        header("Location: index.php"); 
     }else{ 
     $cnt = 1; 
     } 
    }  
       if(!empty($cnt)){ 
     echo "Špatné jméno nebo heslo!"; 
     } 


       if(!isset($UserName)){ 
         $_SESSION["Time"] = 36000; 
      $_SESSION["LogedIn"] = 1; 

    }  
       } 

     } 
    } 
    } 
+5

1)你應該看看了準備好的語句/參數化查詢。 2)'$ UserName'需要引用,因爲它是一個字符串3)看看內置的PHP [密碼API](http://php.net/password)。 –

+1

@JonStirling這是正確的答案。 –

+2

4)你不要在你的SQL中請求'Password',這樣的條件永遠不會通過。 5)儘量不要混合和匹配'&&'和'AND'。 6)整理你的縮進。 –

回答

0

Warning: Invalid argument supplied for foreach()意味着query()失敗,並沒有返回數組的foreach爲無效的論點提供():感謝傢伙:)

(將登陸)

警告。

有一些錯誤,使用準備好的語句insted放在查詢的原始值,文本/字符串類型需要引號,在您的查詢返回密碼不僅僅是用戶名,如果不是一個名爲password永遠不會定義一個返回的數組。

正確的代碼

$sql = "SELECT UserName, Password FROM Login WHERE UserName = ?"; 
$stmt = $db->prepared($sql); 
if(!$stmt->execute(array($UserName)){ 
    print_r($stmt->errorInfo()); 
    exit; 
} 

$items = $stmt->fetchAll(PDO::FETCH_ASSOC); 
foreach($items as $data) { 
相關問題