PHP表单提交成功,但未重定向
我已经阅读了很多关于这个问题的其他问题,但是我现在仍然和我开始这个问题时一样困惑。通过阅读,我学到了以下几点: 我不相信任何html在header()之前就已经完成了-但是我还是新手,所以我可能错了。 我没有发现任何语法错误。 表格提交正常,我收到测试电子邮件 发生的事情是,我用有效文本完整填写表格,然后点击提交。数据被提交并发送到我的电子邮件,页面刷新回一个新的联系人表单(contact.php),在那里它应该转到my Thank.php页面 这是我的代码,电子邮件地址已更改。 提前感谢您的任何/所有帮助!非常感谢PHP表单提交成功,但未重定向,php,html,forms,Php,Html,Forms,我已经阅读了很多关于这个问题的其他问题,但是我现在仍然和我开始这个问题时一样困惑。通过阅读,我学到了以下几点: 我不相信任何html在header()之前就已经完成了-但是我还是新手,所以我可能错了。 我没有发现任何语法错误。 表格提交正常,我收到测试电子邮件 发生的事情是,我用有效文本完整填写表格,然后点击提交。数据被提交并发送到我的电子邮件,页面刷新回一个新的联系人表单(contact.php),在那里它应该转到my Thank.php页面 这是我的代码,电子邮件地址已更改。 提前感谢您的任
<?php
$errors = array();
$missing = array();
if (isset($_POST['send'])) {
$to = 'My Name <rawr@test.com>';
$subject = 'Feedback from Contact Form';
$expected = array('name', 'email', 'comments');
$required = array('name', 'email', 'comments');
$headers = "From: admin@website.com\r\n";
$headers .= "Content-Type: text/plain; charset=utf-8";
$authenticate = null;
if ($mailSent) {
header('Location: thanks.php');
exit();
}
}
include './navigation.php';
?>
<?php
//mail process **Don't Touch**
$suspect = false;
$pattern = '/Content-Type:|Bcc:|CC:/i';
function isSuspect ($val, $pattern, &$suspect) {
if (is_array($val)) {
foreach ($val as $item) {
isSuspect($item, $pattern, $suspect);
}
} else {
if (preg_match($pattern, $val)) {
$suspect = true;
}
}
}
isSuspect($_POST, $pattern, $suspect);
if (!$suspect) {
foreach ($_POST as $key => $value) {
$temp = is_array($value) ? $value : trim($value);
if (empty($temp) && in_array($key, $required)) {
$missing[] = $key;
$$key = '';
} elseif(in_array($key, $expected)) {
$$key = $temp;
}
}
}
if (!$suspect && !empty($email)) {
$validemail = filter_input(INPUT_POST, 'email', FILTER_VALIDATE_EMAIL);
if ($validemail) {
$headers .= "\r\nReply-to: $validemail";
} else {
$errors['email'] = true;
}
}
if (!$suspect && !$missing && !$errors) {
$message = '';
foreach ($expected as $item) {
if (isset($$item) && !empty($$item)) {
$val = $$item;
} else {
$val = 'Not selected';
}
if (is_array($val)) {
$val = implode(', ', $val);
}
$item = str_replace(array('_', '-'), ' ', $item);
$message .= ucfirst($item) . ": $val\r\n\r\n";
}
$message = wordwrap($message, 70);
$mailSent = mail($to, $subject, $message, $headers, $authenticate);
if (!$mailSent) {
$errors['mailfail'] = true;
}
}
//end mail process
?>
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title>Contact Carla <3</title>
<link href="/design.css" rel="stylesheet" type="text/css"/>
</head>
<body id="contact">
<div id="main">
<?php if (($_POST && $suspect) || ($_POST && isset($errors['mailfail']))) { ?>
<span class="warning">Sorry your mail could not be sent.</span>
<?php } elseif ($errors || $missing) { ?>
<span class="warning">Please fix the item(s) indicated.</span>
<?php } ?>
<form name="contact" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
<p>
<label for="name">Name:
<?php if ($missing && in_array('name', $missing)) { ?>
<span class="warning">Who am I responding to?</span>
<?php } ?>
</label>
<br>
<input type="text" name="name" id="name"
<?php
if ($errors || $missing) {
echo 'value="' . htmlentities($name, ENT_COMPAT, 'utf-8') . '"';
}
?>
>
</p>
<p>
<label for="email">Email:
<?php if ($missing && in_array('email', $missing)) { ?>
<span class="warning">How will I respond to you?</span>
<?php } elseif (isset($errors['email'])) { ?>
<span class="warning">Invalid email address</span>
<?php } ?>
</label>
<br>
<input type="text" name="email" id="email"
<?php
if ($errors || $missing) {
echo 'value="' . htmlentities($email, ENT_COMPAT, 'utf-8') . '"';
}
?>
>
</p>
<p>
<label for="comments">Comments:
<?php if ($missing && in_array('comments', $missing)) { ?>
<span class="warning">Please say something..</span>
<?php } ?>
</label>
<br>
<textarea rows="7" cols="70" name="comments" id="comments"><?php
if ($errors || $missing) {
echo htmlentities($comments, ENT_COMPAT, 'utf-8');
}
?></textarea>
</p>
<p>
<input type="submit" name="send" id="send" value="Send Comments">
</p>
</form>
</div>
</body>
<?php include './footer.php'; ?>
</html>
你的问题是这条线
if ($mailSent) {
header('Location: thanks.php');
exit();
}
您尚未将$mailssent设置在该语句上方的任何位置。因此,它永远不会达到这一点
一旦它通过了代码的这一部分,它就不会弹出来检查邮件是否已发送,除非您调用指向它的函数或类似函数
我希望这会让您走上正确的道路,如果您需要进一步的帮助,请告诉我。尝试在标题中将路径设置为绝对路径。从手动HTTP/1.1需要一个绝对URI作为参数到»位置:包括方案、主机名和绝对路径,但一些客户端接受相对URI。
在之前没有空格或新行。根据n099y的回答,在设置$mailssent
之前,在第一行之前没有空格或新行,把php看作是一本自上而下的书。将重定向条件更改为电子邮件实际发送后。