【发布时间】:2015-12-25 18:51:36
【问题描述】:
我的 foreach 有问题...你能帮我解决这个问题吗?谢谢大佬:)
(将是登录)
警告:在第 33 行为 foreach() 提供的参数无效
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;
}
}
}
}
}
【问题讨论】:
-
1) 您应该查找准备好的语句/参数化查询。 2)
$UserName需要引用,因为它是一个字符串 3) 查看 PHP 内置的 password API。 -
@JonStirling 这是正确答案。
-
4) 您不会在 SQL 中请求
Password,因此该条件永远不会通过。 5)尽量不要混搭&&和AND。 6)整理你的缩进。 -
您的 SQL 查询可能导致错误。可能是因为字符串值周围没有引号。 (对 SQL 注入开放当然也无济于事,因为从技术上讲,您可以执行用户提供的任何代码。)永远不要假设 SQL查询会成功.在继续之前始终检查错误。