道歉,如果这是一个愚蠢的问题,但我现在正在学习PHP而且我遇到了关于对$ _POST值进行isset检查的问题,该值可能存在也可能不存在,具体取决于用户是否提交了形式与否。
如果我在foreach循环的上下文之外执行以下操作,我会得到一个未定义的索引消息(当表单尚未提交时),正如我所期望的那样:
if ($_POST['dorm'] == "somethingrandom"){ ... }
据我了解,我收到此错误,因为$ _POST值不存在,我需要通过isset()或!empty()检查运行它,而不是假设它存在。但是如果我在foreach循环中有完全相同的代码,我就不会收到错误:
<form action="test.php" method="post">
<select name="dorm">
<?php foreach ($DORMS as $dorm){
if ($_POST['dorm'] == $dorm){
echo "<option selected value=\"$dorm\">$dorm</option>";
} else {
echo "<option value=\"$dorm\">$dorm</option>";
}
}
?> // end php tag
</select>
</form>
同样,上面的代码没有创建错误,即使我没有进行任何isset()或!empty()检查。我只是想知道这是否是预期的行为,如果是,为什么?
任何澄清将不胜感激!谢谢。
答案 0 :(得分:1)
当$DORMS
为空时,预计foreach内部不会出现任何通知或错误。当foreach
为空时,$DORMS
内的代码无法执行。如果您在$DORMS
中有一些价值,则可以使用chrome dev tools或firebug看到该通知。
修改
注意与foreach
循环无关。您没有看到通知,因为它是在html中的<select>
元素内生成的。浏览器未显示<select>
内的任何普通文本。如果您的foreach
循环位于<p>
html元素内,您可以在浏览器输出该消息时看到该消息。
<p>
<?php foreach ($DORMS as $dorm){
if ($_POST['dorm'] == $dorm){
echo "<option selected value=\"$dorm\">$dorm</option>";
} else {
echo "<option value=\"$dorm\">$dorm</option>";
}
}
?>
</p>
答案 1 :(得分:0)
您可以通过两种方式检查表单是否通过POST方法提交
if($_POST){
...
}
或
if(isset($_POST['your_variable'])){
...
}
答案 2 :(得分:0)
这样做的唯一原因是因为数组$DORMS
为空。在这种情况下,foreach
循环将永远不会执行正文,因此它永远不会尝试访问不存在的$_POST['dorm']
。
您应该做的是将另一个变量设置为选定的宿舍,并通过isset
检查来保护它:
$dorm_input = isset($_POST['dorm']) ? $_POST['dorm] : null;
然后在循环中检查if ($dorm == $dorm_input)
答案 3 :(得分:0)
这可能会发生,因为它没有进入循环
答案 4 :(得分:0)
试试这个
<?php
if (isset($_POST['dorm']))
{
$DORMS = $rows; //array from database
foreach($DORMS as $dorm){
if($row['dorm'] == $_POST['dorm']){
$isSelected = ' selected="selected"'; // if the option submited in form is as same as this row we add the selected tag
} else {
$isSelected = ''; // else we remove any tag
}
echo "<option value='".$row['id']."'".$isSelected.">".$row['name']."</option>";
}
}
?>
答案 5 :(得分:0)
正如其他人所说,空的$ DORMS可能是没有得到通知的原因。要检查您的代码,您可以执行类似的操作。
if (is_array($DORMS) && sizeof($DORMS) > 0) {
foreach ($DORMS as $dorm) {
if (isset($_POST['dorm']) && $_POST['dorm'] == $dorm){
echo "<option selected value=\"$dorm\">$dorm</option>";
} else {
echo "<option value=\"$dorm\">$dorm</option>";
}
}
}