1

チェックボックスを使用して、ユーザーがユーザーをジョブに追加したり、ジョブからユーザーを削除したりできるフォームがあります。現在、エンジニアの名前などは「users」というテーブルに保存されており、ユーザータイプであるエンジニアによって識別されます。フォームのチェックボックスは、whileループを使用してmysqlクエリを表示することによって作成されます。これは、後日Webページを介して新しいユーザーをデータベースに追加できるようにするために行われ、その名前は利用可能なエンジニアのリストに自動的に追加されます。エンジニアをジョブに追加するには、エンジニアの名前にチェックマークを付けてフォームを送信します。

これはうまく機能しますが、ユーザーが別のフォームのチェックボックスをオンまたはオフにしてユーザーを追加または削除できるようにしたいのですが、これを行う方法を一生考えることはできません。

ジョブに割り当てられたユーザーは、3つのフィールドを持つcalls_engineersと呼ばれる多対多のテーブルに格納されます

id_ce(一意のID)call_ce(ジョブのID、外部キー)engineer_ce(エンジニアのID、外部キー)

engineer_ceは、「users」テーブルの「id」であるユーザーの主キーです。

私がこれまでに持っているコードは...

<?  $sql = "SELECT * FROM calls_engineers WHERE call_ce = '$diary_id'";
      $result = mysql_query($sql) or die(mysql_error());
      $row2 = mysql_fetch_array($result);
      $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">
              <? 
                  if($row2['engineer_ce'] == $row['id']){
              ?>
              <input type="checkbox" name="engineer[]" checked="checked" value="<? echo $row['id']; ?>" />
              <? echo '   '.$row['first_name']; 
              } else { ?>
                  <input type="checkbox" name="engineer[]" value="<? echo $row['id']; ?>" />
              <? echo '   '.$row['first_name'];
              }?>
          </div>
  <?
      }

  ?>

これは、エンジニアであるユーザーごとにチェックボックスを作成するだけですが、ユーザーがジョブに割り当てられているかどうかはチェックしません。

どんな助けでも大歓迎です

4

1 に答える 1

0

calls_engineersテーブルをループすることはありません。使用する

$row2 = mysql_fetch_array($result);

エンジニアのすべての割り当てが実際に見つかるわけではありません。これが現在の仕事に含まれているかどうか、すべてのエンジニアをチェックします。

<?  

  $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="checkbox" name="engineer[]" <? 
              $result2 = mysql_query("SELECT * FROM calls_engineers WHERE call_ce = '".mysql_real_escape_string($diary_id)."' AND engineer_ce = ".$row['id']);
              if(mysql_num_rows($result2) > 0) echo 'checked="checked"';
             ?> value="<? echo $row['id']; ?>" />
          <? echo '   '.$row['first_name']; ?>
      </div>

  <? } ?>
于 2012-09-13T22:51:57.073 に答える