解析错误:语法错误,意外$ end - 有人可以解释

时间:2014-12-31 18:26:50

标签: php syntax-error

我在下面的代码中遇到的错误是:

  

解析错误:语法错误,意外$ end

HTML CODE:

<form style="margin-left:auto;margin-right:auto; text-align:center;" action="contactus.php" method="post">
                <label for="name">
                    Namn/F&ouml;retag
                    <input type="text" name="name" placeholder="Skriv in erat namn/f&ouml;retag h&auml;r">
                    </label><br>
                     <label for="email">
                    E-mail
                    <input type="text" name="email" placeholder="Skriv in erat namn/f&ouml;retag h&auml;r">
                    </label><br>

                    <label for="amne">
                    &Auml;mne
                    <input type="text" name="amne" placeholder="Skriv in &auml;mnet h&auml;r">
                    </label><br>

                   <label for="message">
                    Meddelande
                       <br>
                    <textarea name="message" placeholder="Skriv in meddelandet h&auml;r" rows="20" cols="70">
                       </textarea><br>
                       <input type="submit" value="Skicka">
                    </label><br>

                </form>

PHP SCRIPT:

 <?php

    $emailSubject = $_POST['amne'];
    $webMaster = $_POST['info@example.com'];

    $nameField = $_POST['name'];
    $emailField = $_POST['email'];
    $amneField = $_POST['amne'];
    $messageField = $_POST['message'];

    $body = <<<EOD
    <br>
    <hr>
    <br>
    Namn: $name <br>
    E-mail: $email <br>
    Amne: $amne <br><br>
    Meddelande: $message <br>

    EOD;

    $headers = "Fran: $email\r\n";
    $headers .= "Content-type: text/html\r\n";
    $success = mail($webMaster, $emailSubject, $body, $headers);

    echo = "Ditt meddelande har skickats";
?>

有人可以解释为什么会这样吗?谢谢!

3 个答案:

答案 0 :(得分:2)

确保此声明:

EOD;

前面没有任何空格。看起来你有代码缩进,并允许在EOD前面的那个空格

此外,虽然您没有提出要求,但您还需要改变这一点:

echo = "Ditt meddelande har skickats"

到此:

echo "Ditt meddelande har skickats";

答案 1 :(得分:2)

这里有一些问题; heredoc和这个$headers = "Fran: $email\r\n";

我相信您的语言Fran看起来像瑞典语,意味着&#34;来自&#34;。

但是使用mail() - PHP,语法在任何给定的口语中保持不变,因此它必须在标题中以From:读取,因此我已修复了代码如下。

仅通过修复heredoc语法,邮件的标题就不会注册正确的&#34; From&#34;地址,最有可能最终进入,并标记为垃圾邮件。

至于heredoc:

{{3}周围不应该有任何空格,或任何(包括标签,或任何隐藏字符,例如* unicode等&lt; =参见脚注) } delimeters。

在这里,完全按照所示进行复制:

<?php

$emailSubject = $_POST['amne'];
$webMaster = $_POST['info@example.com'];

$nameField = $_POST['name'];
$emailField = $_POST['email'];
$amneField = $_POST['amne'];
$messageField = $_POST['message'];

$body = <<<EOD
<br>
<hr>
<br>
Namn: $name <br>
E-mail: $email <br>
Amne: $amne <br><br>
Meddelande: $message <br>

EOD;

    $headers = "From: $email\r\n";
    $headers .= "Content-type: text/html\r\n";
    $success = mail($webMaster, $emailSubject, $body, $headers);

    echo "Ditt meddelande har skickats";
?>

旁注(编辑):不应该是等号:

echo = "Ditt meddelande har skickats";
     ^ remove it

我以为我也修好了。


阅读heredoc:


<强>脚注:

*关于unicode字符:某些unicode字符有时可以被发现/意外/不知不觉地嵌入并且几乎未被发现,所以要小心/注意那些,因为这也会导致heredoc失败。我以前见过这种情况。

虽然这不是这种情况,但是如果将来发生意外的类似错误并且您看不到隐藏的unicode,则应该了解它。

但是,IDE /代码编辑可以看到这些代码。

答案 2 :(得分:0)

有两个错误,其中一个可能是由Stackoverflow的textarea造成的:

  1. 在结束HEREDOC(EOD;
  2. 之前或之后不能缩进
  3. 您在最后一行=之后echoecho "Ditt meddelande har skickats";