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

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

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

INSERTとは、行を追加する、コンピュータのデータベース言語SQLにおけるデータ操作言語(DML)ステートメントの1つである

PHP

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

checkbox

checkboxは、GUIのエレメントです。また、HTML<input>タグのtype属性で扱われる値を指します。

Q&A

解決済

1回答

1199閲覧

DBのカラムにcheckboxの値をすべて表示させたい

退会済みユーザー

退会済みユーザー

総合スコア0

INSERT

INSERTとは、行を追加する、コンピュータのデータベース言語SQLにおけるデータ操作言語(DML)ステートメントの1つである

PHP

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

checkbox

checkboxは、GUIのエレメントです。また、HTML<input>タグのtype属性で扱われる値を指します。

0グッド

0クリップ

投稿2019/06/02 04:49

編集2019/06/03 03:36

前提・実現したいこと

タイトルの通り、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となって表示されてしまうのではないかと感じています。
しかし、インサートする際にどのように記載すればカラムに全て反映されるかが分かりません。

初歩的な問題化と思われますが、お力添えいただけると幸いです。

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

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

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

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

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

m.ts10806

2019/06/02 05:21

コードはマークダウンのcode機能を利用してご提示ください
退会済みユーザー

退会済みユーザー

2019/06/03 03:06

ご指摘いただき、ありがとうございます。 code機能を利用して書き直しました。
guest

回答1

0

ベストアンサー

カラム定義次第ですが、下記のどちらかでしょうか。
0. implodeでセパレータつけて結合する
→取得する際に同じセパレータでexplodeする
0. json_encodeする
→取得する際にjson_decodeする

また、
カラム自体を配列型にするとか
別途serviceだけを保存するテーブルを別途持っておいて親id(customerテーブルのid)を一緒に保管、選択肢ひとつに対して1レコード作るやり方もありますが、そこはやりやすいように。

投稿2019/06/02 05:37

編集2019/06/02 06:44
m.ts10806

総合スコア80850

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

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

退会済みユーザー

退会済みユーザー

2019/06/03 04:00

ご回答いただき、ありがとうございます。 phpの記述ではなく、テーブルの方の設定に問題があるのですね。 implodeなど、分からない単語があり調べたところ、 MySQLのプログラムをいじる方ではなく、phpMyAdminの簡易的なもので制作していることを伝えそびれていたことに気づきました。 ウェブで調べましたが、phpMyAdminでカラム自体を配列型にする方法がどこにも記載がありませんでした。 phpMyAdminの場合は、お教え頂いた方法とは別のやり方になりますか?
m.ts10806

2019/06/03 04:04

いえ、1,2で対応するのでしたら配列型にする必要はありません。 DB側にはじゅうぶんなサイズを持たせておけば大丈夫です。
退会済みユーザー

退会済みユーザー

2019/06/03 04:40

早々のご返信、ありがとうございます。 implodeを試したところ、コンマで区切られてDBに反映されました。 1週間以上ひとりで格闘していたので、本当に助かりました。 ありがとうございました!!
m.ts10806

2019/06/03 04:43

解決されたようで何よりです。 回答で提示したように幾つかやり方があるので、そこは要件にあわせて柔軟に対応してください。 いずれもできるようになっておくといざというときに使える引き出しが多くなります。
退会済みユーザー

退会済みユーザー

2019/06/11 08:32

再びすみません。 以前、submit.phpに if (isset($_POST["service"])) { $service = implode(',', $service); } と記述し、$serviceに値が入っていた場合はカラムにコンマで区切られて表示されるようになったのですが、 その後メール送信などの記述をしていたら、以前は正常にカラムに入っていたはずの値が再びArrayとしか表示されなくなってしまいました。 上記のif~におかしな点はありますでしょうか。 また、if(isset($_POST["service"])){}を外して $service = implode(',', $service); のみですと、チェックボックスが空の場合に Warning: implode(): Invalid arguments passed とエラーが出てしまいます。
退会済みユーザー

退会済みユーザー

2019/06/11 09:29

if (isset($service)) { $service = implode(',', $service); } とすることで解決しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問