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

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

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

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

Q&A

解決済

2回答

2246閲覧

フォーム送信したがメールが飛んでこないです。

Kuriaki

総合スコア85

PHP

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

0グッド

0クリップ

投稿2016/11/25 02:39

下記のコードなんですが、エラーは出ていませんが、送信してもメールがアドレスにこないです。
下のチケット部分のelse{exit();}をはずせばメールが飛んできますが、そしたらリロード防止が効かなくなってF5押すたびに送信されてしまい、メールが飛んできます。
原因を知りたいです。
よろしくお願いいたします。

php

1<?php 2session_start(); 3$_SESSION["ticket"] = SHA1(uniqid().mt_rand()); 4 5 ?> 6 7 8<!DOCTYPE html> 9<html> 10<head> 11 12 <meta charset="utf-8"> 13 <title>php</title> 14</head> 15<body> 16<form action="csv.php" method="post" name="form"> 17 18<p> 19<input type="text" name="moji"> 20 21</p> 22 23<p> 24<input type="submit" value="送信する"> 25</p> 26</form> 27</body> 28 </html> 29 30<?php 31 32if(isset($_POST['moji'])){ 33$moji=$_POST['moji']; 34} 35 36 37if(isset($_POST["submit"], $_SESSION["ticket"]) && $_SESSION["ticket"] == $_POST["ticket"]){ 38 unset($_SESSION["ticket"]); 39 } else{ 40 exit(); 41 } 42 43 44 45 46 47mb_language("Japanese"); 48mb_internal_encoding("UTF-8"); 49 50 51 52 53 54$to = "xx"; 55$title = "ご無沙汰しております"; 56$content = "$moji\n"; 57$from = "From:xxx\r\n"; 58$from .= "Return-Path: xxxx"; 59 60 61$send_mail = mb_send_mail($to, $title, $content, $from); 62?>

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

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

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

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

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

guest

回答2

0

何の分岐にも入っていない状態でメール送信命令がありますので、読み込む度にメールは送られます。
if(isset($_POST['moji'])){
の分岐を入れているようなので、その中に下のメール送信関数一式を入れてみてはいかがでしょう。

投稿2016/11/25 02:53

takepieee

総合スコア686

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

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

0

ベストアンサー

1.ticketをPOSTしてないからelseにしか行かない
2.ページ読み込みのたびに新しい$_SESSION["ticket"]が発行されるので、前のページから送られたticketがあったとしても一致せず、elseにしか行かない

ってあたりが原因では。
普通は、フォームの入力画面とメールの送信処理は別のファイルにして、
form.php

PHP

1session_start(); 2$_SESSION['ticket'] = SHA1(uniqid().mt_rand()); 3//以下、formのHTML 4<input type="hidden" name="ticket" value="<?php echo $_SESSION['ticket']; ?>">

send.php

PHP

1if(isset($_POST["submit"], $_SESSION["ticket"]) && $_SESSION["ticket"] == $_POST["ticket"]){ 2 unset($_SESSION["ticket"]); 3 mailSend(); 4} else { 5 header('Location: form.php'); 6 exit(); 7} 8function mailSend() { 9 mb_language("Japanese"); 10 mb_internal_encoding("UTF-8"); 11 $to = "xx"; 12 $title = "ご無沙汰しております"; 13 $content = "$moji\n"; 14 $from = "From:xxx\r\n"; 15 $from .= "Return-Path: xxxx"; 16 $send_mail = mb_send_mail($to, $title, $content, $from); 17}

と言うような感じにするのでは。

投稿2016/11/25 02:51

kunai

総合スコア5405

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

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

Kuriaki

2016/11/25 02:53

回答ありがとうございます。 同じページでそれを行うことはできないでしょうか
kunai

2016/11/25 03:05

どうしても同じページでやるのであれば、 if(!isset($_POST['ticket'])) { $_SESSION['ticket'] = SHA1(uniqid().mt_rand()); } のように、POSTじゃなかったらチケットを更新するような形にするとかですかね。 回答文の1,2の問題が解消できる形であれば何でも。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問