【问题标题】:Trying to check $_GET for empty parameters尝试检查 $_GET 是否有空参数
【发布时间】:2012-08-30 23:48:56
【问题描述】:

我正在编写一个脚本,该脚本会提取几个 $_GET 变量,然后在脚本中使用这些变量来计算报价等。

我的噩梦只是能够确定它们中的任何一个是否没有值,例如 ?var1=500&var2=&var3=Yes 而 var2 是那里的罪魁祸首。

根据是否所有的 $_GET 变量都有值,我会相应地采取不同的行动。

我研究并提出了这个选项:

<?php 
foreach($_GET as $name => $value) {
    if ($value == "") {
        $proceed = 0;
    } else {
        $proceed = 1;
    }
}
?>

我现在正在使用 $proceed 来回显一段简单的文本,仅用于测试目的。

这不起作用,我考虑过 issetempty 但我相信这两个选项在这种情况下都没有用。我在许多资料中读到,没有给定值的 $_GET 参数默认为 "',所以我很困惑为什么这不起作用。

这里不能使用empty,因为有时参数会设置为0。

不用说,我已经打印了$_GET的内容,得到了满意的结果,所以数据都很好。

非常感谢任何帮助。

【问题讨论】:

  • foreach 与 $_GET -> 坏主意。
  • @Mahn 为什么?我看不出有什么好的理由……
  • 好吧,如果我查询一个在 $_GET 上具有数十万个参数的 foreach 的页面怎么办?
  • 不可能@Mahn 对于 1,URL 只能这么长。第二:当前PHP版本有max_input_vars防止哈希冲突。

标签: php


【解决方案1】:

缺少参数不会出现在$_GET 中。假设查询字符串如下所示:

index.php?page=5

如果您期望 id 参数,它不会自动显示在 $_GET 中。您只需要在使用它们时使用isset(并针对空字符串)进行检查 - 而不是先发制人。那是行不通的。

【讨论】:

    【解决方案2】:

    这样的事情怎么样?

    <?php 
    $expectedVars = array('var1', 'var2');
    
    foreach($expectedVars as $key => $val) {
        if($_GET[$val] == "") {
            $proceed = 0;
        } else {
            $proceed = 1;
        }
    }
    ?>
    

    【讨论】:

    • 看起来很有希望,会试一试!
    【解决方案3】:

    如果我正确地阅读了你的问题,你的样子:

    检查要设置的参数是否有值,但为了方便也可以使用foreach循环$_GET。

    也许,制作一个您期望的参数数组,然后循环遍历它,并检查 $_GET 是否也包含相同的键。

    <?php 
    $allowed = array('var1','var2','var3');
    $error = array();
    
    foreach($allowed as $key) {
        if(array_key_exists($key,$_GET)) {
            //Validate, value must contain t least 1 len
            if(strlen($_GET[$key]) >= 1){
                $$key = $_GET[$key];
            }else{
                //Assign an error if param has a blank value
                $error[$key] = $key." parameter must contain a value";
            }
    
        }else{
            //Assign an error if params not been passed to the url
            $error[$key] = $key." parameter not set";
        }
    }
    
    
    if(!empty($error)){
        //A Params missing or has no value, dont continue
        echo 'All parameters required!<br />';
        foreach($error as $value){
            echo '* '.$value.'<br />';
        }
    }else{
        //No errors do something
        echo 'var1 is set: '.$var1;
        echo 'var2 is set: '.$var2;
        echo 'var3 is set: '.$var3;
    }
    ?>
    

    【讨论】:

    • 基本上我想检查是否有任何参数是空字符串。表单传递数据的方式确保参数在字符串中,无论它是否已填写:但是许多参数是强制性的,因此对于那些特定参数,我想检查是否任何相等的 ""。
    【解决方案4】:

    您可以使用以下代码定义变量列表并将其设置为通过 $_GET 传递的值(如果存在),或者如果不存在或在查询字符串中没有值则设置为空字符串:

    $getvars = array();
    $expectedvars = array(                    // define variables to be set from $_GET
      'var1', 'var2', 'var3', 'var4', 'var5',
    );
    
    foreach($_GET as $key => $value) {        // store all $_GET variables present
      $getvars[$key] = $value;                // in an associative array
    }
    
    foreach($expectedvars as $variable) {          // now create all vaariables,
      ${$variable} = (isset($getvars[$variable]))  // if value was passed in url
        ? $getvars[$variable]                      // then set to that value
        : '';                                      // otherwise set as empty string
    }
    

    这将创建具有适当值的变量 $var1、$var2、$var3、$var4 和 $var5。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-05-27
      • 2013-05-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-05
      • 2020-08-18
      • 2014-07-04
      相关资源
      最近更新 更多