我有一个基本的PHP mail()
脚本,通过电子邮件向用户发送他们刚刚提交的表单的详细信息。 PHP将所有数据精确地插入到数据库中,但是当我想在数据处理完毕后重定向它们时会出现问题。
我目前正在使用:
mail($email, $subject, $message, $headers);
header('Location: '/reservations/?res='.$res.'&id='.$id.'');
但它正在抛出这个错误:
Warning: Cannot modify header information - headers already sent
我意识到您无法发送多个标头,但有没有办法区分邮件和位置标头?我不想使用JavaScript重定向,因为它太慢而且滞后。我读过有关ob_start()
的某处,但我不知道是否有必要......
答案 0 :(得分:4)
mail()不会生成任何输出。在打开<?php
标记之前,您可能在文件顶部有一些空格。
答案 1 :(得分:3)
使用header
修改HTTP标头要求尚未发送。当第一次输出发生时就会发生这种情况。
因此,为了避免发送HTTP标头,您需要在调用header
之前避免任何输出,或者您需要缓冲它以使其不被发送(请参阅output control,尤其是{{3 }})。
导致发送HTTP标头的输出位置出现在错误消息中(“ file >
答案 2 :(得分:0)
在邮件功能之前添加“@”符号,它将解决您的问题。
即。,
@mail($email, $subject, $message, $headers);
header('Location: /reservations/?res='.$res.'&id='.$id);
答案 3 :(得分:0)
<?php
mail($email, $subject, $message, $headers);
header('Location: '/reservations/?res='.$res.'&id='.$id.'');
?>
应该工作得很好。请确保在此之前没有其他任何事情发生。换句话说,没有<body>
,<title>
,<head>
或代码之上的任何内容。
如果您出于某种原因希望确保您的PHP代码仍然是最重要的。
Exampel:
<?php
mail($email, $subject, $message, $headers);
header('Location: '/reservations/?res='.$res.'&id='.$id.'');
?>
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Send mail</title>
</head>
<body>
</body>
</html>
答案 4 :(得分:0)
更好的选择是你可以使用javascript window.location返回页面 喜欢 echo'window.location =“/ reservations /?res = $ res&amp; id = $ id”'