2016-02-15 49 views
0

即时通讯设法做一个电子邮件表单,并一直在寻找一个好办法做到这一点。问题是,我得到这个“解析错误:语法错误,意想不到'< <'(T_SL)第12行”当我点击发送。有人可以看到问题是什么?不能让我的PHP表单发送

<?php 

$to = '[email protected]'; 
$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> 

回答

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系统上这是\ n,包括Mac OS X.结束分隔符后面还必须跟有一个换行符。 3)如果这个规则被破坏,并且结束标识符不是“干净”,它将不被视为结束标识符,并且PHP将继续寻找一个结束标识符。

4)如果在当前文件结束之前未找到合适的结束标识符,则最后一行会出现分析错误。

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

希望它能帮助你:)

+0

感谢您的回答。它似乎试图发送邮件,但得到了另一个错误。:无法执行邮件递送程序'/ usr/local/bin/sendmail -oi -t'在线21 谢谢您的电子邮件 – Guggins

+0

@Guggins:欢迎您:)如果新问题与HEREDOCS无关,那么我请求你将这个问题作为一个新的发布。 –

+0

没关系,因为你会发现我对stackoverflow很陌生。 :) – Guggins

1

您正在尝试使用定界符语法,但你没有得到它完全正确。

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

“来分隔串的第三种方式是定界符语法:。< < <这个操作符之后,提供了一种识别符,然后换行字符串本身如下然后再次使用相同的标识符来关闭报价。“

所以,你的代码应该阅读:

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

EMAIL;