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

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

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

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

Q&A

解決済

2回答

1128閲覧

PHPのフォーム送信時のメールの内容でチェックボックスの値がArrayになってしまう

tomato01

総合スコア80

PHP

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

0グッド

0クリップ

投稿2022/10/28 01:22

編集2022/10/28 01:47

PHPのフォーム送信時、管理者に届くメールの内容でチェックボックスの値がArrayになってしまいます。

下記の「tempo」というnameがチェックボックス式になっており下記のようにフォームの設定してます。

<input type="checkbox" name="tempo[]" value="本社" /> <input type="checkbox" name="tempo[]" value="大阪" /> <input type="checkbox" name="tempo[]" value="東京" />

管理者に届くメールの内容がArrayになってしまうので、下記のフォーム送信用のコードにimplodeでtempo[]の中身を一列の文に変えようと思いコードを記載しましたがうまくいきませんでした。

<?php mb_language("Japanese"); mb_internal_encoding("UTF-8"); $data = $_POST['tempo']; $result = implode(',', $data); $message = "■お名前"."\n".$_POST['owner']."\n\n"; $message .= "■物件名"."\n".$_POST['bukken']."\n\n"; $message .= "■店舗名"."\n".$result."\n\n"; // このように記載をしたがうまくいかなかった $to = $_POST['to']; $headers = "From: admin@gmail.com"; $subject = "お問い合わせがありました"; if(mail($to, $subject, $message, $headers)) { echo "メール送信成功!"; echo $tempo1; } else { echo "メール送信失敗。"; } ?>

このような場合はどのように対応をすればいいでしょうか。

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

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

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

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

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

guest

回答2

0

ベストアンサー

キーの参照方法間違ってます。

$data = $_POST['$tempo'];

$tempo → tempo

シングルクォートなので変数展開は出来ませんが、そもそも変数ではなく「tempoというキー」を参照する必要があるのでは。

投稿2022/10/28 01:45

m.ts10806

総合スコア80850

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

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

tomato01

2022/10/28 01:48

ご連絡ありがとうございます。こちらは記載ミスでございます。失礼しました。
tomato01

2022/10/28 01:51

implodeを使用しても、メールの内容がArrayになってしまいます。
m.ts10806

2022/10/28 01:51

ちゃんと値が来てれば問題なさそうには見えますが。。 <?php $data = ["本社","大阪"]; $result = implode(',', $data); echo "■店舗名"."\n".$result."\n\n"; デバッグしてみましょう。 var_dump($_POST['$tempo']); の結果はどうなりますか?
m.ts10806

2022/10/28 01:52

HTMLも全体(せめてform部分だけでも)提示されたほうが良いと思います。 提示内容だけでは問題がないです。
tomato01

2022/10/28 02:16

ご回答ありがとうございます。 var_dump($_POST['$tempo']);の結果で原因が解明しました。 結果としては、var_dumpをしたら中身がarrayになっておりました。 実は、フォーム画面で確認画面を挟んでおり、下記のような記載をしておりました。 <input type="hidden" name="tempo[]" value="<?php echo $_POST["tempo"]; ?>"> 上記の記載を行う前にimplodeの処理をしたら店舗名が取得できました! すみません、私がHTMLを省略して書いてしまったせいで混乱させてしまいました。 ご回答等もありがとうございました。
m.ts10806

2022/10/28 02:18

そうなると確かにそもそもValueにArrayという文字が出てますからね。 PHPはブラウザ表示したときには処理が終わってるので、ブラウザの機能の「ソースを表示」などで想定のHTMLが出ているか確認するのは必須です。
guest

0

以下修正が必要
$data = $_POST['$tempo'];
↓↓↓
$data = $_POST['tempo'];
その他特に問題なさそうですが、配列で受けるpostはfilter_inputを利用されたほうがよいでしょう
エスケープ処理など必要なものは適宜対応ください

PHP

1<?PHP 2$data = filter_input(INPUT_POST,'tempo',FILTER_DEFAULT,FILTER_REQUIRE_ARRAY)??[]; 3$result = implode(',', $data); 4$message = "■店舗名"."\n".$result; 5 6?> 7<form method="post"> 8<label><input type="checkbox" name="tempo[]" value="本社" />本社</label> 9<label><input type="checkbox" name="tempo[]" value="大阪" />大阪</label> 10<label><input type="checkbox" name="tempo[]" value="東京" />東京</label> 11<input type="submit" value="send"> 12</form> 13 14<?=$message?>

投稿2022/10/28 01:50

yambejp

総合スコア114779

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問