PHP 联系表 - 如何检查服务器端验证
PHP Contact Form - How to check server side validation
我正在学习 PHP 中的联系表单,并且正在尝试检查我的服务器端验证是否已移至另一个 php 文件。
在与表单相同的文件中使用验证工作正常,但我想将 PHP 验证逻辑分离到它自己的文件中并从表单中调用它。
例如,
<form action="validate.php">
当我将服务器端验证逻辑移动到它自己的文件中时,我提交了一个空表单,我得到了重定向到 validate2.php,没有错误和一个空白页面。
我是否遗漏了什么才能使它正常工作?我尝试在表单中使用 novalidate
关闭 HTML5 验证以检查服务器验证。
我该如何解决这个问题?
表格
<h1>Contact Form</h1>
<?php echo $result; ?>
<form action="validate.php" method="POST" novalidate>
<div class="form-group">
<label for="name">Name:</label>
<input type="text" class="form-control" name="name" required>
</div>
<div class="form-group">
<label for="email">Email:</label>
<input type="email" class="form-control" name="email" required>
</div>
<div class="form-group">
<label for="comment">Comment:</label>
<textarea class="form-control" name="comment" required></textarea>
</div>
<input type="submit" name="submit" class="btn btn-success btn-lg" value="Submit">
</form>
验证
<?php
$error = null;
if ($_POST["submit"]) {
$result = 'Form submitted';
if (!$_POST['name']) {
$error = "<br />Please enter your name";
}
if (!$_POST['email']) {
$error .= "<br />Please enter your email address";
}
if (!$_POST['comment']) {
$error .= "<br />Please enter a comment";
}
if ($_POST['email']!="" AND !filter_var($_POST['email'],
FILTER_VALIDATE_EMAIL)) {
$error .= "<br />Please enter a valid email address";
}
if ($error) {
$result = '<div class="alert alert-danger"><strong>There were error(s) in your form:</strong>'.$error.'</div>';
} else {
if (mail("example@gmail.com", "Comment from website!", "Name: ". $_POST['name']." Email: ".$_POST['email']." Comment: ".$_POST['comment'])) {
$result = '<div class="alert alert-success"><strong>Thank you!</strong> I\'ll be in touch.</div>';
} else {
$result = '<div class="alert alert-danger">Sorry, there was an error sending your message. Please try again later.</div>';
}
}
header('Location: contact_form.php');
}
if (isset($_POST["submit"]))
{
if (isset($_POST['name']) && $_POST['name']=="") {
$error = "<br />Please enter your name";
}
if (isset($_POST['email'])&& $_POST['email']=="") {
$error .= "<br />Please enter your email address";
}
if (isset($_POST['comment'])&& $_POST['comment']=="") {
$error .= "<br />Please enter a comment";
}
if (!empty($_POST['email']) AND !filter_var($_POST['email'],FILTER_VALIDATE_EMAIL)) {
$error .= "<br />Please enter a valid email address";
}
if ($error) {
$result = '<div class="alert alert-danger"><strong>There were error(s) in your form:</strong>'.$error.'</div>';
?>
<script>
window.location.href='';
</script>
<?php }else{}?>
这样使用
在如下会话中重定向分配消息之前
<?php
session_start();
$error = null;
if ($_POST["submit"]) {
$result = 'Form submitted';
if (!$_POST['name']) {
$error = "<br />Please enter your name";
}
if (!$_POST['email']) {
$error .= "<br />Please enter your email address";
}
if (!$_POST['comment']) {
$error .= "<br />Please enter a comment";
}
if ($_POST['email']!="" AND !filter_var($_POST['email'],
FILTER_VALIDATE_EMAIL)) {
$error .= "<br />Please enter a valid email address";
}
if ($error) {
$result = '<div class="alert alert-danger"><strong>There were error(s) in your form:</strong>'.$error.'</div>';
} else {
if (mail("example@gmail.com", "Comment from website!", "Name: ". $_POST['name']." Email: ".$_POST['email']." Comment: ".$_POST['comment'])) {
$result = '<div class="alert alert-success"><strong>Thank you!</strong> I\'ll be in touch.</div>';
} else {
$result = '<div class="alert alert-danger">Sorry, there was an error sending your message. Please try again later.</div>';
}
}
if(isset($result) && !empty($result)) {
$_SESSION['error'] = $result;
}
header('Location:contact_form.php');
exit;
}
?>
在contact_form.php
<?php
session_start();
if(isset($_SESSION['error']) && !empty($_SESSION['error'])) {
print_r($_SESSION['error'])
}
?>
在contact_form页的底部
<?php
if(isset($_SESSION['error']) && !empty($_SESSION['error'])) {
unset($_SESSION['error']);
}
?>
我正在学习 PHP 中的联系表单,并且正在尝试检查我的服务器端验证是否已移至另一个 php 文件。
在与表单相同的文件中使用验证工作正常,但我想将 PHP 验证逻辑分离到它自己的文件中并从表单中调用它。
例如,
<form action="validate.php">
当我将服务器端验证逻辑移动到它自己的文件中时,我提交了一个空表单,我得到了重定向到 validate2.php,没有错误和一个空白页面。
我是否遗漏了什么才能使它正常工作?我尝试在表单中使用 novalidate
关闭 HTML5 验证以检查服务器验证。
我该如何解决这个问题?
表格
<h1>Contact Form</h1>
<?php echo $result; ?>
<form action="validate.php" method="POST" novalidate>
<div class="form-group">
<label for="name">Name:</label>
<input type="text" class="form-control" name="name" required>
</div>
<div class="form-group">
<label for="email">Email:</label>
<input type="email" class="form-control" name="email" required>
</div>
<div class="form-group">
<label for="comment">Comment:</label>
<textarea class="form-control" name="comment" required></textarea>
</div>
<input type="submit" name="submit" class="btn btn-success btn-lg" value="Submit">
</form>
验证
<?php
$error = null;
if ($_POST["submit"]) {
$result = 'Form submitted';
if (!$_POST['name']) {
$error = "<br />Please enter your name";
}
if (!$_POST['email']) {
$error .= "<br />Please enter your email address";
}
if (!$_POST['comment']) {
$error .= "<br />Please enter a comment";
}
if ($_POST['email']!="" AND !filter_var($_POST['email'],
FILTER_VALIDATE_EMAIL)) {
$error .= "<br />Please enter a valid email address";
}
if ($error) {
$result = '<div class="alert alert-danger"><strong>There were error(s) in your form:</strong>'.$error.'</div>';
} else {
if (mail("example@gmail.com", "Comment from website!", "Name: ". $_POST['name']." Email: ".$_POST['email']." Comment: ".$_POST['comment'])) {
$result = '<div class="alert alert-success"><strong>Thank you!</strong> I\'ll be in touch.</div>';
} else {
$result = '<div class="alert alert-danger">Sorry, there was an error sending your message. Please try again later.</div>';
}
}
header('Location: contact_form.php');
}
if (isset($_POST["submit"]))
{
if (isset($_POST['name']) && $_POST['name']=="") {
$error = "<br />Please enter your name";
}
if (isset($_POST['email'])&& $_POST['email']=="") {
$error .= "<br />Please enter your email address";
}
if (isset($_POST['comment'])&& $_POST['comment']=="") {
$error .= "<br />Please enter a comment";
}
if (!empty($_POST['email']) AND !filter_var($_POST['email'],FILTER_VALIDATE_EMAIL)) {
$error .= "<br />Please enter a valid email address";
}
if ($error) {
$result = '<div class="alert alert-danger"><strong>There were error(s) in your form:</strong>'.$error.'</div>';
?>
<script>
window.location.href='';
</script>
<?php }else{}?>
这样使用
在如下会话中重定向分配消息之前
<?php
session_start();
$error = null;
if ($_POST["submit"]) {
$result = 'Form submitted';
if (!$_POST['name']) {
$error = "<br />Please enter your name";
}
if (!$_POST['email']) {
$error .= "<br />Please enter your email address";
}
if (!$_POST['comment']) {
$error .= "<br />Please enter a comment";
}
if ($_POST['email']!="" AND !filter_var($_POST['email'],
FILTER_VALIDATE_EMAIL)) {
$error .= "<br />Please enter a valid email address";
}
if ($error) {
$result = '<div class="alert alert-danger"><strong>There were error(s) in your form:</strong>'.$error.'</div>';
} else {
if (mail("example@gmail.com", "Comment from website!", "Name: ". $_POST['name']." Email: ".$_POST['email']." Comment: ".$_POST['comment'])) {
$result = '<div class="alert alert-success"><strong>Thank you!</strong> I\'ll be in touch.</div>';
} else {
$result = '<div class="alert alert-danger">Sorry, there was an error sending your message. Please try again later.</div>';
}
}
if(isset($result) && !empty($result)) {
$_SESSION['error'] = $result;
}
header('Location:contact_form.php');
exit;
}
?>
在contact_form.php
<?php
session_start();
if(isset($_SESSION['error']) && !empty($_SESSION['error'])) {
print_r($_SESSION['error'])
}
?>
在contact_form页的底部
<?php
if(isset($_SESSION['error']) && !empty($_SESSION['error'])) {
unset($_SESSION['error']);
}
?>