0
$result = db2_getsub( array('campaigns_id' => $this_id) );

if (!is_null($result))
    {
          $numsub = 0;
    while ( $row = $result->fetch_object() )
        {
            $numsub = $numsub +1;
            array_push($arrFornavn, $row->sub_name);
                    array_push($arrEtternavn, $row->sub_code);
                    }
          $formcountfld=$numsub;
                }
        else
        {
        $numsub=1;
        $formcountfld=1;
        }

            $i = 1;

            if (1==1) {

                for ($i = 1; $i <= $numsub; $i++)
                {
        ?>
          <div class="fieldrow_horz">

            <div class="fieldgroup">
              <input type="text" id="fornavn_<?= $i ?>" name="fornavn_<?= $i ?>" value="<?= $arrFornavn[$i-1] ?>" />
            </div>

            <div class="fieldgroup">
              <input type="text" id="etternavn_<?= $i ?>" name="etternavn_<?= $i ?>" value="<?= $arrEtternavn[$i-1] ?>" />
            </div>

          </div>

          <?php

                    }

            } else {

        ?>

Notice: Undefined offset: 0 回答をお待ちしております。

4

2 に答える 2

2

これは、存在しない値にアクセスしようとしていることを意味します。あなたの場合は $arrEtternavn[0] です。

小さな例:

$array = array();
$array[1] = 'one';
$array[2] = 'two';
$array[4] = 'four';

echo $array[0]; // This will give a notice, $array[0] does not exist.
echo $array[1]; // 'one'
echo $array[2]; // 'two'
echo $array[3]; // This will give a notice, $array[3] does not exist.
echo $array[4]; // 'four'

非常に簡単な修正は、次のようになります。

value="<?= isset($arrEtternavn[$i-1]) ? $arrEtternavn[$i-1] : '' ?>"

これは短い elseif-> (条件) ? if_True : if_False

編集:通知はそれほど悪いことではないことを付け加えたいと思います. 通知がないのが一番ですが、夜中に目が覚めてしまうようなことがあってはなりません。

于 2013-06-25T12:31:09.170 に答える
1

私の推測では、これは... where$resultの場合、句に設定$numsub = 1しています。elseただし、この場合、配列には何も追加していません。ただし、後のループでは継続条件が として定義されている$numsub <= 1ため、配列インデックス 0 を実行して出力しようとします。これは、配列が空であるため含ま$resultNULLていないためです。

forループを次のように変更する

for ($i = 0; $i < $numsub; $i++) // Notice now strictly less than
{
    <div class="fieldrow_horz">
        <div class="fieldgroup">
          <input type="text" id="fornavn_<?= $i+1 ?>" name="fornavn_<?= $i+1 ?>" 
                                              ^^^^                       ^^^^ 
                 value="<?= $arrFornavn[$i] ?>" />
                                        ^^^
        </div>

        <div class="fieldgroup">
          <input type="text" id="etternavn_<?= $i+1 ?>" name="etternavn_<?= $i+1 ?>" 
                                               ^^^^                       ^^^^ 
                  value="<?= $arrEtternavn[$i] ?>" />
                                           ^^^
        </div>
      </div>

Martijn が示唆isset()するように、配列インデックスが存在するかどうかを調べるためにいつでも使用できます。あなたが実装したロジックから、そのループの配列インデックスが実際に設定されることが保証されていることを保証しようとしていると思うので、上記の小さなロジックエラーが問題を引き起こしていると思います.

それが役に立てば幸い...

于 2013-06-25T12:33:02.373 に答える