【问题标题】:Replace empty form fields with text用文本替换空的表单域
【发布时间】:2012-08-10 00:45:45
【问题描述】:

我有一个用户填写的表格,其内容被发送到 dompdf 进行处理。如果用户选择来填写某个字段,我希望在整个表单中的任何空字段的结果 pdf 上通过“未输入”来反映这一点。

我正在尝试通过执行以下操作在将字段发送到 dompdf 进行处理之前更新它们:

<?php

foreach ($_POST as $key => $value)
    {
        if(empty($value))
            {
                $_POST[$key] = "Not entered";
            }
    }
?>

但它不起作用。它只是传递空的 $value(s)。

所以我的问题是:如何循环遍历 $_POST 数组,如果 $value 为空,则将 $key=>$value 对的 $value 替换为“未输入”?

感谢您的帮助。

【问题讨论】:

  • 打印到屏幕$value 看看为什么empty($value) 没有返回true。

标签: php arrays forms


【解决方案1】:

Isset() 检查变量的值是否包括 ( False 、 0 或空字符串) ,但不包括 NULL。 如果 var 存在,则返回 TRUE;否则为 FALSE。

另一方面,empty() 函数检查变量是否具有空值、空字符串、0、NULL 或 False。如果 var 具有非空且非零值,则返回 FALSE。

<?php

    foreach ($_POST as $key => $value)
        {
            if(!isset($value))
                {
                    $_POST[$key] = "Not entered";
                }
        }
    ?>

【讨论】:

    【解决方案2】:

    未提交空元素,这就是您在 PHP 代码中看不到任何内容的原因。

    另一种方法是在提交表单时使用 Javascript 注入这些值。你可以这样做:

    <form onsubmit="return yourjsfunction();" />
    

    JS 函数可以收集所有未输入任何值的输入元素,并将其值设置为“未输入”。然后它会调用form.submit();

    【讨论】:

      【解决方案3】:

      空字段不会在 POST 中提交。

      vardump($_POST) 以查看提交了哪些字段。因此,您可以使用isset 测试一个空字段。如果没有设置变量,那么你可以对它做任何你想做的事情。

      if(!isset($_POST['foo'])) {
          // the field foo was empty
      }
      

      【讨论】:

        【解决方案4】:

        试试

        <?php
        
        foreach($_POST as &$value){
          if (empty($value)) $value = "Not entered";
        }
        
        ?>
        

        foreach 中将&amp; 添加到$value 允许您修改内联值 http://php.net/manual/en/control-structures.foreach.php

        但是,如果您使用的是 HTML 表单(表单标签/输入元素),那么表单将仅提交已填写元素的数据

        你可能想在 PHP 中研究一个 javascript 解决方案或类似的东西

        <?php
        
        if (empty($_POST['name'])) $_POST['name'] = "Not entered";
        
        ?>
        

        请注意,密钥必须手动提供,因为它们实际上不是请求的一部分

        如果您有大量不应为空的键,请尝试类似

        <?php
        
        $notempty = Array('name', 'address', 'email');
        foreach($notempty as $v){
          if(empty($_POST[$v])) $_POST[$v] = 'Not entered';
        }
        
        ?>
        

        这样,如果姓名、地址或电子邮件中的任何一个为空,它们将被填写为“未输入”

        【讨论】:

        • 我不知道没有传递空字段 - 哎呀!
        • 将来可以通过检查来自浏览器的传出请求(FF 的 Firebug 或 Chrome 中的网络选项卡)以及在 PHP 端执行类似 `print_r($_POST) 之类的操作来诊断此类问题 :)
        【解决方案5】:

        您可以使用 php array_map 函数来实现这一点,如下所示,

        $array = $_POST;
        $array = array_map(function($val) { return isset($val) ?$val:'Not entered'; }, $array);
        

        但这样做会使未来的程序员混淆它的来源。因此,将其分配给某个变量并将其发送到您想要的任何地方。

        【讨论】:

        • 这会返回解析错误:语法错误,意外的 T_FUNCTION,期待 ')'。任何想法?如果可行,这似乎是一个很好的解决方案...
        【解决方案6】:

        似乎可以使用:

        foreach ($_POST as $key => $val) {
            if (empty($val)) {
            $post -> $key = "not entered";
            }
            }
        

        这是一个 HTML 表单,它在提交时发布到自身。 (我可能应该指出这一点......)。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多