2 回答
TA贡献1775条经验 获得超8个赞
您可以使用该$msg变量作为数组而不是字符串来保存特定字段的错误。
<?php
$msg = [];
if(filter_has_var(INPUT_POST,'submit')){
//...
// Check Required Fields
if(!empty($email) && !empty($name) && !empty($message)){
if(filter_var($email, FILTER_VALIDATE_EMAIL) === false ){
$msg['email'] = [
'msg' => 'Please use a valid email'
'class' => 'alert-danger'
];
} else {
//...
if(mail($toEmail, $subject, $body, $headers)){
// Email Sent
$msg['default'] = [
'msg' => 'Your email has been sent'
'class' => 'alert-success'
];
} else {
// Failed
$msg['default'] = [
'msg' => 'Your email was not sent'
'class' => 'alert-danger'
];
}
}
} else {
// Failed
$msg['default'] = [
'msg' => 'Please fill in all fields'
'class' => 'alert-danger'
];
}
}
?>
现在,在 HTML 中,您可以检查特定错误或消息是否存在,并将其显示在正确的位置;顶部的默认消息和电子邮件输入下的电子邮件错误:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="style.css">
<title>Contact US</title>
</head>
<body>
<nav class="navbar">
<div class="container">
<div class="navbar-header">
<a href="index.php" class="navbar-brand">My Website</a>
</div>
</div>
</nav>
<div class="container">
<!-- HERE -->
<?php if(isset($msg['default'])): ?>
<div class="alert <?php echo $msg['default']['class']; ?>"><?php echo $msg['default']['msg']?></div>
<?php endif; ?>
<form action="<?php echo $_SERVER['PHP_SELF'];?>" method="post">
<!-- ... -->
<div class="form-group">
<label for="name">Email</label>
<input type="text" name="email" class="form-control" value="<?php echo isset($_POST['email']) ? $email : ''; ?>">
<!-- AND HERE -->
<?php if(isset($msg['email'])): ?>
<div class="alert <?php echo $msg['email']['class']; ?>"><?php echo $msg['email']['msg']?></div>
<?php endif; ?>
</div>
<!-- ... -->
</form>
</div>
</body>
</html>
实际上,您也可以对您想要的任何其他输入执行相同的操作。
TA贡献1871条经验 获得超8个赞
您可以将验证警告存储在数组类型变量中,而不是字符串中。
例如,这一行:
$msg = '请使用有效的电子邮件';
你可以这样做:
$msg['email'] = 'Please use a valid email';
另外,我认为您想验证每个必填字段是否都存在单独的if检查,而不是全部一起存在,例如:
if(!empty($email) && !empty($name) && !empty($message)){
您可以实施为:
if (empty($email) || filter_var($email, FILTER_VALIDATE_EMAIL) === false) {
$msg['email'] = 'Please use a valid email';
}
if (empty($name)) {
$msg['name'] = 'Please enter a name';
}
if (empty($message)) {
$msg['message'] = 'Please enter a message';
}
然后,在 HTML 部分的每个相关输入字段下方,您可以添加:
<div class="form-group">
<label for="name">Name</label>
<input type="text" name="name" class="form-control" value="<?php echo isset($_POST['name']) ? $name : ''; ?>">
<?php if(isset($msg['name'])): ?>
<p> <?php echo $msg['name']; ?>
<?php endif; ?>
</div>
然而,总的来说,我不得不说这是一种非常老式的 PHP 使用方式,您可以将逻辑代码与显示代码混合在一起。
当你掌握了它的窍门后,也许你会想研究 Laravel、Symfony 甚至 CodeIgniter 是如何工作的,在那里你可以使用所谓的 MVC 将显示与逻辑分开。
此外,您最终可以使用像 Blade 或类似的模板引擎来回显您的变量。
- 2 回答
- 0 关注
- 130 浏览
添加回答
举报