🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
PHP

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

メール

メールは、コンピュータネットワークを利用し、 情報等を交換する手段のことです。

Q&A

解決済

3回答

1007閲覧

お問い合わせフォームの自動返信メールの文章内にif分を入れて、ブランド名の後に、英語なら半角スペース追加、日本語ならスペースなし、というようにしたいと考えております。

ichigob

総合スコア27

PHP

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

メール

メールは、コンピュータネットワークを利用し、 情報等を交換する手段のことです。

0グッド

0クリップ

投稿2019/10/09 05:13

編集2019/10/09 05:26

<お問い合わせフォームの自動返信メール>

お問い合わせフォームの自動返信メールの文章内にif分を入れて、ブランド名の後に、英語なら半角スペース追加、日本語ならスペースなし、というようにしたいと考えております。

現在の自動返信メール

${hoge_name} が商品名です。

$body = " ブランド名${hoge_name}のご購入ありがとうございます。 "

入れたいプログラムイメージ

${hoge_name}

の部分に下記の記述を入れたいです。

<?php //頭文字が英字の場合ブランド名の後に半角スペース追加 if (ctype_alpha(substr($value["hoge_name"] , 0, 1))) { echo "スペース商品名".htmlspecialchars($value["hoge_name"], ENT_QUOTES, "UTF-8"); }else{ echo "商品名".htmlspecialchars($value["hoge_name"], ENT_QUOTES, "UTF-8"); } ?>

$body = の後にphpをそのまま入れても動きません。

##試したこと

下記もできませんでした。

$body = " ブランド名 if (ctype_alpha(substr($value["hoge_name"] , 0, 1))) { echo "スペース商品名".htmlspecialchars($value["hoge_name"], ENT_QUOTES, "UTF-8"); }else{ echo "商品名".htmlspecialchars($value["hoge_name"], ENT_QUOTES, "UTF-8"); } のご購入ありがとうございます。 "

##解決方法がわからない状況です。

上記の方法を試すと、このように表示されます。

このページは動作していません
現在このリクエストを処理できません。
HTTP ERROR 500

どのようにしたらよろしいでしょうか。

よろしくお願い申し上げます。

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

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

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

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

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

m.ts10806

2019/10/09 05:16

回答依頼は構わないんですが、質問はきちんとしてもらいたいです。 コードをマークダウンのcode使うとか 「うまくいかない」ではなく、きちんと起きてる状況説明するとか。「phpのようなもの」では何も伝わりませんし
ichigob

2019/10/09 05:27

申し訳ございません。 使い方がよくわかっておりませんでした。 codeを使って記入しました。 エラー内容も記載しました。 その他必要な情報はございますでしょうか。
退会済みユーザー

退会済みユーザー

2019/10/09 05:41

文法エラーなど初歩的なミスで500エラーを引き起こしているかもしれませんので、まずはphpの文法チェックを。コンソール上で、php -l ファイル名 などとすればできます。
guest

回答3

0

ベストアンサー

$bodyの中ではなく、その前に処理すればよいかと。

PHP

1$brandName = (ctype_alpha(substr($hoge_name , 0, 1))) ? ' '.$hoge_name : $hoge_name; 2$body = "ブランド名". $brandName ."のご購入ありがとうございます。"; 3 4echo $body; 5

投稿2019/10/09 05:21

編集2019/10/11 01:29
mayoi_maimai

総合スコア1583

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

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

ichigob

2019/10/09 05:28

ありがとうございます。 試してみます。
ichigob

2019/10/09 05:31

$body の前に入れてみましたが、反応がありませんでした。
mayoi_maimai

2019/10/09 05:48

ちょっとなおしました。
ichigob

2019/10/09 06:05

ブランド名のご購入ありがとうございます。 という自動返信メールが返ってきました。
mayoi_maimai

2019/10/09 06:11

ちょっとなおしました。
ichigob

2019/10/09 06:29

自動返信メールが戻ってきませんでした。
ichigob

2019/10/09 06:42

エラーは出ず、サンクスページに遷移しますが、自動返信メールは届かない状況です。
mayoi_maimai

2019/10/09 07:07

配信部分がわからないので何とも言えませんね。。 $bodyの下あたりで echo $body; exit; とかで確認してみてはどうでしょう。
ichigob

2019/10/09 08:18

echo $body; exit; こちらで、ブラウザーには、 「ブランド名のご購入ありがとうございます。」 と出ました。
mayoi_maimai

2019/10/09 08:21

$value["hoge_name"]に値が無いっぽいですね。 こちらもdumpしてみては?
ichigob

2019/10/09 08:42 編集

if (ctype_alpha(substr($value["hoge_name"] , 0, 1))) { $hoge_name = ' '.$value["hoge_name"]; } else { $hoge_name = $value["hoge_name"]; } echo $hoge_name; exit; ーーーーーーー $hoge_name の値が空でした ーーーーーーー // if (ctype_alpha(substr($value["hoge_name"] , 0, 1))) { // $hoge_name = ' '.$value["hoge_name"]; // } else { // $hoge_name = $value["hoge_name"]; // } これをコメントアウトすると、値が入るのでどこかに問題がありそうです。
mayoi_maimai

2019/10/09 09:34

さすがにこの情報だけではわかりません。。全部見てみないと。。 ちゃんと商品名が入っている変数などを参照すれば条件に当てはまるはずです。 ひょっとして$value["hoge_name"]も空なのでは??
ichigob

2019/10/09 11:39

$hoge_name にもともと値が入ってますが、 $value には、この記述で値がはいりますか? それとも、その前に別途設定が必要でしょうか?
mayoi_maimai

2019/10/09 11:57

であれば$hoge_nameでif分岐しないとだめですよ。。 回答を修正しましたので、これで echo $body; exit; とかで大丈夫ではないでしょうか。
ichigob

2019/10/11 00:21

ブランド名のご購入ありがとうございます。 となりました。 値が取れていないみたいです。
mayoi_maimai

2019/10/11 00:50

失礼しました。。 一部修正漏れがあったので再修正しました。 もっといい方法もありそうですが$hoge_nameにちゃんと商品名が入っているのであれば、ひとまずこれで大丈夫かと。
ichigob

2019/10/11 01:02

なぜかできないようでです。 ${hoge_name}は値が取れますが、 $hoge_name は取れていないようです。 ${hoge_name} と $hoge_name は同じ意味でしょうか?
ichigob

2019/10/11 01:07

$body = "ブランド名". $hoge_name ."のご購入ありがとうございます。${hoge_name}"; これでテストすると${hoge_name}には値がきます。
mayoi_maimai

2019/10/11 01:29

${hoge_name}と$hoge_nameは同じです。 ダブルクォート内は{}を入れないと「$に続く、有効な変数名を形成することが可能な最長のトークンを取得する」ってのが基本だったと思います。 回答の方を修正してみました。
ichigob

2019/10/11 01:43

if (ctype_alpha(substr(${hoge_name} , 0, 1))) { $hoge_name = ' '.${hoge_name}; } $body = "ブランド名". $hoge_name ."のご購入ありがとうございます。"; でできていました。 すみません。 再度テストしてみます!
ichigob

2019/10/11 01:50

表示に関しては、問題ありませんでした。 ですが、自動返信メールを返す値が ${facility_name} だったため スペースが入るとメールが送られませんでした。 一度自動返信メールでスペースを入れて、メールで送る処理の前でスペースを削除する処理が必要になりました。 メールの後に同じようなif文でスペースを無しにするという処理を書くという認識であっていますでしょうか?
mayoi_maimai

2019/10/11 02:00

スペースが入るとメールが送れないっていうことは無いと思いますが。。 ちょっと処理フローがイメージしにくいのですが先頭のスペースを削除するのであれば以下で消せます。 削除のタイミングはお好みでよいかと。 $hoge_name = ltrim($hoge_name);
ichigob

2019/10/11 05:48

できました! mayoi_maimai様 本当にありがとうございます。m(_ _)m
mayoi_maimai

2019/10/11 05:55

こちらのミスで長くなってしまいごめんなさい^^; 解決したようでよかったですw
ichigob

2019/10/17 04:44

すみません、もうひとつ条件を足したいです。 特定の「$hoge_name」の場合ですが 1、$body = "ブランド名" の"ブランド名"を非表示 2、$body = "ブランド名". $brandName 後に「追記」を入れる 自動返信では、 ======== $brandName 「追記」のご購入ありがとうございます。 ======== と表示するという感じです。 この場合はどのようにしたらよろしいでしょうか?
guest

0

上記の方法を試すと、このように表示されます。

PHPの基本部分でつまずいています。
PHPマニュアル的には文字列とか引用符(クォーテーション)あたりです。
シングルクォーテーションまたはダブルクォーテーションで囲まれた中身はあくまで「文字列」として扱われます。

そのなかで何かしらの分岐によって文章を変化させたい場合は、変数に追加していって途中で分岐を入れる文言が変わるところだけを変数にして全体の文字列を作る前に分岐して変数を作るかが主な対応方法です。

質問に提示された方法はダブルクォーテーションの中にダブルクォーテーションがあるため、文法エラーになっています。(エラー表示onにしてください。なってないようなので。調べたらやり方は出てきます)

もちろんエスケープする、文字列連結をするなどで対処は可能ですが、今回は処理を入れてしまっているのでおかしいことになっています。

それぞれ簡単なサンプルを提示します。
いずれも$flgが1のときは「こんにちは山田さん」それ以外のときは「こんにちは佐藤さん」を出力します。

変数に追加していって途中で分岐を入れる

php

1$flg=1; 2 3$body='こんにちは'; 4if($flg===1){ 5 $body .= '山田'; 6}else{ 7 $body .= '佐藤'; 8} 9$body.='さん'; 10 11echo $body;

文言が変わるところだけを変数にして全体の文字列を作る前に分岐して変数を作る

php

1$flg=1; 2 3if($flg===1){ 4 $name = '山田'; 5}else{ 6 $name = '佐藤'; 7} 8 9$body=<<<BODY 10こんにちは${name}さん 11BODY; 12 13echo $body;

投稿2019/10/09 05:43

m.ts10806

総合スコア80875

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

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

0

正規表現使えばいいのでは?

投稿2019/10/09 05:17

kyoya0819

総合スコア10429

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

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

kyoya0819

2019/10/09 05:19

あとは最初の1文字だけ取得してstrlen()とmb_strlen()の比較をするってのもいいかもしれません。
ichigob

2019/10/09 05:32

$body の中にif文を入れて比較でしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問