我收到下面的愚蠢错误,但不确定原因。 $ _Post都有数据。
错误:警告:在第19行的/home/soc/process_member.php中为foreach()提供的参数无效
$valid = true;
foreach($_POST['add'] && $_POST['cpl'] as $value) {
if(!isset($value)) {
$valid = false;
}
}
if(!$valid) {
$err .= 'please fill in all fields';
$en['reg_error'] = '<div class=err style="color: #FF0000;"><b>'._error.': '.$err.'</b></div><br>';
load_template('modules/members/templates/s_reg.tpl');
}
答案 0 :(得分:3)
您应该阅读有关PHP的更多信息。 “foreach”有两种语法:
foreach (array_expression as $value)
statement
foreach (array_expression as $key => $value)
statement
这是完全错误的:
foreach($_POST['add'] && $_POST['cpl'] as $value) {
让我举个例子:
<?php
foreach (array(1, 2, 3, 4) as &$value) {
$value = $value * 2;
}
?>
有关详细信息,请查看有关foreach的官方PHP文档:http://php.net/manual/en/control-structures.foreach.php
答案 1 :(得分:2)
我认为你想要的是一个merged数组:
foreach(array_merge($_POST['add'], $_POST['cpl']) as $value) {
// ...
答案 2 :(得分:1)
首先,在PHP中,&&
操作的结果始终是布尔值(即true
或false
) - 并且您无法将其提供给foreach
(以及为什么您可能希望?),因此错误。
其次,即使有可能,在这里使用isset
仍然没有意义:如果确实未设置$_POST['add']
或$_POST['cpl']
,则通知是提出。
所以,您可以像这样重写代码的第一部分:
$valid = isset($_POST['add']) && isset($_POST['cpl']);
......或者,考虑到isset
构造的灵活性,只需......
$valid = isset($_POST['add'], $_POST['cpl']);
...因为,如'official doc:
所述如果提供了多个参数,则isset()将仅返回TRUE 如果设置了所有参数。评估从左到右 并在遇到未设置的变量时立即停止。
如果实际上有一大堆args需要检查和/或你懒得每次都输入'$ _POST',请使用foreach
来查看名称的数组(而不是实际值!):
$valid = true;
foreach (array('add', 'cpl', 'whatever', 'it', 'takes') as $argName) {
if (! isset($_POST[$argName])) {
$valid = false;
break;
}
}