Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.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验证是否每个$array[$key]都不是空的_Php - Fatal编程技术网

PHP验证是否每个$array[$key]都不是空的

PHP验证是否每个$array[$key]都不是空的,php,Php,因此,我有一段代码,它似乎正确地执行了机械工作,避免了在表单中的一个或多个字段为空时在表上写入,但回音和消息没有按预期工作: 问题的解决办法: 我不认为这对任何人都有用,但请记住,解决方案很简单: $campos = array('nome','morada','email','telemovel','codigopostal','vat'); foreach ($campos as $key => $campo) { $campos[$key] = $_GET[$campo];

因此,我有一段代码,它似乎正确地执行了机械工作,避免了在表单中的一个或多个字段为空时在表上写入,但回音和消息没有按预期工作:

问题的解决办法: 我不认为这对任何人都有用,但请记住,解决方案很简单:

$campos = array('nome','morada','email','telemovel','codigopostal','vat');
foreach ($campos as $key => $campo) {
    $campos[$key] = $_GET[$campo];
    if(!isset($_GET[$campo])|| empty($_GET[$campo])){
                header("Location: ../index.php?erro=".$campo);
                $verifica=FALSE;
                die();
            }else{
                $verifica=TRUE;
            }
}
这会给我带来一些问题,不是我真正想要的,而是解决了我遇到的逻辑问题。谢谢大家

$campos = array('nome','morada','email','telemovel','codigopostal','vat');
foreach ($campos as $key => $campo) {
    $campos[$key] = ($_GET[$campo]);
    while(list($key, $campo)= each($campos))
            if(!isset($_GET[$campo])|| $_GET[$campo]==""){
                echo("não preencheu um dos campos");
                $verifica = FALSE;
                die();
            }else{
        echo $_GET[$campo]." \r\n";}
        $verifica = TRUE;
}

if($verifica==TRUE){
some irrelevant code.
}
正如我所说的,代码本身工作得非常完美,但是如果我在表单上只留下两个空字段,即使变量$verifica设置为FALSE,echo$_GET[$campo]也会工作

提示:

其中一个字段使代码失败,第二个字段是,如果我这样做:

../phcexport.php?nome=myname&morada=&codigopostal=postcode&email=@.com&vat=12312­3&telemovel=00800
忽略数组中的第二个值,代码将像一个符咒一样工作,我可以尝试尽可能多的组合,只要我将第二个字段留空,它将正常工作,给我一个错误“某些字段为空”,在这种情况下,我知道它是空的,“morada”为空,如果我填充代码,代码会说“可以,全部填充”,但“morada”应该是最后一个被填写的,这样代码就可以工作了。有趣的是…(我对所有描述这个问题的文字感到抱歉,我是葡萄牙人)


EDIT2:对于其余的代码,我需要使用$campos[$key],因此为数组指定一个键非常重要。

您可以使用以下函数,而不是执行
$\u GET[$campo]==“”

empty($_GET[$campo])
这应该解决与不同数据类型相关的所有问题


由于在两个不同的循环中使用了名为
$campo
的变量,您也可能会遇到问题。请尝试更改while循环中的变量名称,以查看它是否工作得更好。

而不是执行
$\u GET[$campo]==“”
,您可以使用以下函数:

empty($_GET[$campo])
这应该解决与不同数据类型相关的所有问题


由于在两个不同的循环中使用了名为
$campo
的变量,您可能也遇到了问题。请尝试更改while循环中的变量名称,以查看其是否工作得更好。

检查导致错误行为的$campo的确切值,然后查阅此表以确保您使用的com类型正确型坯


检查导致错误行为的$campo的确切值,然后查阅此表以确保使用了正确的比较方式


问题在于您在
的else
中重置了
$verifica
。因此,无论您是否将其设置为
FALSE
,每次迭代的最后一次都将决定结果。但您可以“简化”整个方法,以:

$verify = array_search(0, array_map("strlen", $campos)) === false;

这只是检查每个数组项的字符串长度。如果它们都不是
0
,则表达式将为
$verify

返回
true
;问题是您在
else
中重置了
$verifyca
。因此,无论您将其设置一次为
FALSE
,每次迭代的最后一次都将返回确定结果。但您可以“简化”整个方法:

$verify = array_search(0, array_map("strlen", $campos)) === false;

这只是检查每个数组项的字符串长度。如果它们都不是
0
,则表达式将为
$verify
;返回
true

尝试以下解决方案,空字段无法通过测试

<?php
$campos = array('nome', 'morada', 'email', 'telemovel', 'codigopostal', 'vat');
$verifica = TRUE;
foreach ($campos as $campo) {
    if (!isset($_GET[$campo]) || empty($_GET[$campo])) {
        echo "não preencheu um dos campos" ;
        $verifica = FALSE;
        break;
    } else {
        echo $_GET[$campo] ."\r\n";
    }
}

if ($verifica == TRUE) {
//  some irrelevant code.
} else {
    die();
}

尝试以下解决方案,空字段无法通过测试

<?php
$campos = array('nome', 'morada', 'email', 'telemovel', 'codigopostal', 'vat');
$verifica = TRUE;
foreach ($campos as $campo) {
    if (!isset($_GET[$campo]) || empty($_GET[$campo])) {
        echo "não preencheu um dos campos" ;
        $verifica = FALSE;
        break;
    } else {
        echo $_GET[$campo] ."\r\n";
    }
}

if ($verifica == TRUE) {
//  some irrelevant code.
} else {
    die();
}

非常感谢您的回答,Krtek,我现在注意到一些非常奇怪的事情,唯一导致故障的字段是第二个字段,”morada说“,当此字段留空时,代码按其应有的方式工作,如果我在其上输入一些值,它会使回声以一种奇怪的方式工作。我将尝试更改您提到的变量,brb。非常感谢你。非常感谢你的回答Krtek,我现在注意到一些非常奇怪的事情,唯一导致故障的字段是第二个字段“morada”,当这个字段为空时,代码按它应该的方式工作,如果我在上面输入一些值,它会使回声以一种奇怪的方式工作。我将尝试更改您提到的变量,brb。非常感谢。给我带来困难的$campo的确切值是“morada”,它使代码无法正常工作。给我带来困难的$campo的确切值是“morada”,它使代码无法正常工作。我将尝试您的解决方案,mario,非常感谢。你能告诉我为什么数组中的第二个值会导致这个问题吗?我正在学习中,如果您能告诉我,如果我忽略此字段并将其留空,代码将起作用:../phcexport.php?nome=myname&morada=&codigoppostal=postcode&email=@.com&vat=123123&telemovel=00800@Souza当前位置我不相信这是第二个条目。再看一眼,实际上您正在使用两个迭代器。
foreach
while=each()冲突。这肯定是一些逻辑错误,而不是数组值的问题。不,当然不是字段或数组,但这只是一个提示,可以找到问题的根源:P。我会看一看,可能是你说的一些逻辑错误。我会尝试你的解决方案mario,非常感谢。你能告诉我为什么数组中的第二个值会导致这个问题吗?我正在学习中,如果您能告诉我,如果我忽略此字段并将其留空,代码将起作用:../phcexport.php?nome=myname&morada=&codigoppostal=postcode&email=@.com&vat=123123&telemovel=00800@Souza当前位置我不相信这是第二个条目。再看一眼,实际上您正在使用两个迭代器。
foreach
while=each()冲突。这肯定是一些逻辑错误,而不是数组值的问题。不,当然不是字段或数组,但这只是一个提示,可以找到问题的根源:P。我来看看,可能是你说的一些逻辑错误。T