1

我目前正在为 Web 界面类学习 php,我们的任务之一是生成一个基本表单来发送电子邮件。然后,我们必须能够通过 html 在电子邮件中发送该表单的样本。我想这样做显示发送电子邮件时输入的输入。我已经完成了大部分工作,只是无法让 $subject 变量完全填充到样本中。它只会显示一个单词,并在第一个空格字符之后跳过所有其他单词。( $from 变量也是如此,但是这通常是一个电子邮件地址,因此不是主要问题)

例如,如果我发送一封主题为“This is a test”的电子邮件,当我在收件箱中收到这封电子邮件时,我会在电子邮件的主题行中看到完整的主题“This is a test”。但是当我打开电子邮件本身并查看生成的表单示例时,我只会看到“This”作为填写的主题。

我正在使用 input, type="text" 标签来输入主题,我想这是部分原因。我可以使用 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. 
}
4

1 回答 1

0

邮件程序中的 HTML 解释器正在查看输入元素并查看value属性后跟一个不带引号的单词。然后它会看到一堆没有值的其他属性。首先正确引用该值。还要消毒;您不希望您的客户因为从您的系统发送的电子邮件而被黑客入侵。

于 2013-08-06T05:05:54.870 回答