行数が不明なテーブルがあります。チェックボックスフィールドに編集内容を保存しようとしています。フィールドとテキストフィールドを選択します。
テーブルの行がどのように見えるか(一般化)のサンプルを次に示します。
<tr onMouseover="this.bgColor='#EEEEEE'"onMouseout="this.bgColor='#FFFFFF'">
<input type="hidden" name="batchupdate[][item1]" value="118">
<td><a target="blank" href="www.link.com">Link</a></td>
<td>Name</td>
<td><input value="" type="text" name="batchupdate[][item2]" size=35></td>
<td>
<select name="batchupdate[][item3]">
<optgroup label="Group 1">
<option >1</option>
<option >2</option>
<option >3</option>
<option >4</option>
<option >5</option>
</optgroup>
<optgroup label="Group 2">
<option >6</option>
<option >7</option>
<option >8</option>
<option >9</option>
</optgroup>
</select>
</td>
<td><input type="checkbox" value="FALSE" name="batchupdate[][item4]"></td>
</tr>
「id」(item1)は、私のpostgresqlデータベースの自動インクリメントフィールドです。
これがphpです:
if(isset($_POST['savebutton'])) {
if(isset($_POST['bachtupdate']) || is_array($_POST['batchupdate']))
{
foreach($_POST['batchupdate'] as $i)
{
$item1 = $i['item1'];
$item2 = $i['item2'];
$item2 = pg_escape_string($item2);
$item3 = $i['item3'];
if(isset($i['item4'])){
$item4 = "TRUE";
} else {
$item4 = "FALSE";
}
$query = "UPDATE schema.table SET field2='$item2', field3='$item3', field4='$item4' WHERE id='$item1'";
$result = pg_query($database, $query);
if ($result) {
// success
} else {
die("Error: " .pg_last_error());
}
この後、他のロジックがいくつかありますが、クエリ部分は失敗する場所です。基本的にitem3とid(item1)が空であるため、更新する行が見つからないというエラーが表示されます。アイテム2と4は正常に動作し、postgresによって提供されるエラーメッセージにそれらが何を含んでいるかを確認できます。
私はこのソリューションをオンラインで見つけ、自分の用途に適合させました。一部のフィールドが機能し、他のフィールドが機能しない理由について、私は混乱しています。アイデア?
編集:
これは、エコーを使用した場合の出力の外観です(foreachループ内)。postgresクエリをコメントアウトしました。2回実行することに注意してください。また、チェックボックスがtrueを返さないことに気づきました。しかし、すべての情報がそこにあります...、
118(id)、テキストボックス1、オプション2、FALSE(チェックボックス)
119(id)、テキストボックス2、オプション3
118(id)、テキストボックス1、オプション2、FALSE(チェックボックス)
119(id)、テキストボックス2、オプション3
編集:
次に、次のいずれかを試してみます。
phpを使用して、一意の名前属性(、、、など)を作成し
item11
、テーブル内の行数をカウントするループをインクリメントし、変数を変更してクエリを実行します。これは面倒すぎるようですが、他に何も考えられません...、item12
item13
for
を実行する代わりに、私が見つけた他の例に見られる
foreach
ようにループを実行します。for
何が変わるかはわかりませんが、一見の価値があると思います。
見つけたものを報告します。