2014-10-20 49 views
0

我有一個html輸入表單以及一個php電子郵件腳本,它可以在同一頁面上使用這些值。PHP:在執行腳本之前等待用戶輸入

問題是,在我向表單提交任何數據之前,我收到一封空白電子郵件,因爲我的php腳本沒有等待用戶輸入。

我不想爲我的電子郵件腳本使用另一個頁面,因爲我不想通過GET傳遞變量,我也不知道如何實現會話。

由於這裏是我的代碼

<div id = "center"> 
<form action="post.php" name="emailform" method="post"> 
<input type="text" name="name"> 
<input type="text" name="email"> 
<input type="text" name="message"> 
<input type="submit" value="Send Email"> 
</form> 
</div> 

<?php 
if (!isset($_POST['submit'])) { 
    echo 'you have hit the submit button'; 

    $name = $_POST['name']; 
    $visitor_email = $_POST['email']; 
    $message = $_POST['message']; 

    $email_from = '[email protected]'; 
    $email_subject = "Message from client"; 
    $email_body = "Message from: $visitor_email \n \n Message:$message"; 


    $to = "[email protected]"; 
    $headers = "from:adam\r\n"; 
    mail($to,$email_subject,$email_body,$headers); 
} else { 
    echo 'You have not hit the submit button yet'; 
}  
?> 
+0

PHP腳本沒有 '等待' 輸入......他們跑。運行另一個腳本。這並不意味着任何會話的方式......其他腳本可以捕捉您的表單以及第一個。這裏有一些閱讀可能會使你不關心服務器和客戶端:http://stackoverflow.com/questions/13840429/what-is-the-difference-between-client-side-and-server-side-programming – 2014-10-20 19:54:46

回答

2

首先,給你的提交按鈕的名稱,如「提交」(因爲你已經提到這個名字在PHP)。例如:

<input type="submit" name="submit" value="Send Email"> 

現在你可以在你的代碼中實際使用$_POST['submit']

然後另一個好辦法:
當你的狀態if (!isset($_POST['submit'])) {,下面的代碼運行,如果提交按鈕具有被按下,因爲!的。要解決,只是刪除了!,使其:

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

!告訴if語句來計算爲true,如果下面的表達式,這裏isset($_POST['submit']),計算結果爲false。因此!的意思是「如果相反」。

注意:另外,按下提交按鈕時PHP運行的概念稍微偏離。提交按鈕觸發該頁面加載不同的頁面(或同一頁面)。 PHP代碼只在頁面加載時運行一次。

+0

感謝您的幫幫我。即使在你的例子中,腳本默認爲我的else語句,因爲用戶不能足夠快地按下按鈕,然後腳本就完成了。我明白你在編輯時說了什麼,但我不知道還有什麼可以做到的 – user970638 2014-10-20 03:26:46

+0

@ user970638我認爲你認爲腳本只運行一次。每次加載post.php時,即使您第一次加載頁面,您的當前PHP都會運行。當你在瀏覽器中鍵入'post.php'時,PHP運行,並且因爲你沒有按下submit,你就會收到這條消息。當你點擊按鈕時,它會重新加載***頁面,並且由於設置了'$ _POST ['submit']',郵件腳本將運行。只要刪除整個else語句,看看點擊按鈕仍然是你想要的。 – ajndl 2014-10-20 03:32:20

+0

刪除else語句仍然不會發送電子郵件。就好像頁面正在刷新並重置提交按鈕。我知道這個腳本可行,因爲如果沒有if語句,我會在每個頁面加載一個電子郵件 – user970638 2014-10-20 03:55:13

1

試試這個。

<div id = "center"> 
 
<form action="post.php" name="emailform" method="post"> 
 
<input type="text" name="name"> 
 
<input type="text" name="email"> 
 
<input type="text" name="message"> 
 
<input type="submit" value="Send Email"> 
 
</form> 
 

 
</div> 
 

 

 
<?php 
 

 

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

 

 
echo 'you have hit the submit button'; 
 

 
    if (empty(trim($_POST['name'])) || empty(trim($_POST['email'])) || empty(trim($_POST['message']))) { 
 
     echo 'Some fields are empty.'; 
 
    } else { 
 

 
    $name = $_POST['name']; 
 
    $visitor_email = $_POST['email']; 
 
    $message = $_POST['message']; 
 

 
    $email_from = '[email protected]'; 
 
    $email_subject = "Message from client"; 
 
    $email_body = "Message from: $visitor_email \n \n Message:$message"; 
 

 

 
    $to = "[email protected]"; 
 
    $headers = "from:adam\r\n"; 
 
    mail($to,$email_subject,$email_body,$headers); 
 
    } 
 
\t } else { 
 
\t 
 
\t 
 
\t echo 'You have not hit the submit button yet'; 
 
\t 
 
\t } 
 
\t 
 
\t ?>

相關問題