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

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

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

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

Q&A

解決済

4回答

6710閲覧

チェックボックスの値をforeach内で取得表示するには?

yukina00235

総合スコア62

PHP

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

0グッド

0クリップ

投稿2020/07/16 01:58

PHPでform送信の勉強をしているのですが、foreachを使ってチェックボックスの内容を出力する方法に躓いてしまい、アドバイス頂けないでしょうか?

php

1 <form action="" method="post"> 2 タイトル: 3 <input type="text" name="title"> 4 <br> 5 メッセージ: 6 <textarea name="mess" id="mess"></textarea> 7 <br> 8 性別: 9 <input type="radio" name="sex" value="">10 <input type="radio" name="sex" value="">11 <br> 12 趣味: 13 <input type="checkbox" name="hobby[]" value="読書">読書 14 <input type="checkbox" name="hobby[]" value="釣り">釣り 15 <input type="checkbox" name="hobby[]" value="音楽鑑賞">音楽鑑賞 16 <br> 17 <input type="submit" value="送信"> 18 </form> 19<?php 20 $form = $_POST; 21 foreach ($form as $key => $val) { 22 echo $key . ":" . htmlspecialchars($val, ENT_QUOTES, "utf-8") . "<br>"; 23 } 24?>

foreachを使って一気に表示させたいのですが、チェックボックスが配列のためだと思うのですが、以下のエラーが表示され、チェック項目のみ表示できません。
Warning: htmlspecialchars() expects parameter 1 to be string, array given in

なお、以下の感じでチェックボックスを単独で指定すると表示できました。

php

1 if (isset($_POST["hobby"])) { 2 $hobby = $_POST["hobby"]; 3 $hobby = implode(',', $hobby); 4 echo $hobby; 5 }

foreachでチェックボックスの取得についてアドバイスを宜しくお願いいたします。㎜

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

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

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

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

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

guest

回答4

0

ベストアンサー

エラーの通り配列はhtmlspecialcharsの第一引数には与えられません。
[]をnameにつけて送信すると配列となるのでチェックボックスのnameのときだけその配列から取り出して文字列にする(提示のようにimplodeするとか)分岐を書けば良いと思います。

投稿2020/07/16 02:12

m.ts10806

総合スコア80850

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

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

yukina00235

2020/07/16 06:51

有難うございます、 >>チェックボックスのnameのときだけその配列から取り出して文字列にする(提示のようにimplodeするとか)分岐を書けば なるほどです、配列の時にはimplodeか更にforeach回したら表示できました!!
guest

0

PHP

1$hobby=filter_input(INPUT_POST,"hobby",FILTER_DEFAULT,FILTER_REQUIRE_ARRAY); 2$hobbys=""; 3if(is_array($hobby)){ 4 $hobbys=implode(",",array_map(function($x){ 5 return htmlspecialchars($x); 6 },$hobby)); 7 var_dump($hobbys); 8}

投稿2020/07/16 02:17

yambejp

総合スコア114784

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

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

yukina00235

2020/07/16 06:52

有難うございます。 色々と知らない記述があるので、1つ1つ調べながら試してみたいと思います。㎜
guest

0

へんてこなソースですが、頂きましたアドバイスで表示できました。^^
コメントアウトはimplodeで表示しました。
有難うございます!㎜

php

1 $form = $_POST; 2 foreach ($form as $key => $val) { 3 if ($key === "hobby") { 4 foreach ($val as $hobbys) { 5 echo $hobbys; 6 } 7 // $hobby_sl = implode(",", $_POST["hobby"]); 8 // echo $hobby_sl; 9 } else { 10 echo $key . ":" . htmlspecialchars($val, ENT_QUOTES, "utf-8") . "<br>"; 11 } 12 }

投稿2020/07/16 06:51

yukina00235

総合スコア62

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

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

0

へんてこなソースですが、表示できました。^^
コメントアウトはimplodeで表示しました。
有難うございます!㎜

php

1 $form = $_POST; 2 foreach ($form as $key => $val) { 3 if ($key === "hobby") { 4 foreach ($val as $hobbys) { 5 echo $hobbys; 6 } 7 // $hobby_sl = implode(",", $_POST["hobby"]); 8 // echo $hobby_sl; 9 } else { 10 echo $key . ":" . htmlspecialchars($val, ENT_QUOTES, "utf-8") . "<br>"; 11 } 12 }

投稿2020/07/16 06:49

yukina00235

総合スコア62

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問