Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/283.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 使用$u POST+;=默认值的数组()_Php_Arrays_Post - Fatal编程技术网

Php 使用$u POST+;=默认值的数组()

Php 使用$u POST+;=默认值的数组(),php,arrays,post,Php,Arrays,Post,我正在完成一个小的联系人表单,并且有一个关于为$\u POST提供默认值的问题。我询问默认值的原因是因为在我的表单中有如下字段: <input type="text" name="fullname" value="<?php echo $_POST['fullname']; ?>" /> <?php echo empty($_POST['fullname']) ? null : $_POST['fullname']; ?> 如果$\u POST['full

我正在完成一个小的联系人表单,并且有一个关于为
$\u POST
提供默认值的问题。我询问默认值的原因是因为在我的表单中有如下字段:

<input type="text" name="fullname" value="<?php echo $_POST['fullname']; ?>" />
<?php echo empty($_POST['fullname']) ? null : $_POST['fullname']; ?>
如果
$\u POST['fullname']
已经存在,它将被保留-如果不存在,它将在数组中创建。这样,在加载表单时,空白值将显示在输入字段中

别担心,好吗
我清理我的数据

感谢您的帮助

即使您正在这样做,也要将数据放入容器中,不要修改超全局。创建包含您的数据的类,然后让接口进行清理、操作并以正确的方式获取数据。从$\u POST导入数据,然后进行验证(如果所有必需的值都在中)

至于代码:

<?php
class PostData
    {
    private $data;

    public function __construct(array $data)
        {
        $this->data = is_array($data)
            ? $data
            : array();
        }

    public function set($key, $value)
        {
        $this->data[$key] = $value;
        }

    public function get($key, $default, $escaping)
        {
        if(isset($this->data[$key]))
            {
            switch($escaping)
                {
                case 'htmlspecialchars':
                    {
                    return htmlspecialchars($this->data[$key]);
                    break;
                    }
                case 'mysql_real_escape_string':
                    {
                    return mysql_real_escape_string($this->data[$key]);
                    break;
                    }
                // and so on, your invention goes here
                default:
                    {
                    return $this->data[$key];
                    }
                }
            }
        else
            {
            return $default;
            }
        }
    }

$postData = new PostData($_POST);
创建函数:

function displayValue($field) {
  if(isset($_POST[$field])) {
    echo 'value="' . htmlentities($_POST[$field]) . '"';
  }
}
然后使用类似于:

<input type="text" name="fullname" <?php displayValue('fullname'); ?> />

您也可以这样做:

<input type="text" name="fullname" value="<?php echo $_POST['fullname']; ?>" />
<?php echo empty($_POST['fullname']) ? null : $_POST['fullname']; ?>


看起来不像是在清理数据。请阅读:@icktoofay没有提供清理数据的代码。这是在执行之前针对
$\u POST
完成的。完全同意。更好的做法是始终假定$\u POST数据包含不受信任的数据,并将其复制到另一个位置,这意味着“此数据是干净的”。因此,您是说我应该创建一个表单类,将
$\u POST
传递给构造函数,在内部对其进行清理,然后通过类似
$form->getValue('fullname')的方式获取值
结果是由内部决定的吗?@Aristole,类似的,是的。它可能看起来像
$f=newformdata($\u POST)$f->sanitize(数组('first_name'=>'string');echo$f[“名字”](假设类实现了
ArrayAccess
)。这就是实现的细节——当然,您可以这样做。您还可以创建类PostData,在其中导入$\u POST,并将对象传递给表单类。这样你就可以满足依赖注入的要求,这也很好。@Tomasz我想我理解你的意思。你能在你的回答中提供一点伪代码给我更多的指导吗?谢谢你的帮助,太冗长了。我可能在页面上有十几个输入。最好的方法是IMHO,尽管我会使用三元运算符使它更可读。