2017-01-23 16 views
0

セッションに保存された情報をメールで送信するスクリプトがあります。この情報は、ユーザーが入力したフォームから収集されます。 は、例えば、フォーム上の二回クリックされたボタンを提出しかしPHP投稿メール複数回メールを送信する

、(フォーム「アクション」は以下のコードを指摘している)、2通の電子メールが送信され、3回をクリックしたときに、3通の電子メールが送信されます。

は、私が唯一の1電子メールが送信されたことを確認すると、すべてのセッションが空の場合は何も電子メールが送信されるべきでない:

<?php 

session_start(); 

if(isset($_POST['email'])) { 

$email_to = "[email protected]"; 
$email_subject = "My Subject"; 


$machine = implode(",", $_SESSION['machinesesh']); //required 
$machine_type = implode(" ", $_SESSION['typesesh']);; // required 
$address = $_SESSION['addresssesh']; //required 
$county = $_SESSION['countysesh']; //required 
$postcode = $_SESSION['postcodesesh']; //required 
$workplace = implode(', ', $_SESSION['worksesh']); //required 
$serving = implode(', ', $_SESSION['peoplesesh']); 
$company_name = $_SESSION['namesesh']; // required 
$visitorname = $_POST['yourname']; // required 
$email_from = $_POST['email']; // required 
$telephone = $_POST['telephone']; // not required 


$email_message = "New email alert .\n\n"; 

function clean_string($string) { 
    $bad = array("content-type","bcc:","to:","cc:","href"); 
    return str_replace($bad,"",$string); 
} 

$email_message .= "Name: ".clean_string($visitorname)."\n"; 
$email_message .= "Company: ".clean_string($company_name)."\n"; 
$email_message .= "Address Line 1: ".clean_string($address)."\n"; 
$email_message .= "County: ".clean_string($county)."\n"; 
$email_message .= "Postcode: ".clean_string($postcode)."\n"; 
$email_message .= "Machine(s) Wanted: ".clean_string($machine)."\n"; 
$email_message .= "Environment: ".clean_string($workplace)."\n"; 
$email_message .= "Serving: ".clean_string($serving)."\n"; 
$email_message .= "Email: ".clean_string($email_from)."\n"; 
$email_message .= "Telephone: ".clean_string($telephone)."\n"; 


// create email headers 
$headers = 'From: [email protected]' . "\r\n". 
'Reply-To: '.$email_from."\r\n" . 
'X-Mailer: PHP/' . phpversion(); 
@mail($email_to, $email_subject, $email_message, $headers); 

header("Location: http://www.example.com?tag=$machine"); 

?> 
+0

セッションにカウンタ変数を追加することができます。空であれば0を設定しません。電子メールを送信します。さもなければ、そうしないでください。 – Antony

+0

リロードやリダイレクトをせずに3回(3回のクリックで)送信しますか? – Progrock

+0

類似:http://stackoverflow.com/questions/4614052/how-to-prevent-multiple-form-submission-on-multiple-clicks-in-php – Progrock

答えて

0

どう設定について$ _SESSION [「emailsent」] = 1; ?電子メールを送信する前に、変数が存在するかどうか、また変数が1に設定されているかどうかを確認してください。この場合、このセッションでは電子メールは一度だけ送信されます。

0

メールを送信した後にセッションを消去することができます。次にフォームが送信されるときに、セッション値が設定されているかどうかを確認する必要があります。設定されていない場合は、再度電子メールを送信すべきではありません。

関連する問題