2010年10月23日

[PHP-users 35386] Re:チェックボックスにチェックがない場合

久光です


 説明が足りてなくてすみません。いろいろなフォームページが用意されていて、それらから送られてくるフォームデータを使ってMySQLを更新するphpファイルを作っています。

<input type="checkbox" name="hoge[]" value="1">
<input type="checkbox" name="hoge[]" value="2">
といったページから送られてきた配列を

implode(',', $_REQUEST['hoge'])
のようにカンマ区切りにまとめてMySQLのhogeフィールドに入力して更新する処理があります。チェックボックス全てがオフのときはMySQLのhogeフィールドは空値に更新します。

 ここで$_REQUEST['hoge']が存在しない場合は、全てのチェックボックスがオフだと判断してMySQLのhogeフィールドは空値にしてしまいたいところですが、今回の案件ではユーザ側の必要に応じていくつかのページが用意(どれくらいのパターンが用意されるかは未定)されていて更新が必要なフィールドの情報だけが送られてきます。MySQLのhogeフィールドを更新する必要がない場合には上述のようなチェックボックスが存在しないページからデータが送られてくるかもしれないので$_REQUEST['hoge']が存在しないからといってMySQLのhogeフィールドを空値に更新してしまうと想定外の挙動になってしまいます。

送られてきた値の中に$_REQUEST['hoge']が存在しない場合
(1)MySQLのhogeフィールドは更新しない
(2)MySQLのhogeフィールドを空値に更新する
のどちらなのかを区別しないといけないのです。対処法として私は

<input type="hidden" name="hoge[]" value="no data">
<input type="checkbox" name="hoge[]" value="1">
<input type="checkbox" name="hoge[]" value="2">
というようにhogeフィールド更新のチェックボックスを作るページでは必ずhiddenで何か一つ値を入れておくというルールにして、$_REQUEST['hoge']が存在しない場合はMySQLのhogeフィールドの更新は必要なしと決め打ちできることにしようと考えたわけです。


 榎田様からアドバイスいただいたチェックボックスとhiddenをセットにする方法は入力用ページをphpで生成させるときにforeachをちょっと修正すればできあがるし、

if (isset($_REQUEST['hoge'])) {
foreach ($_POST['hoge'] as $val) {
if ($val !== 'no data') {
// 処理
}
}
} else {
// MySQLのhogeフィールドは更新不要なのでなにもしない。
}

という感じで私にとっては見やすいスクリプトになりました。ありがとうございます。


_______________________________________________
PHP-users mailing list PHP-users@xxxxx
http://ml.php.gr.jp/mailman/listinfo/php-users
PHP初心者のためのページ - 質問する前にはこちらをお読みください
http://oldwww.php.gr.jp/php/novice.php3


投稿者 xml-rpc : 2010年10月23日 12:24
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/99439
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。