質問

First time posting here. I have a php contact form on a CMS site that is sending me duplicate emails. The problem is intermittent. Sometimes it send two copies, sometimes it sends as many as 8 copies. Sometimes it works normally. The issue started after removing some fields from the form.

The form submits to a separate page that sends the email to 3 recipients. This page also serves as a thank you page that displays the information submitted by the user. "Thanks for contacting us the following information has been received".

The embeds are expresionengine code. Thanks for your help!!!

Here is the form:

<form id="Form1" name="Form1" method="post" action="http://myprocessingpage.com">
<label for="fname">Name:</label> <input type="text" size="42" id="fname" name="fname"><br>

<label for="email">Email Address:</label> <input size="42" type="text" id="email" name="email"><br>

<label for="telephone">Telephone:</label> <input size="42" type="text" id="telephone" name="telephone"><br>
<br>
<div style="float: left; margin-right: 20px; margin-bottom: 30px;">
<label>How did you hear about us?</label> <br>

<input type="hidden" id="arrayfix" name="how[]" value="">
<input type="checkbox" id="website" name="how[]" value="website"> Website<br>
<input type="checkbox" id="referral" name="how[]" value="referral"> Referral<br>
<input type="checkbox" id="tradeshow" name="how[]" value="tradeshow"> Tradeshow<br>

</div>

<div style="float: left; margin-bottom: 30px;">
<label >Shelter Type:</label><br>

<input type="hidden" id="arrayfix2" name="type[]" value="">
<input type="checkbox" id="safe4x6" name="type[]" value="Safe_Room_4X6"> 4'X6' Shelter<br>
<input type="checkbox" id="safe4x8" name="type[]" value="Safe_Room_4X8"> 4'X8' Shelter<br>
<input type="checkbox" id="custom" name="type[]" value="Custom_Size_Safe_Room"> Custom Size Shelter<br>

</div>

<div style="clear: both;"></div>

<label for="question"> Questions or Comments:</label><br> <textarea rows="7" maxlength="500" name="question" id="question" cols="50"></textarea><br>
<br>

<input type="submit" class="btnimage" id="submit" name="submit" value="">

</form> 

Here is the processing page (http://myprocessingpage.com):

<?php
    if (isset($_POST['fname']))
{

?>

<!DOCTYPE html>
<head>
<title>Thank you for contacting us!</title>

{embed="page/headtags"}

</head>

<body>

{embed="page/header"}
{embed="page/drop"}
<div id="contentbg">


    <div id="content">

<?php   
    $name = $_POST['fname'];
    $telephone = $_POST['telephone'];
    $email = $_POST['email'];
    $question = $_POST['question'];

    $howarray = $_POST['how'];
    $howimplode = implode("\n", $howarray);
    $how = str_replace("_", " ", "$howimplode");

    $typearray = $_POST['type'];
    $typeimplode = implode("\n", $typearray);
    $type = str_replace("_", " ", "$typeimplode");


    //sent to us


    $to = "mail1@mail.com, mail2@mail.com, mail3@mail.com";
    $subject = "Info Request";
    $message = "INFO REQUEST:\n\nName: $name\n\nEmail: $email\n\nTelephone: $telephone\n\nHow they heard about us:\n$how\n\nShelter type:\n$type\n\nQuestions or Comments:\n$question";
    $from = "info@mysite.com";
    $headers = "From:" . $from;

    mail($to,$subject,$message,$headers);


?>

<div id="form"> 

<p style="margin-top: 0px; margin-bottom: 40px; color: green; font-weight: bold;">Thank you for contacting us! The following information has been received:</p>
<div style="margin-left: 30px;">
<?php
echo "<p><b>Name:</b> ".$name."</p>";
echo "<p><b>Email:</b> ".$email."</p>";
echo "<p><b>Telephone:</b> ".$telephone."</p>";


$thankshowimplode = implode("</br>", $howarray);
$thankshow = str_replace("_", " ", "$thankshowimplode");

$thankstypeimplode = implode("</br>", $typearray);
$thankstype = str_replace("_", " ", "$thankstypeimplode");

echo "<p><b>How you heard about us:</b></br> ".$thankshow."</p>";
echo "<p><b>Type of shelter(s):</b></br> ".$thankstype."</p>";
echo "<p style='word-wrap:break-word;'><b>Questions or Comments:</b> ".$question."</p>";
?>
</div>

</div>
</div>


{embed="page/footer"}


</body>

</html>

<?php   
} 
else
{
?>

<script type="text/javascript">
window.location = 'http://mycontactpage.com';
</script>

<?php
}
?>
役に立ちましたか?

解決

If someone double-clicks (or clicks it 8 times) your submit button, your script could be run more than once. Try disabling the submit button on click (using Javascript).

Another, probably unnecessary, solution would be to lock your form script (e.g. using semaphores), create a database entry with the provided info, then check to see if you've sent the same info recently (e.g. within the last five minutes), and don't sent it again if you have.

I'm sure the Javscript disable functionality will suffice :)

Or, if you want to find out what's really going on, you could just create a log file that logs "sent [some distinct piece of data that might tell these posts apart] at [timestamp]". If you see a couple of these, with the same [distinct info] entry and really close timestamp, then your problem is multiple clicks to the submit button.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top