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

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

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

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

Q&A

解決済

5回答

2530閲覧

半角と全角を区別して送信したいですが、うまくいきません。

Kuriaki

総合スコア85

PHP

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

0グッド

0クリップ

投稿2016/11/28 00:43

編集2016/11/28 02:01

半角でしたら送信、全角でしたらとめて、警告文を出すという思考方法なんですが、今は半角全角関係なくメールが送信されます。elseでexit入れてみましたが、ダメでした。何かいい方法ありますでしょうか
回答よろしくお願いいたします。


csv.php

php

1<?php 2session_start(); 3$_SESSION['ticket'] = SHA1(uniqid().mt_rand()); 4 5 6 7$csv = fopen('text.csv', 'a'); 8fputcsv($csv, $_POST); 9fclose($csv); 10 11 12if (isset($_POST['moji'])){ 13 $moji=$_POST['moji']; 14}else{ 15 $moji=""; 16} 17 18 19 ?> 20 21 22<!DOCTYPE html> 23<html> 24<head> 25 26 27 28 <meta charset="utf-8"> 29 <title>php</title> 30</head> 31<body> 32<form action="send.php" method="post" name="form"> 33 34<?php 35 36 if (preg_match('/^[a-zA-Z0-9]+$/', $moji)) { 37 38 echo "送信完了"; 39 }else{ 40 echo "半角を入れてください"; 41 } 42 43?> 44 45<input type="text" name="moji"> 46 47 48 <input type="hidden" name="ticket" value="<?php echo htmlspecialchars($_SESSION["ticket"], ENT_QUOTES);?>"> 49 50 51<input type="submit" name="submit" value="送信する"> 52 53</form> 54</body> 55 </html>

send.php

php

1<?php 2session_start(); 3 4 5if(isset($_POST['moji'])){ 6$moji=$_POST['moji']; 7} 8 9 10 11if(isset($_POST["submit"], $_SESSION["ticket"]) && $_SESSION["ticket"] == $_POST["ticket"]){ 12 unset($_SESSION["ticket"]); 13 }else{ 14 header('Location: csv.php'); 15 exit(); 16 17} 18 19 20 21 mb_language("Japanese"); 22 mb_internal_encoding("UTF-8"); 23 $to = "xxxxxxxx"; 24 $title = "xxxxxxxxxx"; 25 $content = "$moji\n"; 26 $from = "From:xxxxxxxxxx\r\n"; 27 $from .= "Return-Path: xxxxxxxxx"; 28 $send_mail = mb_send_mail($to, $title, $content, $from); 29 30?>

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

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

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

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

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

guest

回答5

0

まずはそもそもmb_send_mail関数でエラーになっていないか、戻り値の確認をしましょう。
次にphp.iniでSMTPの設定が正しいか確認しましょう。
ここが正しく設定されていないと、プログラム側でいくらがんばってもダメだと思います。
とりあえず参考ページ。
http://www.phpbook.jp/tutorial/mailini/index1.html

投稿2016/11/28 01:22

ttyp03

総合スコア16998

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

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

0

ベストアンサー

なんか質問内容がまるっと変わってますが。。。

csv.phpから以下を削除
理由:

  • この文を実行する時点でまだメールの送信を行っていないのに送信完了を判断できるはずが無い。
  • この文を実行する時点でまだ入力されていないのに入力文字を判定できるはずが無い。

PHP

1 // ・・・略・・・ 2 3 if (preg_match('/^[a-zA-Z0-9]+$/', $moji)) { 4 echo "送信完了"; 5 }else{ 6 echo "半角を入れてください"; 7 }

send.php を以下のようにしてください。

PHP

1//・・・略・・・ 2 if (! preg_match('/^[a-zA-Z0-9]+$/', $moji)) { 3 echo "半角を入れてください"; 4 exit; 5 } 6 7 8 mb_language("Japanese"); 9 // ・・・略・・・ 10 $send_mail = mb_send_mail($to, $title, $content, $from); 11 if ( $send_mail ) { 12 echo "送信完了"; 13 } else { 14 echo "メールを送信できませんでした。"; 15 } 16 // ・・・略・・・

投稿2016/11/28 02:15

編集2016/11/28 05:31
Y.H.

総合スコア7914

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

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

Kuriaki

2016/11/28 02:25

回答ありがとうございます。 まだ送信されてないのに、判定ができないため、全角半角関係なく送信されるのは当然とういうことですよね! その判定をボタンを押した後にすると、判定が効いて、半角全角を区別して送信するかしないかができるということでしたよね。 わかりやすく回答して頂いてありがとうございました。
Y.H.

2016/11/28 02:37

はい。その解釈で問題ありません。
guest

0

全角が含まれるかどうか判定する処理が書かれていないのですから、そりゃ素通しして送信しますよ。
プログラムとはやらせたいことを全て書いたものなのですから、書いてないことをやるわけがないのです。

で、全角が含まれるかどうか判定する対象は何ですか? メールのタイトルですか、本文ですか、送信先ですか?
全角と判断するのはどんな文字群ですか?

それらをきちんと踏まえたうえで、メールに必要な情報を send.php が受け取ってからメール送信するまでの間で判断するようにコードを追加するのです。

投稿2016/11/28 02:12

tacsheaven

総合スコア13703

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

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

Kuriaki

2016/11/28 02:19

回答ありがとうございます。 素人の質問なんですが、 if (preg_match('/^[a-zA-Z0-9]+$/', $moji)) { echo "送信完了"; }else{ echo "半角を入れてください"; } preg-matchでは不十分でしょうか 私の考え方があまいかもしれませんが、 if文で分岐し、それらをechoするとしか浮かばないです。
tacsheaven

2016/11/28 02:28

この部分(判断するタイミングが違うのは既に他の方が指摘されていますが)だと、「本文」が英数字以外かどうか判定していますが、それと「半角」とは厳密には違うものですよね。 半角の中には空白やカンマ(,)、ハイフン(-)やアンダースコア(_)といった文字もあるのですから、それらは弾いてしまってよいのですか? その点も含めて、やりたいこと、やらせたいことを見直してみましょう。
guest

0

mb_send_mail()の箇所を

PHP

1print $moji; 2

にしてみてください。
mojiが表示されるならmb_send_mai()に必要な設定がされていないと思います

投稿2016/11/28 01:22

yambejp

総合スコア114810

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

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

Kuriaki

2016/11/28 01:27

回答ありがとうございます。 おしゃった通りにしてみましたが、何も表示されませんでした。
yambejp

2016/11/28 01:40

そうなるとcsv.phpからpostできちんとsend.phpにデータが渡ってないのでは? typoをチェックしてみてください send.php側で print_r($_POST); でデバッグしてみるとわかりやすいかもしれません
Kuriaki

2016/11/28 01:57

formのactionをsend.phpにしたらメールが来るようになりました。 しかし私が作りたかったのは半角ならメール送信できて、全角ならとめて半角を入力してくださいと表示したいです。 elseでexitしてたら、警告文入れられなくなりますし、多分与えもsend.phpに渡されない恐れもあるかと考えております。 何かいい方法ありますでしょうか よろしくお願いいたします。
yambejp

2016/11/28 02:06

ああ、なるほどね では成功したときにセッションにtext.csvから得た値を投入した上で header('Location:send.php’)で遷移し、 send.phpではpostデータではなくセッションデータを参照してください
guest

0

迷惑メールに引っかかってませんか?
または別の送信先アドレスを変えてみるとか・・

投稿2016/11/28 01:06

kaji

総合スコア648

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

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

Kuriaki

2016/11/28 01:17

メールアドレスは大丈夫だと思います。 コードでの間違いだと思ってましたが、 全然見つからなくて、質問しました。
kaji

2016/11/28 01:48

コード間違いであれば、直下にエラーの原因が出るはずで、 記述がなかったので、エラーは出てないものと思いましたが・・。 エラーがでてるのであれば、記述したほうが良いですね。
Kuriaki

2016/11/28 01:54

回答ありがとうございます。 エラーはでてなかったですが。 formのactionをcsv.phpからsend.phpに変えたらメールが来るようになってましたが、 半角全角関係なく、送信できるようになりました。 やりたかったのは半角なら送信、全角なら 半角を入力してくださいと表示したいですが、 どうしたらいいでしょうか もしelseでexitをつかったら 半角を入力してくださいはでなくなったしまいますので、 いい方法ありでしょうか よろしくお願いいたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問