2

データベースから動的に入力する更新フォームがあります。フォームに2つのチェックボックスがあり、配列に投稿するため、1つの送信ボタンを押して、foreachステートメントですべての行を更新できます。テキストフィールドは正常に機能しますが、チェックボックスフィールドが配列に投稿されると、ゼロが省略され、配列が短くなります。

nullチェックボックスがある場所に0を追加するにはどうすればよいですか?

これが私のフォームです

    <form action="<?php echo $editFormAction; ?>" method="post" name="form1" id="form1">

<input type="hidden" name="ss_id[]" value="<?php echo $row_rsSnapshot['ss_id']; ?>" />
<input type="hidden" name="ss_yearmonth[]" value="<?php echo htmlentities($row_rsSnapshot['ss_yearmonth'], ENT_COMPAT, 'UTF-8'); ?>" />
<tr>
  <td>
  <input <?php if (!(strcmp($row_rsSnapshot['ss_inventory'],1))) {echo "checked=\"checked\"";} ?> type="checkbox"  name="ss_inventory[]" value=""  <?php if (!(strcmp(htmlentities($row_rsSnapshot['ss_inventory'], ENT_COMPAT, 'UTF-8'),""))) {echo "checked=\"checked\"";} ?> />

  </td>
  <td>

  <input <?php if (!(strcmp($row_rsSnapshot['ss_write_off'],1))) {echo "checked=\"checked\"";} ?> type="checkbox"  name="ss_write_off[]" value=""  <?php if (!(strcmp(htmlentities($row_rsSnapshot['ss_write_off'], ENT_COMPAT, 'UTF-8'),""))) {echo "checked=\"checked\"";} ?>

  </td>
  <td> 
  <input type="text" name="ss_date[]" value="<?php echo htmlentities($row_rsSnapshot['ss_date'], ENT_COMPAT, 'UTF-8'); ?>" size="32" />
  </td>
  <td>
  <input type="text" name="ss_transaction[]" value="<?php echo htmlentities($row_rsSnapshot['ss_transaction'], ENT_COMPAT, 'UTF-8'); ?>" size="32" />
  </td>...

そして、これが私のSQL更新クエリです

    foreach($_POST['ss_id'] as $key=>$ss_id){


    $ss_inventory = GetSQLValueString(isset($_POST['ss_inventory'][$key]) ? "true" : "", "defined","1","0");
    $ss_write_off = GetSQLValueString(isset($_POST['ss_write_off'][$key]) ? "true" : "", "defined","1","0");
    $ss_date = $_POST['ss_date'][$key];
    $ss_transaction = $_POST['ss_transaction'][$key];
    $ss_debit = $_POST['ss_debit'][$key];
    $ss_credit = $_POST['ss_credit'][$key];
    $ss_yearmonth = $_POST['ss_yearmonth'][$key];



$sql = "UPDATE snapshot SET ss_inventory = '$ss_inventory', ss_write_off = '$ss_write_off', ss_date = '$ss_date', ss_transaction = '$ss_transaction', ss_debit = '$ss_debit', ss_credit = '$ss_credit' , ss_yearmonth = '$ss_yearmonth' WHERE ss_id = '$ss_id' ";

 mysql_select_db($database_connMyayla, $connMyayla);
 $Result1 = mysql_query($sql, $connMyayla) or die(mysql_error());

}

  }
 mysql_close();
?>
4

2 に答える 2

1

これはそれを解決しました

誰かが興味を持っているなら...

このクエリが入力されている行数を確認するためにカウンターを配置し、それをチェックボックス名の配列に挿入しました...

$i = 0;

 do { 

...

      <td>
      <input <?php if (!(strcmp($row_rsSnapshot['ss_inventory'],1))) {echo "checked=\"checked\"";} ?> type="checkbox"  name="ss_inventory[<?php echo $i;?>]" value=""  <?php if (in_array($i, $ss_inventory)) echo "checked='checked'"; ?> />
      </td>

      <td>
       <input <?php if (!(strcmp($row_rsSnapshot['ss_write_off'],1))) {echo "checked=\"checked\"";} ?> type="checkbox"  name="ss_write_off[<?php echo $i;?>]" value=""  <?php if (in_array($i, $ss_write_off)) echo "checked='checked'"; ?> />
      </td>


....    
$i++;

    } while ($row_rsSnapshot = mysql_fetch_assoc($rsSnapshot)); 

これで、チェックされているチェックボックスが正しいアレイ番号に対応するようになります。

例えば

4行のデータがあるとしますが、行2と4のチェックボックスのみをオンにします。

//run this to see your result

print_r($_POST['ss_inventory']);

//outputs:  Array ([1] => [3] =>) 

これが私の出力になる前は、falseチェックボックスが送信されていなかったか、NULLであったため、すべてが配列の先頭にプッシュされていました。したがって、行1と2はtrueになります。

//outputs:  Array ([0] => [1] =>) 

チェックボックス「チェック済み」も参照してください -配列が空の場合、値は以前の配列値にジャンプします

于 2012-05-30T18:06:10.220 に答える
0

ブラウザは、チェックされていないチェックボックスを送信しません。一意の名前を付けるか、ラジオボタンを使用する必要があります。

于 2012-05-30T17:01:13.417 に答える