2011-04-19 100 views
3

嗨我以前使用這個非常簡單的PHP聯繫腳本成功,雖然當我試圖在表單上的新HTML頁面上實現它將不會提交。任何人都可以看到明顯的錯誤? 任何幫助,將不勝感激PHP聯繫表格不提交

這裏是HTML表單:

<div id="formContainer"> 

    <form action="form.php" method="post" id="contactForm"> 
    <fieldset> 

    <legend>Your details</legend>  

    <label for="name">Name *</label> 
    <input type="text" id="name"> 

    <label for="email">Email *</label> 
    <input type="email" id="email"> 

    <label for="tel">Telephone</label> 
    <input type="tel" id="tel"> 

    </fieldset> 

    <fieldset> 
    <legend>Tutoring</legend> 

    <label for="type">Type of lesson</label> 
    <select name="type" id="type"> 
    <option>Individual</option> 
    <option>Group</option> 
    </select> 

    <label for="subject">Subject</label> 
    <input name="subject" list="subjects" id="subject"> 
    <datalist id="subjects"> 
    <option>English</option> 
    <option>Biology</option> 
    <option>Geography</option> 
    </datalist> 

    <label for="level">Your level</label> 
    <select name="level" id="level"> 
    <option>Beginner</option> 
    <option>GCSE</option> 
    <option>A-Level</option> 
    <option>University</option> 
    </select> 

    <label for="hours">Hours/week</label> 
    <input type="number" id="hours"> 

    <label for="info">Additional Information</label> 
    <textarea name="info" id="info" rows="10"    cols="6"></textarea> 


    </fieldset> 

    <input type="submit" name="submit" value="Send" id="sendButton"> 

    <input type="hidden" name="submit_check" value="1" /> 
    </form> 

    </div> 

這裏是簡單的PHP腳本:

<?php 

if ($_POST["email"]<>'') { 
    $ToEmail = '[email protected]'; 
    $EmailSubject = 'Site contact form '; 
    $mailheader = "From: ".$_POST["email"]."\r\n"; 
    $mailheader .= "Reply-To: ".$_POST["email"]."\r\n"; 
    $mailheader .= "Content-type: text/html; charset=iso-8859-1\r\n"; 
    $MESSAGE_BODY = "Name: ".$_POST["name"]."<br>"; 
    $MESSAGE_BODY .= "Email: ".$_POST["email"]."<br>"; 
    $MESSAGE_BODY = "Telephone: ".$_POST["tel"]."<br>"; 
    $MESSAGE_BODY = "Type: ".$_POST["type"]."<br>"; 
    $MESSAGE_BODY = "Subject: ".$_POST["subject"]."<br>"; 
    $MESSAGE_BODY = "Level: ".$_POST["level"]."<br>"; 
    $MESSAGE_BODY = "Hours required: ".$_POST["hours"]."<br>"; 
    $MESSAGE_BODY .= "Additional information: ".nl2br($_POST["info"])."<br>"; 
    mail($ToEmail, $EmailSubject, $MESSAGE_BODY, $mailheader) or die ("Failure"); 

?> 

<html> 

    <h3>Thanks for your email</h3> 
    <h4>I'll get back to you as soon as possible</h4> 
    <a href="index.html"><p>Click here to go back to previous page</p></a> 

</html> 


<?php 
} else { 
?> 

<html>Sorry, this form didn't work</html> 

<?php 
}; 
?> 
+0

請注意,除非您正在運行[suhosin](http://www.hardened-php.net/suhosin/configuration.html#suhosin.mail.protect),否則您在此處有可利用的漏洞;攻擊者只需用'\ r \ nCc:blah \ r \ n \ r \ nI Love Spam!'提交'$ _POST [ 電子郵件]]'並且您已將主機變成垃圾郵件。 – sarnold 2011-04-19 10:35:11

+0

是的,我很關心問題是,任何具有任何類型安全功能的腳本似乎都非常複雜,我似乎無法實現它們。我將如何包含suhosin?謝謝 – onjegolders 2011-04-19 11:30:05

回答

3

嘗試用

if (!empty($_POST["email"])) 

不過,您可以使用以下網址查看該網頁上發佈的內容:

echo '<pre>'; 
var_dump($_POST); 
+0

感謝所有答覆,但不幸的是,更改第一個if語句並沒有實現,這個問題可能來自於新的html5標記嗎?這個腳本在我使用的另一個站點上工作得很好,它只是基於表格的html4表格 – onjegolders 2011-04-19 11:38:49

+0

不,不是的,Whot不適合你?什麼東西從'var_dump'返回? – hsz 2011-04-19 11:45:01

+0

好吧,當我提交表單時,它會直接轉到else消息,因此它沿着這條線不能正常工作。很抱歉,您能否確定我必須將您的代碼放入var_dump的位置?再次感謝 – onjegolders 2011-04-19 12:00:41

0

if ($_POST["email"] <> '') { 

變化

說成

if ($_POST["email"] != '') { 
0

你應該試試這個:

if(!empty($_POST["email"])){ 
    //your email preparation code 
} 

insted的使用這個的:

if($_POST["email" <> ''){ 
    //your email preparation code 
} 

!基本上意味着,所以!empty意味着不是空

+0

感謝所有回覆,但不幸的是,更改第一個if語句似乎沒有幫助。這個問題是否可能來自新的html5標記?這同樣的腳本在另一個網站上工作得很好,其中只有一個基於表格的html4表格 – onjegolders 2011-04-19 11:37:45

+0

可能,但是它實際上是否在更改頁面?或者當你點擊提交時只停留在同一頁面上? +這可能聽起來很愚蠢,但你可能想關閉你的輸入標籤,比如。你有幾個需要關閉的標籤。 – ryryan 2011-04-19 11:52:27

+0

我認爲輸入標籤只是關閉>雖然已經改變,謝謝。儘管如此,仍然沒有喜悅!我應該說,新的頁面確實出現之前,因爲爲我的HTML標記添加「名稱」值,表單工作併發送電子郵件,但不是所有的字段顯示在郵件 – onjegolders 2011-04-19 15:54:11

1

更改您的form.php的爲以下

<?php 

if ($_POST["email"]<>'') { 
    $ToEmail = '[email protected]'; 
    $EmailSubject = 'Site contact form '; 
    $mailheader = "From: ".$_POST["email"]."\r\n"; 
    $mailheader .= "Reply-To: ".$_POST["email"]."\r\n"; 
    $mailheader .= "Content-type: text/html; charset=iso-8859-1\r\n"; 
    $MESSAGE_BODY = "Name: ".$_POST["name"]."<br>"; 
    $MESSAGE_BODY .= "Email: ".$_POST["email"]."<br>"; 
    $MESSAGE_BODY = "Telephone: ".$_POST["tel"]."<br>"; 
    $MESSAGE_BODY = "Type: ".$_POST["type"]."<br>"; 
    $MESSAGE_BODY = "Subject: ".$_POST["subject"]."<br>"; 
    $MESSAGE_BODY = "Level: ".$_POST["level"]."<br>"; 
    $MESSAGE_BODY = "Hours required: ".$_POST["hours"]."<br>"; 
    $MESSAGE_BODY .= "Additional information: ".nl2br($_POST["info"])."<br>"; 
    mail($ToEmail, $EmailSubject, $MESSAGE_BODY, $mailheader) or die ("Failure"); 

echo &lt;&lt;&lt;EXCERPT 

<html> 

    <h3>Thanks for your email</h3> 
    <h4>I'll get back to you as soon as possible</h4> 
    <a href="index.html"><p>Click here to go back to previous page</p></a> 

</html> 

EXCERPT; 

} else { 


echo "<html>Sorry, this form didn't work</html>"; 

} 
?> 
0

你也可以只使用:

if ($_POST["email"]) { 

這與!= ""empty()檢查非常相似。 PHP被接受來處理表單。你可以讓它探測傳入的表單域。它爲字符串使用了一些神奇的布爾轉換規則,大部分時間都會完成你想要的。

這種更簡單的樣式的另一個優點是,如果啓用E_ALL和E_NOTICE(= debug)error_reporting模式,它便於調試。