前提・実現したいこと
タイトルの通り、phpMyAdminのダッシュボードにフォームのデータ(checkboxの値)を反映させたいのです。
一つのカラムに、checkboxのチェックされた値全てが入るようにしたいと考えています。
発生している問題・エラーメッセージ
checkboxの値が入るはずのカラムには「Array」だけが表示され、値が上手く反映されません。
該当のソースコード
php
1【index.php】 2<!doctype html> 3<html> 4<head> 5<meta charset="utf-8"> 6<title>問い合わせフォーム|入力画面</title> 7</head> 8 9<body> 10<div class="form"> 11 <h2>問い合わせフォーム</h2> 12 <form method="post" action="confirm.php"> 13 <dl> 14 <dt>お名前</dt> 15 <dd><input type="text" name="name" size="35" required></dd> 16 <dt>メールアドレス</dt> 17 <dd><input type="email" name="email" size="35" required></dd> 18 <dt>必要なサービスはありますか?</dt> 19 <dd> 20 <input type="checkbox" name="service[]" value="A" id="A"><label for="A">サービスA</label><br> 21 <input type="checkbox" name="service[]" value="B" id="B"><label for=""B>サービスB</label><br> 22 <input type="checkbox" name="service[]" value="C" id="C"><label for="C">サービスC</label><br> 23 <input type="checkbox" name="service[]" value="D" id="D"><label for="D">サービスD</label> 24 </dd> 25 </dl> 26 <p><input type="submit" value="確認画面" class="submit"></input></p> 27 </form> 28</div><!--/.form--> 29</body> 30</html>
php
1【confirm.php】 2<?php 3if( !(isset($_POST['name'])) || !(isset($_POST['email'])) ){ 4 header('Location:input.php'); 5 exit; 6} 7 8$name = htmlspecialchars($_POST['name'],ENT_QUOTES); 9$email = htmlspecialchars($_POST['email'],ENT_QUOTES); 10$service = $_POST ['service']; 11 12session_start(); 13 14$_SESSION['name'] = $name; 15$_SESSION['email'] = $email; 16$_SESSION['service'] = $service; 17 18?> 19 20<!doctype html> 21<html> 22<head> 23<meta charset="utf-8"> 24<title>問い合わせフォーム|確認画面</title> 25</head> 26 27<body> 28 <div class="form"> 29 <h2>問い合わせフォーム</h2> 30 <form method="post" action="submit.php"> 31 <dl> 32 <dt>お名前</dt> 33 <dd> 34 <?php 35 echo $name; 36 ?> 37 </dd> 38 <dt>メールアドレス</dt> 39 <dd> 40 <?php 41 echo $email; 42 ?> 43 </dd> 44 <dt>必要なサービスはありますか?</dt> 45 <dd> 46 <?php 47 if (isset($_POST["service"])) { 48 foreach($_POST['service'] as $value){ 49 echo $value.' '; 50 } 51 }else { 52 echo 'なし'; 53 } 54 ?> 55 </dd> 56 </dl> 57 <p><input type="button" value="入力画面に戻る" onclick="history.back();"> 58 <input type="submit" value="送信"></p> 59 </form> 60</div><!--/.form--> 61</body> 62</html>
php
1【submit.php】 2<?php 3 4session_start(); 5 6$name = $_SESSION['name']; 7$email = $_SESSION['email']; 8$service = $_SESSION['service']; 9 10?> 11 12<!doctype html> 13<html> 14<head> 15<meta charset="utf-8"> 16<title>問い合わせフォーム|完了画面</title> 17</head> 18 19<body id="submit"> 20 <div class="form"> 21 <h2>問い合わせフォーム</h2> 22 <h3>送信完了</h3> 23 <p>お問い合わせありがとうございました。</p> 24 </div><!--/.form--> 25 26 <?php 27 28 $user = 'root'; 29 $pass = ''; 30 31 $dsn = 'mysql:host=localhost;dbname=my-db;charset=utf8'; 32 $conn = new PDO($dsn, $user, $pass); 33 34 $sql = 'INSERT INTO customer (name, email, service) VALUES("'.$name.'","'.$email.'","'.$service.'")'; 35 VALUES("'.$name.'","'.$email.'","'.$service.'")'; 36 $stmt = $conn -> prepare($sql); 37 $stmt -> execute(); 38 39session_destroy(); 40?> 41</body> 42</html> 43
試したこと
ここにも似たような質問があったため確認しましたが、解決できませんでした。
confirm.phpでは「foreach($_POST['service'] as $value」と記し、ここまでは選択したサービスがきちんと表示されます。
submit.phpでは、「$service」としか記載がないため、Arrayとなって表示されてしまうのではないかと感じています。
しかし、インサートする際にどのように記載すればカラムに全て反映されるかが分かりません。
初歩的な問題化と思われますが、お力添えいただけると幸いです。
回答1件
あなたの回答
tips
プレビュー