DBのカラムにcheckboxの値をすべて表示させたい
- 評価
- クリップ 0
- VIEW 607

退会済みユーザー
前提・実現したいこと
タイトルの通り、phpMyAdminのダッシュボードにフォームのデータ(checkboxの値)を反映させたいのです。
一つのカラムに、checkboxのチェックされた値全てが入るようにしたいと考えています。
発生している問題・エラーメッセージ
checkboxの値が入るはずのカラムには「Array」だけが表示され、値が上手く反映されません。
該当のソースコード
【index.php】
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>問い合わせフォーム|入力画面</title>
</head>
<body>
<div class="form">
<h2>問い合わせフォーム</h2>
<form method="post" action="confirm.php">
<dl>
<dt>お名前</dt>
<dd><input type="text" name="name" size="35" required></dd>
<dt>メールアドレス</dt>
<dd><input type="email" name="email" size="35" required></dd>
<dt>必要なサービスはありますか?</dt>
<dd>
<input type="checkbox" name="service[]" value="A" id="A"><label for="A">サービスA</label><br>
<input type="checkbox" name="service[]" value="B" id="B"><label for=""B>サービスB</label><br>
<input type="checkbox" name="service[]" value="C" id="C"><label for="C">サービスC</label><br>
<input type="checkbox" name="service[]" value="D" id="D"><label for="D">サービスD</label>
</dd>
</dl>
<p><input type="submit" value="確認画面" class="submit"></input></p>
</form>
</div><!--/.form-->
</body>
</html>
【confirm.php】
<?php
if( !(isset($_POST['name'])) || !(isset($_POST['email'])) ){
header('Location:input.php');
exit;
}
$name = htmlspecialchars($_POST['name'],ENT_QUOTES);
$email = htmlspecialchars($_POST['email'],ENT_QUOTES);
$service = $_POST ['service'];
session_start();
$_SESSION['name'] = $name;
$_SESSION['email'] = $email;
$_SESSION['service'] = $service;
?>
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>問い合わせフォーム|確認画面</title>
</head>
<body>
<div class="form">
<h2>問い合わせフォーム</h2>
<form method="post" action="submit.php">
<dl>
<dt>お名前</dt>
<dd>
<?php
echo $name;
?>
</dd>
<dt>メールアドレス</dt>
<dd>
<?php
echo $email;
?>
</dd>
<dt>必要なサービスはありますか?</dt>
<dd>
<?php
if (isset($_POST["service"])) {
foreach($_POST['service'] as $value){
echo $value.' ';
}
}else {
echo 'なし';
}
?>
</dd>
</dl>
<p><input type="button" value="入力画面に戻る" onclick="history.back();">
<input type="submit" value="送信"></p>
</form>
</div><!--/.form-->
</body>
</html>
【submit.php】
<?php
session_start();
$name = $_SESSION['name'];
$email = $_SESSION['email'];
$service = $_SESSION['service'];
?>
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>問い合わせフォーム|完了画面</title>
</head>
<body id="submit">
<div class="form">
<h2>問い合わせフォーム</h2>
<h3>送信完了</h3>
<p>お問い合わせありがとうございました。</p>
</div><!--/.form-->
<?php
$user = 'root';
$pass = '';
$dsn = 'mysql:host=localhost;dbname=my-db;charset=utf8';
$conn = new PDO($dsn, $user, $pass);
$sql = 'INSERT INTO customer (name, email, service) VALUES("'.$name.'","'.$email.'","'.$service.'")';
VALUES("'.$name.'","'.$email.'","'.$service.'")';
$stmt = $conn -> prepare($sql);
$stmt -> execute();
session_destroy();
?>
</body>
</html>
試したこと
ここにも似たような質問があったため確認しましたが、解決できませんでした。
confirm.phpでは「foreach($_POST['service'] as $value」と記し、ここまでは選択したサービスがきちんと表示されます。
submit.phpでは、「$service」としか記載がないため、Arrayとなって表示されてしまうのではないかと感じています。
しかし、インサートする際にどのように記載すればカラムに全て反映されるかが分かりません。
初歩的な問題化と思われますが、お力添えいただけると幸いです。
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
checkベストアンサー
+1
カラム定義次第ですが、下記のどちらかでしょうか。
- implodeでセパレータつけて結合する
→取得する際に同じセパレータでexplodeする - json_encodeする
→取得する際にjson_decodeする
また、
カラム自体を配列型にするとか
別途serviceだけを保存するテーブルを別途持っておいて親id(customerテーブルのid)を一緒に保管、選択肢ひとつに対して1レコード作るやり方もありますが、そこはやりやすいように。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.22%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
質問への追記・修正、ベストアンサー選択の依頼
m.ts10806
2019/06/02 14:21
コードはマークダウンのcode機能を利用してご提示ください
退会済みユーザー
2019/06/03 12:06
ご指摘いただき、ありがとうございます。
code機能を利用して書き直しました。