php - 我在复杂的 php 表单验证方面需要帮助
问题描述
我在表单验证中遇到问题,我得到的错误是这样的
致命错误:未捕获错误:C:\xampp\htdocs\LSR\signup.php:22 中不支持的操作数类型堆栈跟踪:#0 {main} 在第 22 行的 C:\xampp\htdocs\LSR\signup.php 中抛出
function check_empty_fields($required_fields_array){
$form_errors = array();
foreach($required_fields_array as $name_of_field){
if (!isset($_POST[$name_of_field]) || $_POST[$name_of_field] == NULL) {
$form_errors[] = $name_of_field . "Is a REQUIRED FIELD";
}
}
return $form_errors;
}
function check_min_length($fields_to_check_length){
$form_errors = array();
foreach($fields_to_check_length as $name_of_field => $minimum_length_required){
if(strlen(trim($_POST[$name_of_field])) < $minimum_length_required){
$form_errors[] = $name_of_field . "Is too short must be {$minimum_length_required} characters long";
}
}
return $form_errors;
}
function check_email($data){
$form_errors = array();
$key = "email";
if(array_key_exists($key, $data)){
if($_POST[$key] != null){
$key = filter_var($key, FILTER_SANITIZE_EMAIL);
if (filter_var($_POST[$key], FILTER_VALIDATE_EMAIL) === false) {
$form_errors[] = $key . "is not a valid email address";
}
}
}
return $form_errors;
}
function show_errors($form_errors_array){
$errors .= "<p><ul style='color: red;'>";
foreach($form_errors_array as $the_error){
$errors .="<li>{$the_error}</li>";
}
$errors .= "</ul></p>";
return $errors;
}
解决方案
试试http://sandbox.onlinephpfunctions.com/code/c36fd6eb9b3a8e555364d99dd90cd9281100c884
<?php
function check_empty_fields($required_fields_array)
{
if (!is_array($required_fields_array)) {
return array();
}
$form_errors = array();
foreach ($required_fields_array as $name_of_field) {
if (empty($_POST[$name_of_field])) {
$form_errors[] = "'$name_of_field' is a REQUIRED FIELD";
}
}
return $form_errors;
}
function check_min_length($fields_to_check_length)
{
if (!is_array($fields_to_check_length)) {
return array();
}
$form_errors = array();
foreach ($fields_to_check_length as $name_of_field => $minimum_length_required) {
if (isset($_POST[$name_of_field]) && strlen(trim($_POST[$name_of_field])) < $minimum_length_required) {
$form_errors[] ="'{$name_of_field}' is too short must be '{$minimum_length_required}' characters long";
}
}
return $form_errors;
}
function check_email($fields_to_check_email = array('email'))
{
if (!is_array($fields_to_check_email)) {
return array();
}
$form_errors = array();
foreach ($fields_to_check_email as $name_of_field) {
if (isset($_POST[$name_of_field]) && !filter_var($_POST[$name_of_field], FILTER_VALIDATE_EMAIL)) {
$form_errors[] = "'{$name_of_field}' is not a valid email address";
}
}
return $form_errors;
}
function show_errors($form_errors_array)
{
$errors = '';
$errors .= "<p><ul style='color: red;'>";
foreach ($form_errors_array as $the_error) {
$errors .= "<li>{$the_error}</li>";
}
$errors .= "</ul></p>";
return $errors;
}
// Tests...
$_POST = array(
'name' => 'Test',
'null_name' => null,
'empty_name' => '',
'email' => 'test@mail.com',
'invalid_email' => 'test@@mail.com',
);
$empty_errors = array();
$empty_errors = check_empty_fields(array('name', 'null_name', 'empty_name', 'undefined_name'));
echo 'Empty errors:', show_errors($empty_errors), "\n";
$min_length_errors = array();
$min_length_errors = check_min_length(array('name' => 4, 'empty_name' => 4));
echo 'Min length errors:', show_errors($min_length_errors), "\n";
$email_errors = array();
$email_errors = check_email(array('email', 'invalid_email'));
echo 'Email errors:', show_errors($email_errors), "\n";
推荐阅读
- chatbot - 与 slack 集成时,RASA 聊天机器人无法正常工作
- swift - 如何在 Swift 中演示僵尸对象?
- sql - 将列更新为虚拟列 oracle
- postgresql - Micronaut:使用 Flyway 在 micronaut-postgres-reactive 上运行数据库迁移(基于 reactive-pg-client)
- vba - MS Word 2016:使用 VBA 删除所有受保护的评论
- mysql - MySQL将时间转换为字符串(Grafana)
- python - 在桌面应用程序中正确集成 wsgiref.simple_server 和 Flask
- java - 如何在两个相同大小的集合中进行操作
- python - PYTHON:每个 x 值的多个 y 值的最佳拟合线
- sql - Microsoft Access:为每个公司选择一个电子邮件地址