
いつもお世話になっております。
チェックボックスの値を
<input type="checkbox" value="ok" name="check[]">
として配列で渡し、ここで選択された値をforeachで回してvalueがokの場合は対応するカラムにokを挿入しています。
このやり方では、例えばチェックボックスでチェックさせたい項目が100個あった場合はチェック結果を格納するテーブルに
ck1 ck2 ck3 ck4 ck5 ck6......ck99 ck100
のように100個カラムを作る必要があります。
100個作るのが面倒・・・というわけでは無く、このやり方で良いのだろうかと疑問に感じてきました。
大量のチェックボックスを処理する場合、他に良いテーブル構造や方法などありましたら教えていただけるとうれしいです。
No.1ベストアンサー
- 回答日時:
>foreachで回してvalueがokの場合は対応するカラムにokを挿入
という運用方法であれば
><input type="checkbox" value="ok" name="check[]">
では実現できません。
たとえば
<input type="checkbox" value="1" name="check[]">
<input type="checkbox" value="2" name="check[]">
<input type="checkbox" value="3" name="check[]">
などのようにvalue値で判断するか、
<input type="checkbox" value="1" name="check[1]">
<input type="checkbox" value="1" name="check[2]">
<input type="checkbox" value="1" name="check[3]">
のようにvalueは適当にいれておいてnameでユニークにするのが
妥当でしょう。いずれのやり方でも
>ck1 ck2 ck3 ck4 ck5 ck6......ck99 ck100
>のように100個カラムを作る必要があります。
とする必要はなく、「チェックされたものを入れておくカラム」が
1個あれば、あとは1番と3番と7番がチェックされました・・・
のように1チェックにつき1レコードをもてばカラムを
増やす必要はありません。
お返事ありがとうございます。
色々勘違いしており申し訳無いです。
>とする必要はなく、「チェックされたものを入れておくカラム」が
>1個あれば、あとは1番と3番と7番がチェックされました・・・
>のように1チェックにつき1レコードをもてばカラムを
>増やす必要はありません。
仰る方法ですとチェックする項目が増えた場合でもDBを意識せず、フォーム表示部分で追加するだけでチェック出来ますね。
いつも色々教えて頂き、ありがとうございます。
そこで、図々しくももう少し質問させて頂きたいのですが、
上記の方法でchecktableとは別にusertableがあるとして、ユーザIDを用いて結合し、検索等を行えるとこまではわかるのですが、
この方法でチェックボックスがユーザによって更新される場合、更新時にchecktableにユーザIDを用いてDELETEコマンドを発行した後、テーブル上から該当ユーザのチェック情報を削除→入力されたチェック情報をINSERT、という形で良いでしょうか?
No.2
- 回答日時:
思いつく手は、#1さんの言うように。
チェックテーブルを作って
・元のレコードのキー
・チェック番号
と言うようなレコードを持つとか。
他の案としては、チェックフラグを1個の文字列カラムにして、
0000101010101010100....(100個分の文字列)
0なら無効1なら有効として処理する事で文字列で持つ事も出来ます。
お返事ありがとうございます。
>0000101010101010100....(100個分の文字列)
>0なら無効1なら有効として処理する事で文字列で持つ事も出来ます。
このようなやり方もあるのですね。
項目の量や拡張性、検索の利便性などを考えるとチェック専用テーブルにレコードを足して行く方法がやりやすそうですが、場合によっては0と1を用いる方法が都合が良い場面もありそうです。
今後の参考にさせていただきます。
ありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
phpのheader("Location:#pos")...
-
PHP8でWarning:Undefined varia...
-
フォームで戻った際に入力済み...
-
csvファイルについて教えて下さ...
-
セッション関数を使わずにファ...
-
composerをインストールしたい...
-
SplFileObject を利用したとき...
-
PHPSpreadsheetによる書き出し...
-
phpの問い合わせフォームを作っ...
-
marginの値でマイナス値を設定...
-
submitで思うようにページが遷...
-
HTML PHP ラジオボタンのイベント
-
php でqiitaのサイトにあったフ...
-
PHPの勉強してます。 配列のと...
-
BASIC認証のフォームをデザイン...
-
アップロードファイルを表示す...
-
複数のパソコンの中の1つのパソ...
-
返信機能のツリー構造の深さを...
-
PHPについて。
-
PHPからCSVをアップロード後、m...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
検索時の選択内容を保持する方法
-
HTMLで前の画面に戻る時、入力...
-
ショッピングカートの作成
-
PHPで画像の渡しが上手く行きま...
-
PHPでCookieを使った訪問回数に...
-
phpでのボタン押下の活性・非活...
-
フォームへの前回入力値をクリ...
-
DBの値をチェックボックスに反...
-
テキストボックスとsubmitボタ...
-
パラメーターを隠す
-
PHPでユーザー情報を入力して簡...
-
POSTデータのNAME属性をVALUEに...
-
<input type="hidden" >で配列...
-
左右に分かれているフレーム間...
-
【PHPチェック】ラジオボタンが...
-
入力した部分を表示させたまま...
-
複数チェックボックスの入力制...
-
ラジオボタンをsessionで使いたい
-
複数のラジオボタングループを...
-
PHPの初心者です。現在チェック...
おすすめ情報