-2

以下のだまされたエラーが表示されますが、その理由はわかりません。$_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');   
    }
4

3 に答える 3

3

PHPについてもっと読むべきです。「foreach」には 2 つの構文があります。

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

于 2013-01-27T14:43:28.500 に答える
2

あなたが望むのはマージされた配列だと思います:

foreach(array_merge($_POST['add'], $_POST['cpl']) as $value) {
  // ...
于 2013-01-27T14:50:05.720 に答える
1

まず、PHP では、&&操作の結果は常にブール値 (つまり、trueまたはfalse) であり、それを に指定することはできませんforeach(そして、なぜそうしたいのでしょうか?)。そのため、エラーが発生します。

第 2 に、たとえ可能であったとしても、issetここで使用する意味はほとんどありません。$_POST['add']または$_POST['cpl']が実際に設定されていない場合、通知発生します。

したがって、コードの最初のセクションを次のように書き換えることができます。

$valid = isset($_POST['add']) && isset($_POST['cpl']);

...または、構造の柔軟な性質を考慮に入れるとisset、ただ...

$valid = isset($_POST['add'], $_POST['cpl']);

...なぜなら、その公式ドキュメントで述べられているように:

複数のパラメータが指定されている場合、 isset() は、すべてのパラメータが設定されている場合にのみ TRUE を返します。評価は左から右に進み、設定されていない変数が検出されるとすぐに停止します。

チェックする引数のセットが実際にたくさんある場合、および/または毎回 '$_POST' と入力するのが面倒な場合は、代わりにそれらの名前foreachの配列(実際の値ではなく!)を調べるために使用します。

$valid = true;
foreach (array('add', 'cpl', 'whatever', 'it', 'takes') as $argName) {
  if (! isset($_POST[$argName])) {
    $valid = false;
    break;
  }
}
于 2013-01-27T14:41:35.270 に答える