Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php验证不起作用。即使数据良好(已关闭)_Php_Validation - Fatal编程技术网

Php验证不起作用。即使数据良好(已关闭)

Php验证不起作用。即使数据良好(已关闭),php,validation,Php,Validation,对于我的网站,我想注册。在确认之前,一切都很顺利。因此,我必须在不同的文件(validation.php中的验证、registration.php中的注册和registrationForm.php中的注册表单)中完成这一切。在registration.php中,我有如下内容: 我的问题是,无论我输入了好的数据还是完全错误的数据,我的验证总是说它是错误的 以下是我的验证代码(validation.php): 在每个return语句中检查$allChecked,如果未设置,则返回true,而不是

对于我的网站,我想注册。在确认之前,一切都很顺利。因此,我必须在不同的文件(validation.php中的验证、registration.php中的注册和registrationForm.php中的注册表单)中完成这一切。在registration.php中,我有如下内容:


我的问题是,无论我输入了好的数据还是完全错误的数据,我的验证总是说它是错误的

以下是我的验证代码(validation.php):


在每个
return
语句中检查
$allChecked
,如果未设置,则返回true,而不是
$allChecked

return (isset($allChecked) ? $allChecked : true);

在函数
validateName
validateSurname
validatePassword
validateUsername
中,返回的是原始字符串,而不是验证结果。在
validateEmail
checkIfPasswordsAreMatching
中,您将返回$allChecked,但如果所有检查都通过,则不会使用值初始化它,因此将返回
null

您应该重写验证函数,使其看起来像这样

function validateName($string) {
    if (strlen($string) < 2) {
        $_SESSION['nameError'] = "Your name is too short. It has to be at least 2 characters long.";
        return false;
    }

    if (preg_match('[\W]', $string)) {
        $_SESSION['nameError'] = "Your name cannot contain any special character.";
        return false;
    }

    return true;
}
函数validateName($string){
if(strlen($string)<2){
$\u会话['nameError']=“您的名称太短。它必须至少有2个字符长。”;
返回false;
}
if(preg_匹配('[\W]',$string)){
$\u会话['nameError']=“您的名称不能包含任何特殊字符。”;
返回false;
}
返回true;
}

似乎您真的希望函数返回
布尔值
而不是
字符串
,而且,
$allChecked
在函数中不存在,因此它将抛出一个警告。我将$string更改为$allChecked,但现在即使我输入了正确的数据,它仍然会将我重定向回注册表。我不知道为什么我的错误没有显示出来,但我必须返回
$allChecked
,因为我必须检查验证是否正常。当验证过程中出现问题时,它会自动将
$allChecked
设置为False您正在返回它。。。如果失败了。这只是一个真/假指示符,如果验证没有失败,则不会像没有失败时那样返回真标志。由于作用域可变,在所有函数之前设置它不起作用。每个函数都无法“看到”它。更改后,它可以工作,但我得到的错误是,我的姓氏长度小于2个字符,即使键入10个字符。ok,我只是需要调整一些内容,现在它可以工作了。谢谢你的帮助;)如果答案解决了你的问题,考虑接受答案。然后返回此处,对勾号/复选标记执行相同操作,直到其变为绿色。这将通知社区,找到了解决方案。否则,其他人可能会认为问题仍然悬而未决,并可能希望发布(更多)答案。您将获得积分,其他人将被鼓励帮助您。我已经重写了函数,使它们看起来像上面的示例,但它仍然会在数据良好时将我重定向回注册表。我在会话中设置的错误没有显示出来。您可以编辑您的问题并将表单的html代码添加到问题中吗?