为foreach提供的参数无效?

时间:2016-03-12 16:49:22

标签: php foreach

我的代码应该在登录/登录时显示验证错误,但由于某种原因,它给了我:

Warning: Invalid argument supplied for foreach() in C:\xampp\htdocs\first.php on line 28

我不知道如何解决这个问题,我很确定我做的一切都是正确的。下面是代码:

<html>
<body>
<form action="first.php" method="post">
Username:<input type="text" name="username"><br />
Password:<input type="password" name="password"><br />
<input type="submit" name="submit"><br />
</form>
<?php
if(isset($_POST['submit'])){

$errors = array();
$username = $_POST['username'];
$password = $_POST['password'];
if(!isset($username) || empty($username)){
    $errors = "Empty username<br />";
}
if ($username = $password){
    $errors = "Username cannot match password";
}
if ($username > 10){

    $errors['username'] = "Username out of range<br />";
}
if (!empty($errors)){
echo "<div class=\"error\">";
echo "Please fix the following errors:";
echo "<ul>";
foreach($errors as $key => $error){
echo "<li>{$error}</li>";
}
echo "</ul>";
echo "</div>";
}
}
?>
</body>
</html>

请不要给我整个代码,只要给我错误的部分,告诉我他们去哪里以及为什么!

2 个答案:

答案 0 :(得分:2)

if ($username = $password){
    $errors = "Username cannot match password";
}

您使用赋值运算符(=),而不是比较运算符(==)。这将始终评估为true,这意味着$errors始终是一个字符串。

因为它是一个字符串并且它不是空的,所以它会进入foreach,因此会出错。

答案 1 :(得分:2)

$errors = "Empty username<br />";

以上将$errors设置为字符串。你不能用foreach循环迭代一个字符串,因此错误。

相反,请将该行替换为:

$errors['username'] = "Empty username<br />"

另外。您的if条件将始终通过,因为您错误地使用了赋值=运算符而不是相等运算符。将其更改为:

if ($username == $password){