2013-08-06 55 views
1

目前我正在學習PHP的Web界面類,而我們的任務之一是產生一種基本形式,以發送一封電子郵件,只返回第一個字。然後,我們必須能夠通過html在電子郵件中發送該表單的樣本。我想這樣做,顯示發送電子郵件時輸入的輸入。我已經完成了大部分工作,我只是無法讓$ subject變量在樣本中完全填充。它只會顯示一個單詞,並在第一個空格字符後跳過所有其他單詞。 ($ from變量也是如此,但這通常是一個電子郵件地址,因此它不是一個主要問題)

例如,如果我發送的郵件中包含「This is a test」這個主題,當我收到我的收件箱中的電子郵件時,我會在我的電子郵件主題行中看到完整的主題「這是一個測試」。但是,當我打開電子郵件本身並查看生成的表單樣本時,我只會將「This」視爲填充主題。

我使用的輸入型=「文本」標籤,進入主題,我想這是部分原因。我可以使用textarea標籤來解決問題,但這不是非常傳統的,似乎打敗了練習的目的。任何幫助表示讚賞。謝謝!

這裏是我的代碼:(。第一塊是剛剛生成形式的函數)

function createForm() //create form upon page load 
{ 
    echo '<form method="post">' . '<br />'; 
    echo '<fieldset>' . '<br />'; 
    echo '<legend><p>Heading</p></legend>' . '<br />'; 
    echo 'To: <input name="to" type="text" />' . '<br />'; 
    echo 'From: <input name="from" type="text" />' . '<br />'; 
    echo 'Subject: <input name="subject" type="text" />' . '<br />'; 
    echo '</fieldset>' . '<br />'; 
    echo '<fieldset>' . '<br />'; 
    echo '<legend><p>Content</p></legend>' . '<br />'; 
    echo 'Message: <textarea name="message" cols="30" rows="10"></textarea>' . '<br />'; 
    echo '<input name="send" type="submit" />' . '<br />'; 
    echo '</fieldset>' . '<br />'; 
    echo '</form>'; 
} 

和實際的發送電子郵件代碼:

if(isset($_REQUEST['to'])) //send email 
{ 
    $to = $_REQUEST['to']; 
    $subject = $_REQUEST['subject']; 
    $from = $_REQUEST['from']; 

    $headers = "MIME-Version: 1.0" . "\r\n"; 
    $headers .= 'Content-Type: text/html; charset=iso-8859-1' . "\r\n"; 
    $headers .= "From: $from" . "\r\n"; 
    $headers .= "Reply-To: $from" . "\r\n"; 
    $headers .= "Subject: $subject" . "\r\n"; 
    $headers .= "X-Mailer: PHP/".phpversion() . "\r\n"; 

    //html message 
    $message = ' 
    <html> 
    <body> 
    <form> 
    <fieldset> 
    <legend>Headings</legend> 
    To: <input type="text" name="to" value=' . $_REQUEST['to'] . ' /><br /> 
    From: <input type="text" name="from" value=' . $_REQUEST['from'] . ' /><br /> 
    Subject: <input type="text" name="subject" value=' . $_REQUEST['subject'] . ' /> 
    </fieldset> 
    <fieldset> 
    <legend>Content</legend> 
    Message: <textarea name="message" cols="30" rows="10">' . $_REQUEST['message'] . '</textarea><br /> 
    <input type="submit" name="send" /> 
    </fieldset> 
    </form> 
    </body> 
    </html>'; 

    mail($to,$subject,$message,$from,$headers); 

    echo "Message sent, thank you. <br />"; 
    echo '<a href="email.php">Return</a>'; 
} 
else 
{ 
    createForm(); //create form if no $to set. 
} 
+0

爲什麼你在發送的電子郵件另一種形式?我認爲你的代碼可能更簡單。 – Maximus2012

+2

和你應該改變'/ R/N'爲'\ r \ N' – user20232359723568423357842364

+0

這是什麼賦予我們的教授。除了向客戶發送樣品之外,我知道這通常不會使用太多。但是,無論如何,它的任務。 –

回答

0

中的HTML解釋電子郵件程序正在查看輸入元素並查看value屬性,後跟單個未加引號的單詞。然後它會看到一堆沒有值的其他屬性。首先正確引用該值。並且也清理;你不希望你的客戶因爲系統發送的電子郵件而被黑客入侵。

+0

「首先正確引用數值」 我想這就是我想弄明白的。如果我只引用這個變量,它會被視爲一個字符串並顯示字面變量。如果我回顯變量,我只是在字段中獲取php代碼。連接的REPLACE似乎是我能夠實現它的唯一方法。 誠然,我用php新手。所以我相信我只是在這裏忽略/拙劣的語法。 (消毒是下一步,但希望首先得到這個工作)。謝謝您的幫助。 –

+0

'... value =「'。sanitize($ _ REQUEST ['...'])。'」/>' –