php - 如何在 PHP 中修复表单验证
问题描述
我正在尝试构建一个使用 ajax 和 PHP 发送邮件的联系表单。ajax,并且电子邮件提交工作正常,但 PHP 验证不起作用,我在服务器的邮箱中收到未过滤的用户凭据,这是代码,请帮助 php 验证不起作用,用户在表单中输入的任何数据是未过滤并按原样发送。
<?php
session_start();
include_once('includes/db_connect.php');
if(isset($_POST['name']) && $_POST['name'] && isset($_POST['phone']) && $_POST['phone'] && isset($_POST['email']) && $_POST['email'] && isset($_POST['message']) && $_POST['message']){
$name = mysqli_real_escape_string($con, $_POST['name']);
$phone = mysqli_real_escape_string($con, $_POST['phone']);
$email = mysqli_real_escape_string($con, $_POST['email']);
$message = mysqli_real_escape_string($con, $_POST['message']);
if(( !preg_match ("/^[a-zA-Z\s]+$/",$name))||(strlen($name) < 3)){
echo json_encode(array('success' => 'invalid name'));
}else{
$name_error = "";
}
if((!is_numeric($phone))||(strlen($phone) !=12)){
echo json_encode(array('success' => 'invalid phone'));
}else{
$phone_error = "";
}
if(!filter_var($email,FILTER_VALIDATE_EMAIL)){
echo json_encode(array('success' => 'invalid email'));
}else{
$email_error = "";
}
if(strlen($message)<10){
echo json_encode(array('success' => 'invalid message'));
}else{
$message_error = "";
}
if(empty($name_error) && empty($phone_error) && empty($email_error)&& empty($message_error)){
error_reporting(E_ALL ^ E_NOTICE ^ E_DEPRECATED ^ E_STRICT);
ini_set("include_path", '/home/extensiv/php:' . ini_get("include_path") );
require_once "Mail.php";
$host = "ssl://mail.mywebsite.com";
$username = "support@mywebsite.com";
$password = "mypassword";
$port = "465";
$to = "support@mywebsite.com";
$email_from = $email;
$email_subject = "Is it working?: " ;
$email_body = $message.$phone ;
$email_address = "support@mywebsite.com";
$headers = array ('From' => $email_from, 'To' => $to, 'Subject' => $email_subject, 'Reply-To' => $email_address);
$smtp = Mail::factory('smtp', array ('host' => $host, 'port' => $port, 'auth' => true, 'username' => $username, 'password' => $password));
$mail = $smtp->send($to, $headers, $email_body);
if (PEAR::isError($mail)) {
echo json_encode(array('success' => 'submit error'));
} else {
echo json_encode(array('success' => 'submit success'));
}
}else{
echo json_encode(array('success' => 'invalid credentials'));
}
}else{
echo json_encode(array('success'=>'No data received'));
}
?>
解决方案
您永远不会将 $name_error、$phone_error、$email_error 或 $message_error 设置为任何值。您的条件将始终为真,因为 $name_error (和其他)都将为空。空时为空返回真。
要修复,请将 $name_error(和其他)设置为错误字符串,然后从字符串中回显它。
if(( !preg_match ("/^[a-zA-Z\s]+$/",$name))||(strlen($name) < 3)){
$name_error = json_encode(array('success' => 'invalid name'));
echo $name_error;
}else{
$name_error = "";
}
我还建议在您的第一个错误之后添加一个 die() 。否则,您最终可能会得到一个包含多个 json 对象的返回有效负载。
推荐阅读
- javascript - 使用 mongodb-memory-server 和 mongoose 创建内存数据库
- firebase - 添加目标后,Firebase 部署时出现 404 错误
- python - llvmlite 中的有符号/无符号 int 类型
- reactjs - ReactJS:处理多个复选框
- angular - 快速重复 HTTP 调用的 Angular/RXJS 数据问题
- django - 如何使用 django rest 框架正确保存和验证对象
- r - 使用列名列表从矩阵中删除列
- c++ - asm 使用 std::string 调用函数
- c# - AngularJS API 调用远程 API 返回 ERR_CERT_AUTHORITY_INVALID - 显示不正确的证书路径
- java - 在使用 kit 命令进行 minecraft bukkit java 开发时需要帮助