みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

チェックボックスで複数選択した値をSQLへ

次のような入力フォームから、SQLのテーブルに登録します。
<?php
function connect() {
return new PDO("mysql:dbname=★★★;host=★★★","★★★","★★★",
array(
PDO::MYSQL_ATTR_INIT_COMMAND => "SET CHARACTER SET `utf8`"));
}
$pdo = connect();
if (@$_POST['submit']) {
$hoge = $_POST['hoge'];
if (!$error) {
$pdo->query("INSERT INTO ★(hoge) VALUES('$hoge')");
header('Location: example.php');
exit();
}
}
?>

<form action="insert.php" method="post">
<input type="checkbox" name="hoge[]" value="りんご"/>りんご<br>
<input type="checkbox" name="hoge[]" value="みかん" />みかん<br>
<input type="checkbox" name="hoge[]" value="いちご" />いちご
<input class="submit" type="submit" name="submit" value="登録">
</form>

これで、例えば「りんご」と「みかん」をチェックして登録ボタンを押すと
受け取りのexample.phpにはArrayと表示され、SQLに反映されません。
よい方法があったら教えてください。

投稿日時 - 2016-06-25 15:44:42

QNo.9192618

困ってます

質問者が選んだベストアンサー

チェックやらエスケープは省きます。ここには記載しません。
このままだと多分動かないでしょうが、大まかなことだけカキます。

$hogeが配列でその中身は
$hoge[0] → りんご
$hoge[1] → みかん
とかでしょうから

foreach($hoge as $t_dat){
$pdo->query("INSERT INTO ★(hoge) VALUES('$t_dat')");
}

投稿日時 - 2016-06-25 16:12:25

補足

ご回答ありがとうございました。

こちらの理解不足で、なかなかうまくいきません。

テーブル名を「test」として、実際に使っているコードをお知らせします。


■入力フォーム(insert.php)
<?php
function connect() {
return new PDO("mysql:dbname=★;host=★","★","★",
array(
PDO::MYSQL_ATTR_INIT_COMMAND => "SET CHARACTER SET `utf8`"));
}
$pdo = connect();
if (@$_POST['submit']) {
$hoge = $_POST['hoge'];
if (!$error) {
$pdo->query("INSERT INTO test(hoge) VALUES('$hoge')");
header('Location: index.php');
exit();
}
}
?>

<form action="insert.php" method="post">
<input type="checkbox" name="hoge[]" value="りんご"/>りんご<br>
<input type="checkbox" name="hoge[]" value="みかん" />みかん<br>
<input type="checkbox" name="hoge[]" value="いちご" />いちご
<input class="submit" type="submit" name="submit" value="登録">
</form>


■受け取る側(index.php)
<?php
function connect() {
return new PDO("mysql:dbname=★;host=★","★","★",
array(
PDO::MYSQL_ATTR_INIT_COMMAND => "SET CHARACTER SET `utf8`"));
}
$pdo = connect();
$st = $pdo->query("SELECT * FROM test ");
$test = $st->fetchAll();
?>

<?php foreach ($test as $t_dat) {
$pdo->query("INSERT INTO test(hoge) VALUES('$t_dat')");
} ?>

<p>
<?php echo $t_dat['hoge'] ?>
</p>

で作成しましたが、うまくいきません。


ご指摘の
foreach($hoge as $t_dat){
$pdo->query("INSERT INTO ★(hoge) VALUES('$t_dat')");
}
の部分はどこに置けばよいのでしょうか?

見当はずれのことをしていると思いますが、もしお時間がありましたら教えていただけないでしょうか。
何卒よろしくお願いします。

投稿日時 - 2016-06-25 17:39:54

お礼

お礼が遅れて申し訳ありませんでした。
アドバイスを参考に勉強します!

投稿日時 - 2016-08-16 16:29:57

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問