2013-11-26 51 views
-2

所以基本上,我想讓某人完成一個表單,運行一個php腳本,而不是拉起php文件的網頁,我想在表單的末尾添加文本。如何在向同一個html頁面添加文本時運行php腳本?

目前,我有一個表格:

<form action="scripts/email.php" method="POST"> 
<p>Name: <input type="text" name="name" placeholder="Name"></p> 
<p>Email: <input type="text" name="email" placeholder="Email"></p> 
<p>Subject: <input type="text" name="subject" placeholder="Subject"></p> 
<p>Message: </p> 
<p><textarea name="message"></textarea></p> 

,看起來像這樣:

當 '提交' 被點擊時,它會導致我的PHP腳本:

<?php 

$from = $_POST['email']; 
$to = "[email protected]"; 
$subject = $_POST['subject']; 
$name = $_POST['name']; 
$message = $_POST['message']; 

mail($to, $subject, "Name: " . $name . "\nMessage: " . $message, "From:" . $from); 

print "Your message has been sent!"; 

?> 

這導致了一個空白的網頁,只是用純文字說明:

「您的留言已發送!」

基本上,我要的是文本添加到提交表單的腳本運行後,如:

http://i.stack.imgur.com/zha4d.png

我怎樣才能實現運行網頁上的PHP腳本,而不是加載PHP腳本路徑的新網頁,但在當前HTML網頁上追加文本?

+1

你需要使用AJAX(http://en.wikipedia.org/wiki/Ajax_(programming))。 – ggutenberg

+0

檢查jQuery的ajax函數。綁定到表單的提交功能。 – shapeshifter

+0

請參閱下面的答案,它完美地滿足您的要求。 –

回答

1

請嘗試此操作:將此代碼寫入單頁。

<form action="<?php $PHP_SELF ;?>" method="POST"> 
     <p>Name: <input type="text" name="name" placeholder="Name"></p> 
     <p>Email: <input type="text" name="email" placeholder="Email"></p> 
     <p>Subject: <input type="text" name="subject" placeholder="Subject"></p> 
     <p>Message: </p> 
     <p><textarea name="message"></textarea></p> 
     <input type="submit" name="submit" value="Submit"> 
     </form> 
     <?php 
     if (isset($_POST['submit'])) 
     { 
      $from = $_POST['email']; 
      $to = "[email protected]"; 
      $subject = $_POST['subject']; 
      $name = $_POST['name']; 
     $message = $_POST['message']; 

mail($to, $subject, "Name: " . $name . "\nMessage: " . $message, "From:" . $from); 

     echo "Your message has been sent"; 
     } 
     ?> 
+0

非常感謝!完美的作品。你能否指出我在$ PHP_SELF上的一些文檔,因爲我想知道它到底是什麼。 – Compressions

+0

這裏,$ PHP_SELF用於定位同一頁面。例如,如果此代碼是用'index.php'編寫的。然後$ PHP_SELF是index.php。 類似於刷新頁面。如果你不喜歡$ PHP_SELF,那麼你可以使用你寫這個代碼的文件名ie-index.php 你可以使用'echo $ _SERVER ['PHP_SELF'] ;'看看PHP_SELF給出了什麼值。 –

+0

非常感謝!我已經解決了一切。 – Compressions

1

你可以使用ajax來實現更安全,更快速的腳本執行。

HTML代碼:

<form method="POST"> 
     <p>Name: <input type="text" id="name" name="name" placeholder="Name"></p> 
     <p>Email: <input type="text" id="email" name="email" placeholder="Email"></p> 
     <p>Subject: <input type="text" id="subject" name="subject" placeholder="Subject"></p> 
     <p>Message: </p> 
     <p><textarea id="area" name="message"></textarea></p> 
     <input type="submit" name="submit" value="Submit" onclick="mail_js();"> 
</form> 
<div id="success_msg" style="display:none;"></div> 

只要給予適當的風格,這個div。

JS代碼:

function mail_js() 
{ 

    var input_val=$('#name').val(); 
    var email_val=$('#email').val(); 
    var subject_val=$('#subject').val(); 
    var message_val=$('#area').val(); 

    jQuery.ajax({ 
      type: 'post', 
      data:{ 
       'input_val':input_val, 
       'email_val':email_val, 
       'subject_val':subject_val, 
       'message_val':message_val 
      }, 
      url: 'email.php', 

      success:function(response){ 

       $("#success_msg").append(response).show(); 
      }, 
      error: function(errorThrown){ 
       alert('error'); 
       console.log(errorThrown); 
      } 
     }); 
} 

PHP腳本:

$from = $_POST['email_val']; 
$to = "[email protected]"; 
$subject = $_POST['subject_val']; 
$name = $_POST['input_val']; 
$message = $_POST['message_val']; 

mail($to, $subject, "Name: " . $name . "\nMessage: " . $message, "From:" . $from); 

echo "Your message has been sent";