2012-07-31 64 views
0

我有一個簡單的聯繫方式,我希望通過函數「POST」,但我似乎無法讓它工作?簡單的PHP表格

當我將動作發送到外部「send.php」文件時,表單工作,但我希望將所有內容都保存在一個文件中。如果$_POST['message']設置

<form action="send()" id="contactform" method="POST"> 
<p>Name<input type="text" name="name"> 
    Email 
    <input type="text" name="email"> 
    Phone 
    <input type="text" name="phone"> 
</p> 
<p>Message 
    <textarea name="message" rows="6" cols="25"></textarea> 
    <br /> 
<input type="submit" value="Send"> 
</p> 
</form> 

<?php 
function send() 
{ 
$name = $_POST['name']; 
$email = $_POST['email']; 
$phone = $_POST['phone']; 
$message = $_POST['message']; 
$formcontent=" From: $name \n Phone: $phone \n Email: $email \n Message: $message"; 
$recipient = "[email protected]"; 
$subject = "Contact Form"; 
$mailheader = "From: $email \r\n"; 
mail($recipient, $subject, $formcontent, $mailheader) or die("Error!"); 
echo "Thank You!"; 
} 
?> 

回答

5

您不能從<form>標記調用php代碼。通常你處理這是一個「回傳」回到同一頁面,並檢查是否表單變量被設置,以確定是否回發發生:

<form action="" id="contactform" method="POST"> 
在你的代碼

然後:

if (isset($_POST['name'])) 
    send(); 
0

變化form標籤

<form action="" ... > 
    ... 
</form> 

然後調用send()其聲明之後。

action屬性只是告訴瀏覽器它應該發送信息到哪個網頁;它不會告訴它一旦到達那裏就運行哪個函數。

1

這是PHP不是如何工作:)

要快速解決您的代碼,你可以這樣做:

  1. 把你send()功能
  2. 切的內容並將其粘貼到一個新的。 PHP文件(在您的休閒命名)
  3. 取代action="send()"action="file_you_just_created.php"
  4. 測試出來

基本上,HTML表單並不知道PHP代碼是否存在,也不能直接引用它。

0

HTML表單的action標籤不能用於執行PHP代碼。 該操作必須是一個PHP頁面,其中將包含將被執行以讀取POST變量的代碼。

0
<form action="?" id="contactform" method="POST"> 
<p>Name<input type="text" name="name"> 
    Email 
    <input type="text" name="email"> 
    Phone 
    <input type="text" name="phone"> 
</p> 
<p>Message 
    <textarea name="message" rows="6" cols="25"></textarea> 
    <br /> 
<input type="submit" value="Send"> 
</p> 
</form> 

<?php 
if ($_POST) { 
    send(); 
} 

function send() 
{ 
$name = $_POST['name']; 
$email = $_POST['email']; 
$phone = $_POST['phone']; 
$message = $_POST['message']; 
$formcontent=" From: $name \n Phone: $phone \n Email: $email \n Message: $message"; 
$recipient = "[email protected]"; 
$subject = "Contact Form"; 
$mailheader = "From: $email \r\n"; 
mail($recipient, $subject, $formcontent, $mailheader) or die("Error!"); 
echo "Thank You!"; 
} 
?> 
0
<form action="" id="contactform" method="POST"> 
<p>Name<input type="text" name="name"> 
    Email 
    <input type="text" name="email"> 
    Phone 
    <input type="text" name="phone"> 
</p> 
<p>Message 
    <textarea name="message" rows="6" cols="25"></textarea> 
    <br /> 
<input type="submit" value="Send" name="submit"> 
</p> 
</form> 

<?php 
if (isset ($_POST["submit"])) 
{ 
    $name = $_POST['name']; 
    $email = $_POST['email']; 
    $phone = $_POST['phone']; 
    $message = $_POST['message']; 
    $formcontent=" From: $name \n Phone: $phone \n Email: $email \n Message: $message"; 
    $recipient = "[email protected]"; 
    $subject = "Contact Form"; 
    $mailheader = "From: $email \r\n"; 
    mail($recipient, $subject, $formcontent, $mailheader) or die("Error!"); 
    echo "Thank You!"; 
} 
?> 
0

做到這本:

<form action="" id="contactform" method="POST"> 

或者更好的(有效):

<form action="<?php echo $_SERVER['SCRIPT_FILENAME'] ?>" id="contactform" method="POST"> 

捉對腳本檢查數據後的數據:

<?php 
if (isset($_POST['submit'])) { 
    // you should also check if field was filled (strict coding) 
    if (isset($_POST['email'])) $email = $_POST['email']; 
    ... 
} 
1

行動領域將呈現的HTML的一部分。這意味着,它是靜態的或「客戶」的屬性。根據the normative,它也應該是一個有效的絕對或相對地址。如果你把它留空,它會在大多數情況下(而不是全部)情況下工作,但它不會被正確驗證。

PHP代碼在您的網頁託管的服務器上工作。這意味着,它在您獲取任何內容之前運行,然後您的瀏覽器收到該html代碼。因此,需要在提交代碼後再次運行,因此您需要一個頁面來運行它。

想象一下,你在一家餐廳。首先你給侍者點些食物。這將是你試圖進入X網頁。然後在廚房準備食物。這將是正在執行的PHP代碼。當食物準備好時,服務員將它交給你。這是你下載信息,接收html代碼。你甚至可以改變它,只要你喜歡它(javascript),但這超出了你的問題的範圍。專注於OP,會改變你的食物安排(做一些客戶端)修改它已經在廚房做了什麼?不,它不能。唯一的選擇是告訴服務員你想要的食物變化(填寫表格),並有禮貌地告訴他去廚房,並要求他們(這是,在哪裏發送變化)。可能是一個愚蠢的例子,但它表明了這一點。

沒有把代碼作爲其他代碼應該毫無疑問地解決你的問題,我只是想解釋爲什麼你的代碼不工作,所以你更好地理解HTML/PHP。