PHP验证每个$ array [$ key]是否为空

时间:2011-03-11 16:20:09

标签: php

所以,我有这个代码似乎正在正确地进行机械工作,如果表单中的一个或多个字段留空,则避免在表上写入,但回声和消息不能正常工作:

解决问题的方法: 我不相信这对任何人都有用,但只是为了记录,解决方案很简单:

$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.
}

正如我所说的,代码本身运行完美,但如果我只在表单上留下2个空字段,那么即使变量$ verifica设置为FALSE,echo $ _GET [$ campo]也会正常工作

提示:

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

../phcexport.php?nome=myname&morada=&codigopostal=postcode&email=@.com&vat=12312­3&telemovel=00800

并且忽略数组中的第二个值,代码将像魅力一样工作,我可以尝试尽可能多的组合,只要我将第二个字段留空,它将正常工作,给我错误“一些字段是空的“,在这种情况下,我知道它是,”morada“是空的,如果我在代码填写它说”它确定,所有填写“但”morada“应该是最后填写所以代码有效。有趣......(我很抱歉所有的文字来描述这个问题,我是葡萄牙语)

EDIT2:对于其余的代码,我需要使用$ campos [$ key],因此将数组的键属性设为基本。

4 个答案:

答案 0 :(得分:1)

而不是$_GET[$campo]=="",您可以使用empty函数:

empty($_GET[$campo])

这应解决与不同数据类型相关的所有问题。

你也可能遇到问题,因为你在两个不同的循环中使用了一个名为$campo的变量,尝试在while循环中更改变量名称以查看它是否更好。

答案 1 :(得分:1)

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

http://www.php.net/manual/en/types.comparisons.php#types.comparisions-loose

答案 2 :(得分:1)

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

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

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

答案 3 :(得分:1)

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

<?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();
}