代码之家  ›  专栏  ›  技术社区  ›  user13286

PHP-从$u POST表单提交创建变量的正确方法,以避免未定义的索引

  •  1
  • user13286  · 技术社区  · 7 年前

    我正在用PHP创建一个联系人表单。在我用来处理电子邮件的PHP脚本中,我根据提交的表单字段定义变量。所有这些表单字段都是必需的,因此它们将始终存在。目前我正在设置如下变量:

    $fName = $_POST['first-name'];
    

    这很好,但是如果我打开了错误报告,我最终会 Notice: Undefined index: first-name

    如果我像这样设置变量,我不会得到未定义的索引:

    if (isset($_POST['first-name'])) {
        $fName = $_POST['first-name'];
    }
    

    但这样做感觉不对,因为我基本上为每个输入添加了两行代码。这是唯一能避免这种情况的方法吗 Undefined index 错误定义这些变量的正确方法是什么,尤其是知道它们都是必填字段,所以它们总是“设置”的

    2 回复  |  直到 7 年前
        1
  •  4
  •   Mohd Abdul Mujib    7 年前

    但这感觉不对。。。

    是的,男人要做男人该做的事。

    你所能做的就是把它简化为

    $fName = isset($_POST['first-name'])? $_POST['first-name'] : '';
    

    如果您正在使用 PHP > 7.x.x null coalescing operator 结果同上 构建时特别考虑了这个场景。

    所以我这么说 获胜

    $fname = $_POST['first-name'] ?? '';
    
        2
  •  1
  •   AbraCadaver    7 年前

    根据输入的数量,使用三元数仍然会很乏味。有很多方法可以做到这一点。一种方法是定义必填字段并检查所有字段是否已设置:

    $required = array('first-name', 'last-name');
    
    if(array_diff($required, array_keys($_POST)) {
        //all required fields not set, die or redirect or something
    }
    // then use $_POST vars as normal
    

    if(array_diff($required, array_keys(array_filter($_POST))) {
        //all required fields not set or empty, die or redirect or something
    }
    // then use $_POST vars as normal
    
    推荐文章