0

テーブル内の各エンジニアのチェックボックスを表示するフォームがあります。エンジニアのチェックボックスがチェックされていない場合にフォームが送信されると、エンジニアはジョブ ($diary_id) から削除されます。

現時点ではコードは機能しますが、次のページに戻る前にこのエラーがページに一時的に表示されます。

in_array() は、パラメーター 2 が配列であると想定し、エラーが発生した場合は null

フォームのコード...

  $sql = "SELECT * FROM users WHERE type = 'engineer' ORDER BY first_name";
  $result = mysql_query($sql) or die(mysql_error());
  while ($row = mysql_fetch_array($result)){ ?>

      <div style="width:70px; float:left">
      <input type="hidden" name="engineer_on_page[]" value="<? echo $row['id'];  ?>"/>
          <input type="checkbox" name="engineer[]" <?
          $eng_id= $row['id'];

              $result2 = mysql_query("SELECT * FROM calls_engineers WHERE call_ce = '$diary_id' AND engineer_ce = '$eng_id'");
              if((mysql_num_rows($result2)) > 0)
              { echo 'checked="checked"';
             ?> value="<? echo $row['id']; ?>" />
          <? echo '   '.$row['first_name']; }
             else {
                 echo "value=".$row['id']." />";
          echo '   '.$row['first_name'];
             } 
              ?>
      </div>

  <? } ?>

選択されていないエンジニアを削除する mysql

foreach($_POST['engineer_on_page'] as $engineer_id) {
            $sql = "SELECT * FROM calls_engineers WHERE call_ce = '$diary_id' AND engineer_ce = '$engineer_id'";
            $result = mysql_query($sql)or die(mysql_error());
                if(!in_array($engineer_id, $_POST['engineer'])){
                    if(mysql_num_rows($result) > 0){
                        $sql = "DELETE FROM calls_engineers WHERE engineer_ce = '$engineer_id' AND call_ce = '$diary_id'";
                        $result = mysql_query($sql)or die(mysql_error());
                    }           
                }

            }

エラーを停止する foreach ループの前に $_POST['engineer'] を配列 ($_POST['engineer'] = array();) として初期化しようとしましたが、ページの動作も停止し、エラー メッセージは表示されません。もう機能しません。

ページを mysqli に更新する必要があることは認識していますが、その前にこの問題を解決したいと考えています。

ありがとう

4

1 に答える 1

2

エンジニアが 1 人だけチェックされている場合、値は配列ではなく文字列である可能性があります。

is_array()次に、 を呼び出す前に を追加しin_array()ます。

if(is_array($_POST['engineer']) && !in_array($engineer_id, $_POST['engineer'])){
    // code          
}

実際には、それを構成する方法はたくさんありますが、アイデアを得る必要があります。

于 2013-05-02T21:00:54.637 に答える