チェックボックスを使った複数選択の処理を教えて下さい。
現在の処理は下記のようにしております。
00.phpの中のチェックボックスの記述です。複数選択してから01.phpに値を渡します。
<label>
<input type="checkbox" name="working_days1" value="ド短期1日~OK">
ド短期1日~OK</label>
<label>
<input type="checkbox" name="working_days2" value="週2、3日程度">
週2、3日程度</label>
<label>
<input type="checkbox" name="working_days3" value="月~金曜日">
月~金曜日</label>
<br>
<label>
<input type="checkbox" name="working_days4" value="土日祝日のみ">
土日祝日のみ</label>
<label>
<input type="checkbox" name="working_days5" value="毎日オールフリー">
毎日オールフリー</label>
00.phpから01.phpへPOSTでデータを渡します。
<?
$working_days1 = htmlspecialchars($_POST["working_days1"]);
$working_days2 = htmlspecialchars($_POST["working_days2"]);
$working_days3 = htmlspecialchars($_POST["working_days3"]);
$working_days4 = htmlspecialchars($_POST["working_days4"]);
$working_days5 = htmlspecialchars($_POST["working_days5"]);
各変数の中を確認してチェックするかどうかへ決め、変数に格納します。
if($working_days1 == "ド短期1日~OK" ){$d01 = "checked";}
if($working_days2 == "週2、3日程度"){$d02 = "checked";}
if($working_days3 == "月~金曜日"){$d03 = "checked";}
if($working_days4 == "土日祝日のみ" ){$d04 = "checked";}
if($working_days5 == "毎日オールフリー"){$d05 = "checked";}
?>
変数に格納されたチェックを実行してチェック済みとします。
<label>
<input type="checkbox" name="working_days1" value="ド短期1日~OK" <?php echo $d01 ?>>
ド短期1日~OK</label>
<label>
<input type="checkbox" name="working_days2" value="週2、3日程度" <?php echo $d02 ?>>
週2、3日程度</label>
<label>
<input type="checkbox" name="working_days3" value="月~金曜日" <?php echo $d03 ?>>
月~金曜日</label>
<label>
<input type="checkbox" name="working_days4" value="土日祝日のみ" <?php echo $d04 ?>>
土日祝日のみ</label>
<label>
<input type="checkbox" name="working_days5" value="毎日オールフリー" <?php echo $d05 ?>>
毎日オールフリー</label>
こんな感じでチェックされた項目の確認をした後で、内容をMYSQLのデータベースに登録をしたいのですが、
データベースへの登録も含めて、一連の流れの中で、配列を利用して、もっと簡単なよい方法が
ないか御指導いただけませんでしょうか?
データベースへの登録も配列に格納しないとworking_dayというテーブルしか用意をしていないので
その中にどのように格納して、また取り出しをすればよいかわかりません。
どうぞ超初心者レベルでのご指導をお手間ですが、よろしくお願い致します。
No.2ベストアンサー
- 回答日時:
>さてMySQLでの記述ですが、これはまだ試していないのですが、
>if(isset($_POST["working_days"][0]){
>foreach($_POST["working_days"] as $chkflg){
>$sql="insert into job(job_id, title, working_days)values
>('" . $_POST["job_id"] . "','" . $_POST["title"] . "','" . $_POST["working_days"] . "')";
>というように記述するのでOKなのでしょうか?
OKかどうかは分かりませんが、この場合の$chkflgはチェックボックスの中のチェックされたvalue値です。例えば0なら"ド短期1日~OK"に対応しますね。
データベースへの記録は文字列ではなく、整数のままで良いと言うならこのままでよいと思います(定型文字列であれば、対応数字をつくっておいてそのまま数字で記録の方が良い)。
なお、データベースへ登録する時そのまま$_POST値をSQL文に投入するとSQLインジェクションという脆弱性につながりますので、整形したりチェックする必要があります。
http://ja.wikipedia.org/wiki/SQL%E3%82%A4%E3%83% …
面倒でも、例えばMySQLならば
$title = mysql_real_escape_string($_POST["title"]);
のように整形する必要がありますね。ですから、例文であれば、
$sql="insert into job(job_id, title, working_days)values
('" . mysql_real_escape_string($_POST["job_id"] ). "','" . mysql_real_escape_string($_POST["title"]) . "','" . $chkflg. "')";
となります。
なお、別にチェックボクスの数字(value値)と文字列(ド短期1日~OKのような文字列)のテーブルを作っておけば、
例
create table checkbox_tb (
checkobx_id int(4),
checkbox_name varchar(32),
PRIMARY KEY (checkbox_id)
);
SQL取得時に表示名も一緒に取得する事が出来るので便利です。
SELECT job.*,checkbox_tb.checkbox_name FROM job,checkbox_tb WHERE checkbox_tb.checkbox_id = job.working_days AND 条件
参考まで。
本当に詳しくご指導をして下さって、ありがとうございます。
よく内容を理解することができました。
特に文字でデータベースに登録する必要はないので、
そのままいこうと思いました。
でも文字の場合ならどうかとか分かりやすく教えて頂き
よく分かりました。他でも悩んでいたことが一気に解決できました。
ありがとうございます。
No.1
- 回答日時:
別に質問者さんのように日本語の値を入れても構わないのですが、チェックボックスのvalueなんかは通常は数字等にしておく方が便利です。
また、チェックボックスは配列のまま送信する事が出来ます。配列の中でチェックされた値だけ送信されます。00.php
$labels = array("ド短期1日~OK", "週2、3日程度", "月~金曜日","土日祝日のみ", "毎日オールフリー"); //ラベルの配列
これをforeachでループしましょう。
$i=0;
foreach($labels as $label){
echo "<label>\n<input type=\"checkbox\" name=\"working_days[]\" value=\"{$i}\"/>{$label}</label>";
$i++;
}
これにチェックを入れて送信すると、例えばvalue=0,3,4にチェックを入れて送信すると、POSTの値は次のようになります。
Array ( [working_days] => Array ( [0] => 0 [1] => 3 [2] => 4 ) )
確認画面ではこれがあるかないかでチェックする必要がありますから、先ほどのループに$checkedと言う変数を加えて
$i=0;
foreach($labels as $label){
$checked = (ereg("[0-9]+",array_search($i,$_POST["working_days"])))? " checked":"";
echo "<label>\n<input type=\"checkbox\" name=\"working_days[]\" value=\"{$i}\" {$checked} />{$label}</label>";
$i++;
}
というようにすればOKデス。
MySQLにはチェックされた値だけ格納、即ち、
if(isset($_POST["working_days"][0]){
foreach($_POST["working_days"] as $chkflg){
$sql = "INSERT INTO .....";
}
}
なんてすればOKデス。
参考まで。
ありがとうございます。00.php並びに01.phpは本当にうまく表示ができました。感謝致します。長い文もすっきりしましたし、他でも使えるのでとてもうれしいです。
さてMySQLでの記述ですが、これはまだ試していないのですが、
if(isset($_POST["working_days"][0]){
foreach($_POST["working_days"] as $chkflg){
$sql="insert into job(job_id, title, working_days)values
('" . $_POST["job_id"] . "','" . $_POST["title"] . "','" . $_POST["working_days"] . "')";
というように記述するのでOKなのでしょうか?
度々申し訳ありません。御指導をお願い致します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
- PHP 入力した部分を表示させたまま(保持)するにはどうすれば良いでしょうか? 1 2023/01/25 11:14
- PHP PHP MySql 画像を取得 1 2022/06/04 14:05
- HTML・CSS CSSが効かずどのように指定すれば良いか分からないのでアドバイスお願い致します 2 2023/06/07 12:25
- JavaScript clear機能を失わずにファイルアップロード機能を作成したい 3 2023/06/10 16:12
- JavaScript javascriptで移動ボタンを押した際に遷移するボタンを追記したい 1 2022/11/29 03:02
- JavaScript Javascriptが機能せず原因が分からないので教えて頂きたいです 3 2023/06/04 14:50
- PHP PHPで画像の渡しが上手く行きません。 1 2023/02/02 09:39
- HTML・CSS ただいま勉強始めたての初心者です。フォームを縦並べにしたいです。 2 2022/11/20 17:18
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
PHPとHTML+Xamppの掲示板で画像...
-
PHPで画像の渡しが上手く行きま...
-
複数行のデータ一括更新に関して
-
POSTデータのNAME属性をVALUEに...
-
IEで、フォームにたとえば
-
チェックボックスを用い、MySQL...
-
フォームの途中で追加するには
-
検索時の選択内容を保持する方法
-
PHPでユーザー情報を入力して簡...
-
PHPでCookieを使った訪問回数に...
-
現在ラジオボタンのデータベー...
-
チェックボックスによる検索
-
【PHPチェック】ラジオボタンが...
-
フォームでのリセットを使う方法
-
phpやmysqlで作る簡易掲示板作...
-
配列をhiddenで
-
DBの値をチェックボックスに反...
-
チェックボックスから複数のval...
-
PHP+MySQLで複数のラジオボタン...
-
HTMLで前の画面に戻る時、入力...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
<input type="hidden" >で配列...
-
HTMLで前の画面に戻る時、入力...
-
PHPでユーザー情報を入力して簡...
-
PHP ボタンが押されたら処理を...
-
PHPとHTML+Xamppの掲示板で画像...
-
syntax error, unexpected '}' ...
-
検索時の選択内容を保持する方法
-
PHPでCookieを使った訪問回数に...
-
チェックボックスによる検索
-
フォームでのリセットを使う方法
-
PHPで画像の渡しが上手く行きま...
-
チェックボックスによる検索(...
-
フォームへの前回入力値をクリ...
-
フォームボタンを押すたびに数...
-
php mysql でチェックボックス...
-
PHPの関数実行
-
phpで分からないエラーが出てし...
-
PHPで、ボタンを押すと同じペー...
-
ラジオボタンをsessionで使いたい
-
入力フォーム→確認画面→送信画...
おすすめ情報