2014-10-04 112 views
0

我試圖讓這個表單提交工作,但我不熟悉PHP。我買了這個,但它似乎沒有工作。爲什麼我的表單提交不適用於PHP?

當我按下提交按鈕什麼都不會發生!我只是想知道代碼是否正確寫入。

預先感謝您

HTML代碼

<form method="post" id="contact-form" action="contact.php"> 
    <div class="fields"> 
    <div class="column"> 
    <div class="field"> 
     <input type="text" name="name" placeholder="Name*"> 
     </div> 
    </div> 
    <div class="columnlast"> 

     <div class="field"> 
     <input type="text" name="email" placeholder="Email*"> 
     </div> 
    </div> 

    </div> 

    <textarea cols="1" name="message" rows="4" placeholder="Message"></textarea> 
    <input type="submit" value="Submit"> 
</form> 

PHP代碼

<?php 

    //Retrieve form data. 
    //GET - user submitted data using AJAX 
    //POST - in case user does not support javascript, we'll use POST instead 
    $name = isset($_GET['name']) ? $_GET['name'] : $_POST['name']; 
    $email = isset($_GET['email']) ?$_GET['email'] : $_POST['email']; 
    $phone = isset($_GET['phone']) ?$_GET['phone'] : $_POST['phone']; 
    $message = isset($_GET['message']) ?$_GET['message'] : $_POST['message']; 

    if ($_POST) $post=1; 

    $errors = array(); 

    if (!$name) $errors[count($errors)] = 'Please enter your name.'; 
    if (!$phone) $errors[count($errors)] = 'Please enter your phone.'; 
    if (!$email) $errors[count($errors)] = 'Please enter your email.'; 
    if (!$message) $errors[count($errors)] = 'Please enter your message.'; 

    //If the errors array is empty, send the mail 
    if (!$errors) { 

    // ====== mail here ====== // 
    $to = 'Ardi Mir <[email protected]>'; 

    // Sender 
    $from = $name . ' <' . $email . '>'; 

    //subject and the html message 
    $subject = 'Message from your website'; 
    $message = ' 
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
    <html xmlns="http://www.w3.org/1999/xhtml"> 
    <head></head> 
    <body> 
    <table> 
    <tr><td>Name:</td><td>' . $name . '</td></tr> 
    <tr><td>Phone:</td><td>' . $phone . '</td></tr> 
    <tr><td>Email:</td><td>' . $email . '</td></tr>  
    <tr><td>Message:</td><td>' . nl2br($message) . '</td></tr> 
    </table> 
    </body> 
    </html>'; 

$result = sendmail($to, $subject, $message, $from); 

if ($_POST) { 
    if ($result) echo 'Thank you! We have received your message.'; 
    else echo 'Sorry, unexpected error. Please try again later'; 

} else { 
    echo $result; 
} 

} else {} 

function sendmail($to, $subject, $message, $from) { 
$headers = "MIME-Version: 1.0" . "\r\n"; 
$headers .= "Content-type:text/html;charset=iso-8859-1" . "\r\n"; 
$headers .= 'From: ' . $from . "\r\n"; 

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

if ($result) return 1; 
else return 0; 
} 
?> 
+0

如果你想同時允許'GET'和'POST',您可以用'$ _REQUEST'。它合併'$ _GET'和'$ _POST'。 – Barmar 2014-10-04 01:37:17

+1

@Barmar重要的是還要注意cookies也落在'$ _REQUEST'中,並且優先順序可以在PHP.ini中配置,這可以使其不可靠,這取決於您的特定需求。 – Brad 2014-10-04 01:39:15

+0

什麼都沒有發生,或者你得到一個空白頁面?啓用錯誤報告:'error_reporting(E_ALL); ini_set(「display_errors」,1);' – Barmar 2014-10-04 01:39:55

回答

1

爲什麼你的表格是不是工作和郵件沒有發送的原因是因爲它缺少phone字段。

以下添加到您的HTML表單:

<input type="text" name="phone" placeholder="Phone*"> 

,它會工作。

如果error reporting設定/包含在PHP中,它會拋出以下,或者類似的:

注意:未定義指數:電話線/path/to/your/file.php X

將錯誤報告添加到文件頂部,這將有助於生產測試。

error_reporting(E_ALL); 
ini_set('display_errors', 1); 

  • 這是我自己的託管服務進行測試,而不是本地計算機。

+1

就是這樣。謝謝。 – ArdMir 2014-10-04 02:23:20

+0

@Ardavan你非常歡迎,*歡呼* – 2014-10-04 02:31:46

+0

有沒有一種方法可以讓表單在提交後消失? @ Fred-ii- – ArdMir 2014-10-04 04:01:18

0

我還趕緊把你的代碼在我的本地網絡服務器,看着它。

在第一,取代

if(!$errors) 

if(empty($errors)) 

如果使用!$variable,那麼PHP將檢查變量的內容FALSE一個布爾值。

$foo=false; 
if(!$foo) {...} else {...} 

接下來,您正在等待一個電話號碼。

Array ([0] => Please enter your phone.) 

我想通了這一點通過把你的代碼的56行:

} else {print_r($errors);} 

print_r(...)可以讓你在人類可讀的格式查看變量的內容。它經常用於調試。

否則,我沒有發現任何錯誤。所以你必須修正,簡而言之:

  • 替換上面的if語句以正確檢查一個空數組。
  • 在調試時切勿將其他語句留空,這可能會成爲一個陷阱。在調試過程中使用print_r,但在生產過程中使用print_r,因爲它可以提供有關代碼/設置的一些有價值的信息。

PHP手冊也有關於empty()功能一些不錯的事情要告訴:http://php.net/empty

同爲print_rhttp://php.net/print_r

相關問題