我在下面的代码中遇到的错误是:
解析错误:语法错误、意外$end
网页代码:
<form style="margin-left:auto;margin-right:auto; text-align:center;" action="contactus.php" method="post">
<label for="name">
Namn/Företag
<input type="text" name="name" placeholder="Skriv in erat namn/företag här">
</label><br>
<label for="email">
E-mail
<input type="text" name="email" placeholder="Skriv in erat namn/företag här">
</label><br>
<label for="amne">
Ämne
<input type="text" name="amne" placeholder="Skriv in ämnet här">
</label><br>
<label for="message">
Meddelande
<br>
<textarea name="message" placeholder="Skriv in meddelandet här" rows="20" cols="70">
</textarea><br>
<input type="submit" value="Skicka">
</label><br>
</form>
PHP脚本:
<?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";
?>
有人可以解释为什么会发生这种情况吗?谢谢!
这里有一些问题; Heredoc和这个$headers = "Fran: $email'r'n";
我相信Fran
在你的语言中看起来像是瑞典语,意思是"来自"。
但是对于 mail()
- PHP,语法在任何给定的口语中都保持不变,因此它必须在标头中From:
读取,所以我也在下面的代码中修复了它。
仅通过修复 heredoc 语法,邮件的标头不会注册正确的"发件人"地址,并且很可能最终进入并标记为垃圾邮件。
至于赫雷多克:
heredoc delimeter 周围不应该有任何空格或任何内容(包括制表符或任何隐藏字符,如 *unicode 等<= 见脚注)。
在这里,并完全按照所示复制它:
<?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:
- http://php.net/manual/en/language.types.string.php#language.types.string.syntax.heredoc
脚注:
*关于 unicode 字符:有时可以找到/意外/不知不觉地嵌入并且几乎未检测到某些 unicode 字符,因此也要小心/警惕这些字符,因为这也会导致 heredoc 失败。我以前见过这种情况。
虽然这里不是这种情况,但如果将来发生意外的类似错误并且您看不到隐藏的 unicode,您应该意识到这一点。
但是,这些代码可以被IDE/代码编辑器看到。
确保以下语句:
EOD;
前面没有任何空格。看起来您的代码缩进了,这允许在EOD前面留出空格
另外,虽然你没有问,但你也需要从这个改变:
echo = "Ditt meddelande har skickats"
对此:
echo "Ditt meddelande har skickats";
有两个错误,其中一个可能是由 Stackoverflow 的文本区域引起的:
- 在结束 HEREDOC 之前或之后不能缩进 (
EOD;
) - 您在最后一行
echo
后有=
,它应该是echo "Ditt meddelande har skickats";