前提・実現したいこと
お世話になります。PHPの勉強をしております。いろんな参考書や公式ドキュメントを参照しながら、PHPとMySQLを使用して実務に近い簡易的なものを作成しようとして行き詰っています。
流れとしましては、学習塾を想定し、生徒の「氏名」「フリガナ」「性別」「年齢」「好きな教科」を登録。
「氏名」→テキストボックス
「フリガナ」→テキストボックス
「性別」→ラジオボタン
「年齢」→テキストボックス
「好きな教科」→チェックボックス
とし、MySQLに登録しようとしました。
「好きな教科」については、そのままPOSTでデータを取得してMySQLに登録しようとすると1つの強化しか登録できなかったため、いろいろ調べて「implode」を使用して「,」で区切ることでMySQLに登録することができました。
「登録ページ」は作成できたので、内容変更の為に「編集ページ」を作成したところ、「implode」した「好きな教科」の値をどうやって「編集ページ」のチェックボックスに当てるかに悩んでいます。
色々調べてみましたが解決できません。
発生している問題
htmlにてチェックボックスにチェックされた値を「implode」で区切ってMySQLに登録された値を「編集ページ」にて該当のチェックボックスに割り当てたい
該当のソースコード
【input.html】:入力フォーム
html
1<!DOCTYPE html> 2<html lang="ja"> 3<head> 4 <meta charset="UTF-8"> 5 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 6 <meta http-equiv="X-UA-Compatible" content="ie=edge"> 7 <title>入力</title> 8</head> 9<body> 10 <form method="post" action="s_add_c.php"> 11 お名前: 12 <input type="text" name="user_name"><br /> 13 フリガナ: 14 <input type="text" name="user_name_kana"><br /> 15 性 別: 16 <input type="radio" name="user_gender" id="" value="男">男 17 <input type="radio" name="user_gender" id="" value="女">女<br /> 18 年 齢: 19 <input type="number" name="user_age" id=""><br /> 20 好きな教科: 21 <input type="checkbox" name="user_like_study[]" id="" value="国語">国語 22 <input type="checkbox" name="user_like_study[]" id="" value="数学">数学 23 <input type="checkbox" name="user_like_study[]" id="" value="社会">社会 24 <input type="checkbox" name="user_like_study[]" id="" value="理科">理科 25 <input type="checkbox" name="user_like_study[]" id="" value="英語">英語 26 <input type="checkbox" name="user_like_study[]" id="" value="美術">美術 27 <input type="checkbox" name="user_like_study[]" id="" value="体育">体育 28 <input type="checkbox" name="user_like_study[]" id="" value="保健">保健 29 <input type="checkbox" name="user_like_study[]" id="" value="技術">技術 30 <input type="checkbox" name="user_like_study[]" id="" value="家庭">家庭<br /> 31 <input type="submit" value="送信"> 32 </form> 33</body> 34</html>
該当のソースコード
【s_add_c.php】:入力チェック用
php
1<!DOCTYPE html> 2<html lang="ja"> 3<head> 4 <meta charset="UTF-8"> 5 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 6 <meta http-equiv="X-UA-Compatible" content="ie=edge"> 7 <title>入力チェック</title> 8</head> 9<body> 10 <?php 11 12 $user_name=filter_input(INPUT_POST,'user_name',FILTER_SANITIZE_FULL_SPECIAL_CHARS); 13 $user_name_kana=filter_input(INPUT_POST,'user_name_kana',FILTER_SANITIZE_FULL_SPECIAL_CHARS); 14 $user_gender=filter_input(INPUT_POST,'user_gender',FILTER_SANITIZE_FULL_SPECIAL_CHARS); 15 $user_age=filter_input(INPUT_POST,'user_age',FILTER_SANITIZE_FULL_SPECIAL_CHARS); 16 $user_like_study=$_POST['user_like_study']; 17 $user_like_study=implode(',',$user_like_study); 18 $user_like_study=htmlspecialchars($user_like_study,ENT_QUOTES,'UTF-8'); 19 20 print 'お名前:'; 21 print $user_name; 22 print '<br />'; 23 print 'フリガナ:'; 24 print $user_name_kana; 25 print '<br />'; 26 print '性別:'; 27 print $user_gender; 28 print '<br />'; 29 print '年齢:'; 30 print $user_age; 31 print '<br />'; 32 print '好きな教科:'; 33 print $user_like_study; 34 print '<br />'; 35 36 print '<form method="post" action="s_add_d.php">'; 37 print '<input type="hidden" name="user_name" value="'.$user_name.'">'; 38 print '<input type="hidden" name="user_name_kana" value="'.$user_name_kana.'">'; 39 print '<input type="hidden" name="user_gender" value="'.$user_gender.'">'; 40 print '<input type="hidden" name="user_age" value="'.$user_age.'">'; 41 print '<input type="hidden" name="user_like_study" value="'.$user_like_study2.'">'; 42 print '<input type="button" onclock="history.back()" value="戻る">'; 43 print '<input type="submit" value="OK">'; 44 print '</form>'; 45 ?> 46</body> 47</html>
該当のソースコード
【s_add_d.php】:MySQLへ登録
php
1<!DOCTYPE html> 2<html lang="ja"> 3<head> 4 <meta charset="UTF-8"> 5 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 6 <meta http-equiv="X-UA-Compatible" content="ie=edge"> 7 <title>Document</title> 8</head> 9<body> 10<?php 11 try{ 12 13 $user_name=filter_input(INPUT_POST,'user_name',FILTER_SANITIZE_FULL_SPECIAL_CHARS); 14 $user_name_kana=filter_input(INPUT_POST,'user_name_kana',FILTER_SANITIZE_FULL_SPECIAL_CHARS); 15 $user_gender=filter_input(INPUT_POST,'user_gender',FILTER_SANITIZE_FULL_SPECIAL_CHARS); 16 $user_age=filter_input(INPUT_POST,'user_age',FILTER_SANITIZE_FULL_SPECIAL_CHARS); 17 $user_like_study=$_POST['user_like_study']; 18 19 $dsn='mysql:dbname=test;host=localhost;charset=utf8'; 20 $user='root'; 21 $password=''; 22 $dbh=new PDO($dsn,$user,$password); 23 $dbh->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); 24 $sql='INSERT INTO learning_study (user_name,user_name_kana,user_gender,user_age,user_like_study) VALUE (?,?,?,?,?)'; 25 26 $stmt=$dbh->prepare($sql); 27 $data[]=$user_name; 28 $data[]=$user_name_kana; 29 $data[]=$user_gender; 30 $data[]=$user_age; 31 $data[]=$user_like_study; 32 $stmt->execute($data); 33 34 $dbh=null; 35 36 print $user_name; 37 print 'さんを追加しました<br />'; 38 39 }catch(Exception $e){ 40 print $e; 41 } 42?> 43</body> 44</html>
試したこと
htmlのフォームにて入力、送信した際、複数チェックされたチェックボックスを「implode」にて「,」区切りにてMySQL
登録しましたので、「explode」で「,」で区切り、配列に戻しましたが、それぞれ入力内容が異なるチェックボックスの内容を「編集ページ」内のチェックボックスにどう戻すかに苦慮しております。
php
1explode(',',$user_like_study);
を記述しましたが、それぞれのレコードにより順番が異なるため、どのように割り当てたらいいのでしょうか?
そもそも、新規登録のフォームからMySQLに登録する際に他のいい方法があるのでしょうか?
「新規作成」「編集」「削除」ページがあるという前提でご教授いただければ幸いです。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/08/23 01:40
2019/08/23 02:03
2019/08/23 02:09