我正在为客户设计电子邮件功能, 如果用户有一些错误,主要要求是将用户保持在同一页面上 在电子邮件中,错误应显示在同一页面上。
为此我创建了这个HTML(PHP)
<?php
session_start();
require_once '../helpers/security.php';
$errors = isset($_SESSION['errors']) ? $_SESSION['errors'] : [];
$fields = isset($_SESSION['fields']) ? $_SESSION['fields'] : [];
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>PHPmailer</title>
<link rel="stylesheet" href="../css/style.css">
</head>
<body>
<div class="contact">
<?php if(!empty($errors)): ?>
<div class="panel">
<ul>
<li><?php echo implode('</li><li>', $errors); ?></li>
</ul>
</div>
<?php endif; ?>
<form action="contact.php" method="POST">
<label>
Your Name*
<input type="text" name="name" autocomplete="off"<?php echo isset($fields['name']) ? 'value="'.e($fields['name']).'"' : '' ?>>
</label>
<label>
Your Email*
<input type="text" name="email" autocomplete="off"<?php echo isset($fields['email']) ? 'value="'.e($fields['email']).'"' : '' ?>>
</label>
<label>
Your Message*
<textarea name="message" rows="8"><?php echo isset($fields['message']) ? e($fields['message']) : '' ?></textarea>
</label>
<input type="submit" value="Send">
<p class="muted">* means a required field</p>
</form>
</div>
</body>
</html>
<?php
unset($_SESSION['errors']);
unset($_SESSION['fields']);
?>
这是我的PHP代码
<?php
session_start();
require_once '../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 '.$field.' field is required';
}
}
if(empty($errors)){
$m= new PHPMailer;
$m->isSMTP();
$m->SMTPAuth = true;
/*$m->SMTPDebug = 1; */
$m->Host = 'smtp.gmail.com';
$m->Username = 'mymail@gmail.com';
$m->Password = 'mypass';
$m->SMTPSecure = 'ssl';
$m->Port = 465;
$m->isHTML();
$m->Subject = 'Contact form submitted';
$m->Body = 'From: '.$fields['name'].' ('.$fields['email'].')<p>'.$fields['message'].'</p>';
$m->FromName = 'Contact';
/*$m->AddReplyTo($fields['email'], $fields['name']);*/
$m->AddAddress('mymail@gmail.com', 'My Name');
if($m->send()){
header('Location: http://facebook.com');
die();
}
else {
$errors[]= 'Error';
}
}
}
else{
$errors[] = 'something went wrong';
}
$_SESSION['errors'] = $errors;
$_SESSION['fields'] = $fields;
header('Location: http://google.com');
?>
我添加了额外的安全码
<?php
function e($string){
return htmlentities ($string, ENT_QUOTES, 'UTF-8', false);
}
?>
我已经尝试过这段代码,但它不起作用,它在索引页面上给出了“500”服务器错误以及contact.php页面 我已经检查过“;”和其他一般的PHP错误 我只是通过回显PHP中的变量来检查(PHP工作:P)
如果我删除了索引页面
? $_SESSION['errors'] : [];
? $_SESSION['fields'] : [];
来自
$errors = isset($_SESSION['errors']) ? $_SESSION['errors'] : [];
$fields = isset($_SESSION['fields']) ? $_SESSION['fields'] : [];
索引页面显示表单HTML,但是当我提交表单时,我在contact.php
上收到500服务器错误请帮我解决此代码,谢谢高级
答案 0 :(得分:1)
摆脱500内部服务器错误:
A)立即放置此代码段
ini_set('display_errors', 'on');
error_reporting(-1);
B)如果A无效,请尝试在其中创建一个.htaccess
文件,其中包含以下内容:
php_value error_reporting -1
php_flag display_errors on
C)如果B无效,那么您的apache \ httpd服务器没有启用AllowOverride。然后你应该改变php.ini(与B相同)
(一个人不应该在制作中完成以上所有操作。只在开发时使用它)
现在您应该能够看到错误,这可能是您的PHP版本不支持[]
。
尝试将所有[]
更改为array()
。