カンパ〜イ!←最初の1杯目、なに頼む?

よろしくお願いいたします。
ある条件にあったデータを画面に表示させ、各レコードに
チェックボックスを設けました。このチェックを付けたもの
のみテーブルに更新かけたいと思っています。
--------------------------------
1 りんご 5 □
2 なし  2 □
3 いちご 3 □
--------------------------------
ソースでは(接続などは割愛いたします)
print "<input type='hidden' name='id[]' value='$id'>$id</td>";
のようにname='id[]'とし、受け側は
$id=$_POST["id"][$i];のようにしました。実際行うと例えば3つ条件にあったデータがあったとし、3番目(例ではいちご)にチェックした
とすると、自分の予定では3番目のデータが更新されるはずなのですが、1番目のデータがなぜが保存対象となってしまいます。ためしに
for($i=0; $i<count($_POST["code"]); $i++){
$id=$_POST["id"][$i];
print "$id $code $chk $staff\n<br>";
で経過を見るとやはり1番目が対象となってました。

この方法ですとチェックを一個つけたから、最初のデータから対象とかになってしまうのでしょうか?
うまくチェックをつけたものを保存するには、どこを気をつければ
よろしいでしょうか??

A 回答 (3件)

ANo.2です。



チェックされているhiddenのデータを取得して、
処理をしたいということでしょうか。
(チェックされているhiddenデータのみが必要と解釈しました)


<td><input type='hidden' name='id[1]'><input type='chekubox' name='chk[1]'></td></tr></table>

例えば、次のようにhiddenとcheckboxで同じ添え字を振っておき、
受取り側ではcheckboxにチェックが入っていれば(前回答参照)
hiddenの値をcheckboxの添え字から取得するという処理を
してみてはどうでしょうか。

簡単に書くと次のような処理です。
---------------------------------------------
foreach($_POST['chk'] as $key => $value) {
print $_POST['chk'][$key]."<br>";
}
---------------------------------------------
    • good
    • 0
この回答へのお礼

papillon68様、またもや回答ありがとうございます。

なんとか解決出来ました。上記の内容を利用し
うまく処理できました。感謝です。
受け取ったあとの処理もうまくいって、かなり
うれしい状態です。

今後もよろしくお願い致します。

お礼日時:2007/02/08 10:03

hajimete-sanさん、こんにちは。



過去ログの私の回答が参考になるかもしれません。
http://okwave.jp/qa2691790.html

「hidden」ではなく、「checkbox」でしょうか?^^;
print "<input type='checkbox' name='id['.$id.']'...>";
$idには1,2,3,4,・・・と値が入るのだと解釈しました。

これはPOSTされたデータに添え字をあらかじめ与えてあげています。
もし、
1 りんご 5 □
2 なし  2 レ
3 いちご 3 □
という場合でも、「なし」のデータを添え字2で受け取ることができます。
※添え字0とはなりません。


以下サンプルです。
------------------------------------------------------------
<?php
if(isset($_POST['id'])) {
if(is_array($_POST['id'])) {
foreach($_POST['id'] as $key => $value) {
print "添え字:{$key}、内容:{$value}<br>";
}
} else {
print $_POST['id']."<br>";
}
}

print '<form method="post">';
for($i = 1; $i <= 5; $i++) {
print '<input type="checkbox" name="id['.$i.']" value="'.$i.'">';
}
print '<br><input type="submit">';
print '</form>';
?>
-------------------------------------------------------------
    • good
    • 0
この回答へのお礼

papillon68様、回答ありがとうございます。

>>「hidden」ではなく、「checkbox」でしょうか?^^;
>>print "<input type='checkbox' name='id['.$id.']'...>";
>>$idには1,2,3,4,・・・と値が入るのだと解釈しました。
ここのついてですが、私の書込みが足りませんでしたm(__)m
print "<input type='hidden' name='id[]' value='$id'>$id</td>";
↑はテーブル表示をしていて
<table>
<tr>
<td><input type='hidden' name='id[]'><input type='chekubox' name='chk'></td></tr></table>
というふうにしております。テーブルにしてるのは見た目だけなんですがね。
という状況でチェックボックスの配列を考えておりました。
papillon68様のサンプルを利用し、添え字でその場所の数値(添え字だと
思いますが)を受けられるようになりました。

今チャレンジしているのが、hiddenのデータをどうもってくるかです。
サンプルをうまく活用し、今晩も戦ってみます、ありがとうございます。

またよろしくお願い致しますm(__)m

お礼日時:2007/02/02 20:03

これはチェックした配列が順番に入るためです。


(例えば三番目のデータをチェックしても配列に入るのは$_POST["id"][0]からになります。)
このよう使うのでしたら name="id[]" とせずに、name="id1"
等として、
if ($_POST['id1']) {
#check
}
としたほうがいいでしょう。
配列にどうしても入れなくてはいけないのでしたら、
foreach ($_POST['id'] as $ver) {
if ($ver == $value) {
}
}
というような使い方をしなければいけません。
要するに、
$_POST["id"] = array();
$_POST['id'][] = $value;
という動作と同じです。
    • good
    • 0
この回答へのお礼

moon_night様、回答ありがとうございます。
早速試してみました。

条件にヒットしたデータが何件あるかわからないので
配列で試そうと思っています。

foreach文を利用してみますと、
Warning: Invalid argument supplied for foreach() in ~の
メッセージが出ました。そこで色々調べ、if(is_array($_POST["chk"]))
をforeachの前につけてみました。メッセージは出なくなりましたが、
表示も何も出なくなりました(TT)
現在も格闘しております。
もっと色々調べてみます。

しかしながらmoon_night様のご指摘で、なぜチェックボックスが
おかしかったのかは、理解出来ました。ありがとうございます。

また何かありましたらよろしくお願いします。

お礼日時:2007/02/02 15:38

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報