Contact.php 发送电子邮件但不重定向
Contact.php send email but doesn't redirect
我正在为我的音乐项目网站制作联系表。
联系表似乎工作正常。如果我输入每个字段,它都会发送电子邮件(我在我的 gmail 帐户上没问题),如果我没有输入每个字段,它会给出错误消息。
但奇怪的是,在我点击发送后,我得到一个空白页面(地址:MySiteRoot/contact.php)并且它没有重定向。
如果我然后单击浏览器 "Go Back" 按钮,我会收到正确的 "error" 消息,无论是错误还是已发送的消息。
为什么没有重定向?有什么想法吗?
我试过添加
exit();
在
之后
header('Location: /index.php');
但它并没有做出任何改变。
我的网站根文件夹中有 index.php 和联系人 php。
这是我的 CONTACT.PHP
的代码
<?php
session_start();
require_once 'libs/phpmailer/PHPMailerAutoload.php';
$errors = [];
if(isset($_POST['name'], $_POST['email'], $_POST['message'])) {
$fields = [
'name' => $_POST['name'],
'email' => $_POST['email'],
'message' => $_POST['message']
];
foreach($fields as $field => $data) {
if(empty($data)) {
$errors[] = 'The ' . '<b>' . $field . '</b>' . ' field is required.';
}
}
if(empty($errors)) {
$m = new PHPMailer;
$m -> isSMTP();
$m -> SMTPAuth = true;
/*$m -> SMTPDebug = 1;*/
$m -> Host = 'smtp.gmail.com';
$m -> Username = ''; /* TOOK THEM OUT HERE ON THE POST ONLY */
$m -> Password = ''; /* TOOK THEM OUT HERE ON THE POST ONLY */
$m -> SMTPSecure = 'ssl';
$m -> SMTPKeepAlive = true;
$m -> Port = 465;
$m -> isHTML(true);
$m -> Subject = '4Elements Message';
$m -> Body = 'From: ' . $fields['name'] . ' (' . $fields['email'] . ')<p>' . $fields['message'] . '</p>';
$m -> FromName = '4Elements Contact';
$m -> AddAddress('anatis@gmail.com', 'Anatis');
if($m -> Send()) {
$errors[] = 'Thanks! Your message was sent!';
header('Location: /index.php');
} else {
$errors[] = 'Sorry, could not send email. Please try again later.';
}
}
} else {
$errors[] = 'Something went wrong.';
}
$_SESSION['errors'] = $errors;
$_SESSION['fields'] = $fields;
header('Location: /index.php');
在我的 INDEX.PHP 开头:
<?php
session_start();
require_once 'security.php';
$errors = isset($_SESSION['errors']) ? $_SESSION['errors'] : [];
$fields = isset($_SESSION['fields']) ? $_SESSION['fields'] : [];
?>
<!DOCTYPE HTML>
... THEN COMES SOME HTML CONTENT
稍后是表格:
<?php if(!empty($errors)): ?>
<div class="panel">
<ul><li><?php echo implode('</li><li>', $errors); ?></li></ul>
</div> <!-- end of .panel -->
<?php endif; ?>
<form action="contact.php" method="post">
<label>
<input type="text" name="name" autocomplete="off" placeholder="Name" <?php echo isset($fields['name']) ? ' value="' . e($fields['name']) . '"' : ''?>>
</label>
<label>
<input type="email" name="email" autocomplete="off" placeholder="Email" <?php echo isset($fields['email']) ? ' value="' . e($fields['email']) . '"' : ''?>>
</label>
<label>
<textarea name="message" rows="10" placeholder="Message"><?php echo isset($fields['message']) ? e($fields['message']) : ''?></textarea>
</label>
<input id="submitbutton" type="submit" value="send">
</form>
然后在 index.php 结束时我还有:
<?php
unset($_SESSION['errors']);
unset($_SESSION['fields']);
?>
我正在我的本地服务器上工作,使用 MAMP 运行 PHP 5.6.2
对正在发生的事情有什么想法吗?谢谢!
尝试删除 header('Location: /index.php');在 m->Send() 内部,并让脚本末尾的唯一一个。
甚至在开始时将 $errors = [] 替换为 $errors = Array()。
您是否尝试过使用 javascript 而不是 header('Location: /index.php');
echo '<script>window.location.href="/index.php";</script>'
此外,您是否检查过任何警告或错误日志文件。如果您收到此类错误消息 "Cannot modify header information - headers already sent",请尝试此 link How to fix "Headers already sent" error in PHP
希望对你有用。
我正在为我的音乐项目网站制作联系表。
联系表似乎工作正常。如果我输入每个字段,它都会发送电子邮件(我在我的 gmail 帐户上没问题),如果我没有输入每个字段,它会给出错误消息。 但奇怪的是,在我点击发送后,我得到一个空白页面(地址:MySiteRoot/contact.php)并且它没有重定向。 如果我然后单击浏览器 "Go Back" 按钮,我会收到正确的 "error" 消息,无论是错误还是已发送的消息。
为什么没有重定向?有什么想法吗?
我试过添加
exit();
在
之后header('Location: /index.php');
但它并没有做出任何改变。
我的网站根文件夹中有 index.php 和联系人 php。
这是我的 CONTACT.PHP
的代码<?php
session_start();
require_once 'libs/phpmailer/PHPMailerAutoload.php';
$errors = [];
if(isset($_POST['name'], $_POST['email'], $_POST['message'])) {
$fields = [
'name' => $_POST['name'],
'email' => $_POST['email'],
'message' => $_POST['message']
];
foreach($fields as $field => $data) {
if(empty($data)) {
$errors[] = 'The ' . '<b>' . $field . '</b>' . ' field is required.';
}
}
if(empty($errors)) {
$m = new PHPMailer;
$m -> isSMTP();
$m -> SMTPAuth = true;
/*$m -> SMTPDebug = 1;*/
$m -> Host = 'smtp.gmail.com';
$m -> Username = ''; /* TOOK THEM OUT HERE ON THE POST ONLY */
$m -> Password = ''; /* TOOK THEM OUT HERE ON THE POST ONLY */
$m -> SMTPSecure = 'ssl';
$m -> SMTPKeepAlive = true;
$m -> Port = 465;
$m -> isHTML(true);
$m -> Subject = '4Elements Message';
$m -> Body = 'From: ' . $fields['name'] . ' (' . $fields['email'] . ')<p>' . $fields['message'] . '</p>';
$m -> FromName = '4Elements Contact';
$m -> AddAddress('anatis@gmail.com', 'Anatis');
if($m -> Send()) {
$errors[] = 'Thanks! Your message was sent!';
header('Location: /index.php');
} else {
$errors[] = 'Sorry, could not send email. Please try again later.';
}
}
} else {
$errors[] = 'Something went wrong.';
}
$_SESSION['errors'] = $errors;
$_SESSION['fields'] = $fields;
header('Location: /index.php');
在我的 INDEX.PHP 开头:
<?php
session_start();
require_once 'security.php';
$errors = isset($_SESSION['errors']) ? $_SESSION['errors'] : [];
$fields = isset($_SESSION['fields']) ? $_SESSION['fields'] : [];
?>
<!DOCTYPE HTML>
... THEN COMES SOME HTML CONTENT
稍后是表格:
<?php if(!empty($errors)): ?>
<div class="panel">
<ul><li><?php echo implode('</li><li>', $errors); ?></li></ul>
</div> <!-- end of .panel -->
<?php endif; ?>
<form action="contact.php" method="post">
<label>
<input type="text" name="name" autocomplete="off" placeholder="Name" <?php echo isset($fields['name']) ? ' value="' . e($fields['name']) . '"' : ''?>>
</label>
<label>
<input type="email" name="email" autocomplete="off" placeholder="Email" <?php echo isset($fields['email']) ? ' value="' . e($fields['email']) . '"' : ''?>>
</label>
<label>
<textarea name="message" rows="10" placeholder="Message"><?php echo isset($fields['message']) ? e($fields['message']) : ''?></textarea>
</label>
<input id="submitbutton" type="submit" value="send">
</form>
然后在 index.php 结束时我还有:
<?php
unset($_SESSION['errors']);
unset($_SESSION['fields']);
?>
我正在我的本地服务器上工作,使用 MAMP 运行 PHP 5.6.2
对正在发生的事情有什么想法吗?谢谢!
尝试删除 header('Location: /index.php');在 m->Send() 内部,并让脚本末尾的唯一一个。 甚至在开始时将 $errors = [] 替换为 $errors = Array()。
您是否尝试过使用 javascript 而不是 header('Location: /index.php');
echo '<script>window.location.href="/index.php";</script>'
此外,您是否检查过任何警告或错误日志文件。如果您收到此类错误消息 "Cannot modify header information - headers already sent",请尝试此 link How to fix "Headers already sent" error in PHP
希望对你有用。