【问题标题】:cant get my php form to send [duplicate]无法让我的 php 表单发送 [重复]
【发布时间】:2016-02-15 11:41:28
【问题描述】:

我正在尝试制作一个电子邮件表单,并且我一直在寻找一个很好的方法来做到这一点。问题是当我单击发送时,我收到此“解析错误:语法错误,第 12 行上出现意外的 '

<?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>

【问题讨论】:

    标签: php html mail-form


    【解决方案1】:

    您错误地使用了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;
    

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

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

    注意:-

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

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

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

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

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

    希望对你有帮助:)

    【讨论】:

    • 感谢您的回答。似乎它现在尝试发送邮件,但又出现了另一个错误。 : 无法在第 21 行执行邮件传递程序 '/usr/local/bin/sendmail -oi -t' 谢谢您的邮件
    • @Guggins:不客气 :) 如果新问题与 HEREDOCS 无关,那么我请求您将该问题作为新问题发布。
    • 好的,正如您所见,我对 stackoverflow 很陌生。 :)
    【解决方案2】:

    您正在尝试使用 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;
    

    【讨论】:

      猜你喜欢
      • 2018-08-13
      • 2019-08-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-24
      • 1970-01-01
      • 2018-06-08
      相关资源
      最近更新 更多