- 締切済み
配列をデータベースに登録する方法を教えて下さい
いつもありがとうございます。 前回質問させて頂いて、いいところまで行ったと思ったのですが、 どうもその後暗礁に乗り上げて困っております。 どうか御指導をお願いします。 01.php内に下記の記述をして、チェックボックスで複数選択したデータを02.phpにPOSTで渡して それをそのままMysqlに登録したいのですが、どうもうまくいきません。 $labels = array("ド短期1日~OK", "週2、3日程度", "月~金曜日","土日祝日のみ", "毎日オールフリー"); if(is_array($_POST["working_days"] )){ $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++; } } 理想としては、Mysqlのテーブル「working_days」には、「0,3,5」というように登録され それを登録されたかどうか確認する画面には、 「"ド短期1日~OK", "月~金曜日", "毎日オールフリー"」 というように表示をさせたいのですが、 まずは、 データベースに登録する際に $working_days = ($_POST["working_days"]); $sql = "insert into job (job_id, working_days, job_persons)values ('" . $job_id . "','" . $working_days . "','" . $_POST["job_persons"] . "')"; とするとworking_daysのところに「Array」と表示されて「0,3,5」と表示されない。 それとその数字を元に内容を表示させたいのですが、それはそこまでまだ行きません。 どうかご指導をお願いします。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- mahimahi02
- ベストアンサー率100% (6/6)
こんにちは! ちょっと質問ですが、HTMLからPOSTで取って来たチェックボックスの値が「$working_days」に入っているのでしょうか? Mysqlに登録したい値は「0,3,5」で、表示させる際は「$labels」を参照して表示させる? そうであれば、チェックボックスのHTMLのソースを少し見てみたいのですが・・
- みずの(@mizuno3)
- ベストアンサー率73% (192/263)
正規化とかについてはちょっと問題がありますね。 やり方は色々あると思いますが。 データがめちゃくちゃ多い 検索しない とかであれば今のテーブルでもいい場合があるかも知れません。 本題ですが、 0,3,5と入れたいのであれば $working_days = join(",", $_POST["working_days"]) としてあげる必要があります。 また、サニタイジングをしてあげる必要があるので、前もって全て正しい数値かみた方が良いと思います。 最悪 $working_days = join(",", $_POST["working_days"]) $working_days = mysql_real_escape_string($working_days); なんてしてやるといいんじゃないでしょうか。
お礼
御指導ありがとうございます。 とりあえずは「0,1,3」というようにうまく表示することができました。 MYSQLに登録もうまくできました。 今度は、これをSQLから取り出して表示させる方法にチャレンジします。 ありがとうございました。
- yambejp
- ベストアンサー率51% (3827/7415)
>Mysqlのテーブル「working_days」には、「0,3,5」というように登録され これはよくあるダメなテーブルの例です。 「正規化」をキーワードにSQLの基本を学習した方がよいでしょう。 どうしてもこれでやると決めているならとめませんが あとで死ぬほど苦労することになるでしょう。 ちなみに$working_daysは配列なので、文字列と同等に処理をすることは できません。 通常はforeachでまわして処理します。これも基本なので、お手元の参考書を 読み返してみてください。
お礼
御指導ありがとうございます。 そうなんですか。。。正規化???ですか。 やっと今日一日かけて、035と登録することができるようになって それをどのようにSQLからphpに読み込めばよいのかを 考えないとって思っていたところだったので、 かなりダメなテーブルの例とはショックです。 でも長く使えるものを作りたいし、正しい知識を身につけたいので 勉強しますが、ちなみにやっとデータベースに入った値は カンマなしで、「035」でした。これもダメなテーブル例で 何も変わらないのでしょうか? ちなみにいろいろ調べて参考にしたコードです。 $arr_check1=$_POST["working_days"]; if(isset($arr_check1) and count($arr_check1)>0){ $str_check1 = ""; for($i=0;$i<count($arr_check1);$i++){ if($i == 0){ $str_check1 .= $arr_check1[$i]; } else{ $str_check1 .= " " . $arr_check1[$i]; } } } $sql = "insert into job(job_id, working_days)values ('" . $job_id . "','" . $str_check1 . "')"; ご多用のところすみません。どうぞよろしくお願い致します。
補足
ありがとうございます。 まず00.phpではチェックボックスでチェックした値をPOSTで01.phpに渡します。 以下 00.php ---------------------------------------------------------------------- <tr> <td height="21" bgcolor="#D2FFFF"><font size="-1"> <p> <? $labels = array("ド短期1日~OK", "週2、3日程度", "月~金曜日","土日祝日のみ", "毎日オールフリー"); //ラベルの配列 $i=0; foreach($labels as $label){ echo "<label>\n<input type=\"checkbox\" name=\"working_days[]\" value=\"{$i}\"/>{$label}</label>"; $i++; } ?> </td></tr> ----------------------------------------------------------------------- 01.phpで受けた値が正しいかどうかを確認したあと、02.phpにまたPOSTで渡します。 以下 01.php ----------------------------------------------------------------------- <tr> <td width="150" height="21" bgcolor="#97FFFF"><font color="#333333" size="-1" face="MS ゴシック, Osaka-等幅">* 希望シフト</font></td> <td width="600" height="21" bgcolor="#D2FFFF"><font color="#333333" size="-1" face="MS ゴシック, Osaka-等幅"> <? //希望シフトは必須項目 $labels = array("ド短期1日~OK", "週2、3日程度", "月~金曜日","土日祝日のみ", "毎日オールフリー"); if(is_array($_POST["working_days"] )){ $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++; } }else{ echo $error['working_days'] = '<font color = \"red\">希望シフトの選択は必須です。</font><br>'; $i=0; foreach($labels as $label){ echo "<label>\n<input type=\"checkbox\" name=\"working_days[]\" value=\"{$i}\"/>{$label}</label>"; $i++; } } ?> </font></td> </tr> ---------------------------------------------------------------------------- 02.phpで受けた値をデータベースに登録します。 このときに複数のチェックボックスの値をうまく取り入れる方法がわかりません。 また登録した値をもう一度、読み込んでHTMLに表示したのですが、そこはまったく方法がわかりません。 以下02.php ---------------------------------------------------------------------------- $arr_check1=$_POST["working_days"]; if(isset($arr_check1) and count($arr_check1)>0){ $str_check1 = ""; for($i=0;$i<count($arr_check1);$i++){ if($i == 0){ $str_check1 .= $arr_check1[$i]; } else{ $str_check1 .= " " . $arr_check1[$i]; } } } $sql = "insert into job(job_id, working_days)values ('" . $job_id . "','" . $str_check1 . "')"; $res=mysql_query($sql); ----------------------------------------------------------------------------- 以上です。よろしくお願いします。