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

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

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

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

checkbox

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

Q&A

3回答

1487閲覧

php チェックボックスで複数の複数の値の受け渡しをしたい

webbeing

総合スコア0

PHP

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

checkbox

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

0グッド

0クリップ

投稿2020/12/10 12:31

こんばんは。
input type=“checkbox”で複数の値の受け渡しがしたいのですが、
「入力画面」で複数選択をしても「確認ページ」で最後に選択したもののみ受け渡しされてしまします。
色々調べてみて試行錯誤した結果今度は、
htmlspecialchars() expects parameter 1 to be string, array given in
とエラーが出てきて困っています。
皆様のお力添えをいただければと思います。
どうぞよろしくお願いします。

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

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

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

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

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

guest

回答3

0

htmlspecialchars()の引数に配列を入れてしまっているのが原因のようです。
foreachなどでループさせて個々の値をhtmlspecialchars()で変換すればいいのではと思います。

投稿2020/12/10 13:03

cerfweb

総合スコア1907

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

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

webbeing

2020/12/10 13:22

cerfwebさん ご回答ありがとうございます。 早速トライしてみたのですがうまくいきません、、 当方、php初心者で変換の仕方をもう少し詳しく教えていただけますでしょうか?
cerfweb

2020/12/10 13:24

実際に書かれているコードが提示されていないので、具体的なコメントのしようがありません。
webbeing

2020/12/11 08:43

carfwebさんのご指摘の点を自分なりにトライしてみましたが、うまくいきません。。 コードを見て何かご教授いただければ幸いです。 <?php //var_dump($_POST); //変数の初期化 $page_flag = 0; $clean =array(); $error =array(); //サニタイズ if( !empty($_POST) ) { foreach( $_POST as $key => $value ) { $clean[$key] = htmlspecialchars( $value, ENT_QUOTES); } } if( !empty($clean['btn_confirm']) ) { $error=validation($clean); if ( empty($error)) { $page_flag = 1; // セッションの書き込み session_start(); $_SESSION['page'] = true; } } elseif( !empty($clean['btn_submit']) ) { session_start(); if( !empty($_SESSION['page']) && $_SESSION['page'] === true ) { // セッションの削除 unset($_SESSION['page']); $page_flag = 2; // 変数とタイムゾーンを初期化 $header = null; $auto_reply_subject = null; $auto_reply_text = null; $admin_reply_subject = null; $admin_reply_text = null; date_default_timezone_set('Asia/Tokyo'); $header = "MIME-Version: 1.0\n"; $header .= "From:<zero216111@yahoo.co.jp>\n"; $header .= "Reply-To: \n"; // 運営側へ送るメールの件名 $admin_reply_subject = "お問い合わせを受け付けました"; // 本文を設定 $admin_reply_text = "下記の内容でお問い合わせがありました。\n\n"; $admin_reply_text .= "お問い合わせ日時:" . date("Y-m-d H:i") . "\n"; if( $_POST['nayami'] ==="01") { $admin_reply_text .= "ご相談内容:1\n"; }else if ($_POST['nayami']==="02") { $admin_reply_text .= "ご相談内容:2\n"; }else if ($_POST['nayami']==="03") { $admin_reply_text .= "ご相談内容:3\n"; }else if ($_POST['nayami']==="04") { $admin_reply_text .= "ご相談内容:4\n"; }else if ($_POST['nayami']==="05") { $admin_reply_text .= "ご相談内容:5\n"; }else if ($_POST['nayami']==="06") { $admin_reply_text .= "ご相談内容:6\n"; }else if ($_POST['nayami']==="07") { $admin_reply_text .= "ご相談内容:7\n"; }else if ($_POST['nayami']==="08") { $admin_reply_text .= "ご相談内容:8\n"; } // 管理者へメール送信 mb_send_mail( 'zero216111@yahoo.co.jp', $admin_reply_subject, $admin_reply_text); // 件名を設定 $auto_reply_subject = 'お問い合わせありがとうございます。'; // 本文を設定 $auto_reply_text = "この度は、お問い合わせ頂き誠にありがとうございます。 下記の内容でお問い合わせを受け付けました。\n\n"; $auto_reply_text .= "お問い合わせ日時:" . date("Y-m-d H:i") . "\n"; if( $_POST['nayami'] ==="01") { $auto_reply_text .= "ご相談内容:1\n"; }else if ($_POST['nayami']==="02") { $auto_reply_text .= "ご相談内容:2\n"; }else if ($_POST['nayami']==="03") { $auto_reply_text .= "ご相談内容:3\n"; }else if ($_POST['nayami']==="04") { $auto_reply_text .= "ご相談内容:4\n"; }else if ($_POST['nayami']==="05") { $auto_reply_text .= "ご相談内容:5\n"; }else if ($_POST['nayami']==="06") { $auto_reply_text .= "ご相談内容:6\n"; }else if ($_POST['nayami']==="07") { $auto_reply_text .= "ご相談内容:7\n"; }else if ($_POST['nayami']==="08") { $auto_reply_text .= "ご相談内容:8\n"; } // 自動返信メール送信 mb_send_mail( $clean['email'], $auto_reply_subject, $auto_reply_text, $header); } } else { $page_flag = 0; } function validation($data) { $error=array(); //バリデーション if( empty($data['nayami'])) { $error[] = "・「ご相談内容」は必ず選択してください。"; } return $error; }?> <!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0"> <title></title> <meta name="description" content=""> <meta name="keywords" content=""> <!--style css--> <link rel="stylesheet" type="text/css" href="style/style.css"> <link rel="stylesheet" type="text/css" href="style/min_style.css"> </head> <body> <div class="oto_wrap"> <?php if( $page_flag === 1): ?> <form method="post" action=""> <div class="confirm_wrap"> <label>ご相談内容</label> <?php foreach( $_POST[nayami] as $value ){ echo "{$value}, "; } echo '</p>'; ?> </div> <div class="bt_wrapper"><input type="submit" name="btn_back" value="戻る"> <input type="submit" name="btn_submit" value="送信"></div> <input type="hidden" name="nayami" value="<?php echo $_POST['nayami']; ?>"> </form> <?php elseif( $page_flag === 2 ): ?> <p class="send_mail">送信が完了しました。</p> <?php else: ?> <?php if( !empty($error) ): ?> <ul class="error_list"> <?php foreach( $error as $value ): ?> <li><?php echo $value; ?></li> <?php endforeach; ?> </ul> <?php endif; ?> <form method="post" action=""> <div class="form_wrap"> <label class="title">ご相談内容<span>必須</span>(複数選択可)</label> <input type="checkbox" name="nayami[]" value="01">1 <input type="checkbox" name="nayami[]" value="02">2 <input type="checkbox" name="nayami[]" value="03">3 <input type="checkbox" name="nayami[]" value="04">4 <input type="checkbox" name="nayami[]" value="05">5 <input type="checkbox" name="nayami[]" value="06">6 <input type="checkbox" name="nayami[]" value="07">7 <input type="checkbox" name="nayami[]" value="08">8 </div> <div class="bt_wrapper"><input type="submit" name="btn_confirm" value="入力内容を確認する"></div> </div><!--oto_wrap--> </form> <?php endif; ?> </body> </html>
cerfweb

2020/12/11 09:05

$_POST['nayami']というのは配列で入ってきますので、 foreach( $_POST as $key => $value ) { $clean[$key] = htmlspecialchars( $value, ENT_QUOTES); } } の部分で$valueが配列になってしまいます。 foreach ($_POST['nayami'] as ... としてサニタイズしてください。
webbeing

2020/12/11 12:19

エラー消えました!ありがとうございます!! よろしければもう少し質問させて下さい。 エラーは消えたのですが、確認ページに進まないのはどこか原因があるのでしょうか? ご指摘頂いた点は、 foreach ($_POST['nayami'] as $key => $value ) { $clean[$key] = htmlspecialchars( $value, ENT_QUOTES); } } このようにやってみました! var_dumpを使ってこのように出てきたのであと少しなような気はするのですが、、、 array(8) { [0]=> string(2) "01" [1]=> string(2) "02" [2]=> string(2) "03" [3]=> string(2) "04" [4]=> string(2) "05" [5]=> string(2) "06" [6]=> string(2) "07" [7]=> string(2) "08" } どうぞよろしくお願いします。
guest

0

おなじnameを付けたいという話でしょうか?

PHP

1<?PHP 2$ch=filter_input(INPUT_GET,"ch",FILTER_VALIDATE_INT,FILTER_REQUIRE_ARRAY); 3var_dump($ch); 4?> 5<form> 6<label><input input type="checkbox" name="ch[]" value="1">1</label> 7<label><input input type="checkbox" name="ch[]" value="2">2</label> 8<label><input input type="checkbox" name="ch[]" value="3">3</label><br> 9<input type="submit" value="send"> 10</form>

投稿2020/12/11 01:53

yambejp

総合スコア115010

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

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

0

投稿2020/12/10 12:42

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

webbeing

2020/12/10 12:45

rtyed さん 回答ありがとうございます。 こちらも試してみていたのですが、ダメでした、、 元々記述していたコードの何かがいけないのでしょうか、、
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問