0

我正在尝试制作电子邮件表格,并且我一直在寻找一种很好的方法来做到这一点。问题是当我单击发送时,我收到此“解析错误:语法错误,第 12 行上的意外'<<'(T_SL)”。有人可以看到问题所在吗?

<?php

$to = '.........@gmail.com';
$subject='hi there you';
$name = $_POST['name'];
$email = $_POST['email'];
$message = $_POST['message'];
$message = <<<< EMAIL
Hi! My name is $name.
$message
From $name
my email is $email

EMAIL;

$header ='$email';
if($_POST){
mail($to, $subjects, $message, $header);
$feedback = 'Thankyou for your email';
echo $feedback;} ?>

html

<form action="process.php" method="post">
<ul>
<li>
    <label for="name">Name:</label>
    <input type="text" name="name" id="name" />
</li>
    <li>
    <label for="email">Email:</label>
    <input type="text" name="email" id="email" />
</li>
<li>
<label for="topic">Topic:</label>
<select>
    <option value="optiona">optiona</option>
    <option value="optionb">optionb</option>
    <option value="optionc">optionc</option>
</select>
</li>
<li>
<label for="message">your message:</label>
<textarea id="message" name="message" cols="42" rows="9"></textarea>
</li>
<li><input type="submit" value="Submit"></li>
</form>
4

2 回答 2

2

您错误地使用了 HEREDOCS语法。

// Remove one < from below line
<<<EMAIL
Hi! My name is $name.
$message
From $name
my email is $email // Remove one line space from below line
EMAIL;

<<<运算符之后,提供一个标识符,然后是一个换行符。字符串本身紧随其后,然后再次使用相同的标识符来关闭引号。

结束标识符必须从该行的第一列开始。此外,标识符必须遵循与 PHP 中任何其他标签相同的命名规则:它必须仅包含字母数字字符和下划线,并且必须以非数字字符或下划线开头。

笔记:-

1) 非常重要的是要注意,带有结束标识符的行不能包含其他字符,分号 (;) 除外。这尤其意味着标识符可能不会缩进,并且分号之前或之后可能没有任何空格或制表符。

2) 同样重要的是要认识到结束标识符之前的第一个字符必须是本地操作系统定义的换行符。这是在 UNIX 系统(包括 Mac OS X)上的 \n。结束分隔符后还必须跟一个换行符。

3) 如果这条规则被破坏并且关闭标识符不是“干净的”,它不会被认为是一个关闭标识符,PHP 将继续寻找一个。

4) 如果在当前文件结尾之前没有找到合适的结束标识符,则在最后一行会导致解析错误。

5) Heredocs 不能用于初始化类属性。自 PHP 5.3 起,此限制仅对包含变量的 heredocs 有效。

希望它会帮助你:)

于 2016-02-15T11:45:40.030 回答
1

您正在尝试使用 HEREDOC 语法,但您没有完全正确。

从 PHP 文档(http://php.net/manual/en/language.types.string.php#language.types.string.syntax.heredoc):

“分隔字符串的第三种方法是 heredoc 语法:<<<。在此运算符之后,提供了一个标识符,然后是一个换行符。字符串本身紧随其后,然后再次使用相同的标识符来关闭引号。”

所以你的代码应该是:

$message = <<<EMAIL
Hi! My name is $name.
$message
From $name
my email is $email

EMAIL;
于 2016-02-15T11:43:39.173 回答