質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

1回答

407閲覧

inputタグのcheckboxの指定の仕方

annderber

総合スコア98

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2018/01/10 08:19

お世話になります。

checkboxの指定の仕方として、例えば3つ権限をuserテーブルの各フィールドにそれぞれ持たせると仮定した場合、皆様はどのようなcheckboxの指定をしますでしょうか。
バックエンドの言語はphpの想定です。

いくつかのパターンを考えました。

html

1<input type="hidden" name="permission_r" value="0"> 2<input type="checkbox" name="permission_r" value="1">閲覧 3 4<input type="hidden" name="permission_w" value="0"> 5<input type="checkbox" name="permission_w" value="1">登録 6 7<input type="hidden" name="permission_x" value="0"> 8<input type="checkbox" name="permission_x" value="1">削除 9```1つのname属性がテーブルの1フィールドに対応する想定です。 10サーバー側での処理が楽になる感じがします。 11 12 1314```html 15<input type="checkbox" name="permission[]" value="1">閲覧 16<input type="checkbox" name="permission[]" value="2">登録 17<input type="checkbox" name="permission[]" value="3">削除 18```サーバー側で配列で受け取れるのでループ処理がし易い。データベースに登録するときに、 19どのvalueがどのフィールドに対応するか変換処理が必要になる。 20 21 2223```html 24<input type="checkbox" name="permission[]" value="r">閲覧 25<input type="checkbox" name="permission[]" value="w">登録 26<input type="checkbox" name="permission[]" value="x">削除 27```二番目のタイプの文字列版、ぱっと見で理解しやすくなる気がする。 28それ以外は②と同じ? 29 30 3132```html 33<input type="checkbox" name="permission[]" value="閲覧">閲覧 34<input type="checkbox" name="permission[]" value="登録">登録 35<input type="checkbox" name="permission[]" value="削除">削除 36```日本語の文字列をvalueに指定しているのをあまり見かけたことがないです。 37③と④は1フィールドにカンマ区切りとかで格納する際に便利な気がしています。 38 39 40だいたいこのような形になると考えていますが、皆様がいつもコーディングするときにはどのような書き方をしているでしょうか。理由も含めて教えていただきたいです。 41 42よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

2と3は同じ。DBにおける選択肢テーブルのidを数値にするか文字にするかの違い。
2より3が優れているのは例えば登録と削除の間にあとから仕様変更で
「更新」を追加したい場合データの連続性の関係で

HTML

1<input type="checkbox" name="permission[]" value="1">閲覧 2<input type="checkbox" name="permission[]" value="2">登録 3<input type="checkbox" name="permission[]" value="4">更新 4<input type="checkbox" name="permission[]" value="3">削除

と数値でみると順番が保たれないこと。

4は正規化の原則を考えるとあまり使わないですね。
idではなく値をベースにデータのやり取りをすると値をあとから変えられなくなります。

また別の考え方として

HTML

1<input type="checkbox" name="permission[r]" value="1">閲覧 2<input type="checkbox" name="permission[w]" value="1">登録 3<input type="checkbox" name="permission[x]" value="1">削除

というようなやり方もあります。

追記

最終的にDB上の属性を変更させるための処理なので、
チェックボックスで値を受け渡しすると属性を外すことができません。
以下$insにある方をinsert ignore intoで、$delにある方をdelete で処理します
html側でp[r]=""のようにからデータも送るようにしないなら
付いている属性を外すことができなくなるので
基本的には一度すべて削除してから追加していくような何らかの工夫が必要になります

PHP

1$checked=["r"=>"","w"=>"","x"=>""]; 2$p=filter_input(INPUT_POST,"p",FILTER_DEFAULT,FILTER_REQUIRE_ARRAY); 3 4if(is_array($p)){ 5 $ins=$del=[]; 6 foreach($p as $key=>$val){ 7 if(array_key_exists($key,$checked)){ 8 $checked[$key]=$val==1?" checked":""; 9 if($val=="1"){ 10 $ins[]=$key; 11 }else{ 12 $del[]=$key; 13 } 14 } 15 } 16 print_r($ins); 17 print_r($del); 18} 19print <<<eof 20<form method="post"> 21<input type="hidden" name="p[r]" value=""> 22<input type="hidden" name="p[w]" value=""> 23<input type="hidden" name="p[x]" value=""> 24<input type="checkbox" name="p[r]" value="1"{$checked["r"]}>閲覧 25<input type="checkbox" name="p[w]" value="1"{$checked["w"]}>登録 26<input type="checkbox" name="p[x]" value="1"{$checked["x"]}>削除 27<input type="submit" value="go"> 28</form> 29eof; 30

投稿2018/01/10 08:49

編集2018/01/11 02:59
yambejp

総合スコア114833

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

annderber

2018/01/11 00:51

コメントありがとうございます。 yambejpさんであればどのような実装をしますか?
yambejp

2018/01/11 01:01

わたしならこうします <input type="checkbox" name="r" value="1">閲覧 <input type="checkbox" name="w" value="1">登録 <input type="checkbox" name="x" value="1">削除 あくまで配列型でうけるためのサンプルということであれば name="permission[]" value="1" ですね。数値の順番がかわってもあまりきにならないので ただ数値は数値が重要なのではなくIDとして機能するかが重要なので テーブル設計の際に単純な数値でIDを振ることはないと思います。 またテーブルにはソート用のカラムを別途設ける必要があります
annderber

2018/01/11 01:50

これはチェックボックスの項目をマスタテーブルで管理するという前提の設計でしょうか。 回答にあった <input type="checkbox" name="permission[r]" value="1">閲覧 <input type="checkbox" name="permission[w]" value="1">登録 <input type="checkbox" name="permission[x]" value="1">削除 というのもいいですね。phpで処理すると配列で持ちたいことが多いので
yambejp

2018/01/11 02:08

実は属性を変えるという意味では今回の方式では問題があります 追記しておきます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問