Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/252.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_Forms_Post - Fatal编程技术网

Php 如何检查$\u POST中的可选字段

Php 如何检查$\u POST中的可选字段,php,forms,post,Php,Forms,Post,目前,我的代码如下所示: # Assign values for saving to the db $data = array( 'table_of_contents' => $_POST['table_of_contents'], 'length' => $_POST['length'] ); # Check for fields that may not be set if ( isset($_POST['lossless_copy']) ) { $dat

目前,我的代码如下所示:

# Assign values for saving to the db
$data = array(
    'table_of_contents' => $_POST['table_of_contents'],
    'length' => $_POST['length']
);

# Check for fields that may not be set
if ( isset($_POST['lossless_copy']) )
{
   $data = array(
       'lossless_copy' => $_POST['lossless_copy']
    );
}

// etc.
但这将导致无休止的if语句。。。即使使用三元语法,它仍然很混乱。有更好的办法吗

foreach ($_POST as $key => $value) {
  $data[$key] = $value;
}
请记住清理您的$\u POST值

编辑:如果希望将可选的$\u POST值与表中可能存在或不存在的字段匹配,可以执行以下操作(我假设您使用的是mysql):

请记住清理您的$\u POST值

编辑:如果希望将可选的$\u POST值与表中可能存在或不存在的字段匹配,可以执行以下操作(我假设您使用的是mysql):


您可以构建一个可选字段数组:

$optional = array('lossless_copy', 'bossless_floppy', 'foo');
foreach ($optional as $field) {
    if (isset($_POST[$field])) {
        $data[$field] = $_POST[$field];
    }
}

您可以构建一个可选字段数组:

$optional = array('lossless_copy', 'bossless_floppy', 'foo');
foreach ($optional as $field) {
    if (isset($_POST[$field])) {
        $data[$field] = $_POST[$field];
    }
}
这将添加返回的所有字段,包括submit。如果您需要知道是否有复选框未被选中,则必须使用类似于您发布的代码。如果您只关心选中的复选框,则可以使用上述代码

这可能不适用于使用相同名称的多个表单字段,如单选按钮

编辑:使用欧文的代码,它更干净,我的代码更详细

这将添加返回的所有字段,包括submit。如果您需要知道是否有复选框未被选中,则必须使用类似于您发布的代码。如果您只关心选中的复选框,则可以使用上述代码

这可能不适用于使用相同名称的多个表单字段,如单选按钮

编辑:使用Owen的代码,它更干净,我的代码更详细。

这个怎么样:

// this is an array of default values for the fields that could be in the POST
$defaultValues = array(
    'table_of_contents' => '',
    'length' => 25,
    'lossless_copy' => false,
);
$data = array_merge($defaultValues, $_POST);
// $data is now the post with all the keys set
array\u merge()
将合并这些值,使后面的值覆盖前面的值

如果您不想信任
array\u merge()
,那么您可以执行
foreach()
循环。

这样如何:

// this is an array of default values for the fields that could be in the POST
$defaultValues = array(
    'table_of_contents' => '',
    'length' => 25,
    'lossless_copy' => false,
);
$data = array_merge($defaultValues, $_POST);
// $data is now the post with all the keys set
array\u merge()
将合并这些值,使后面的值覆盖前面的值


如果你不想信任
array\u merge()
,那么你可以执行
foreach()
循环。

这对任何未在帖子中设置的字段都没有帮助。这对任何未在帖子中设置的字段都没有帮助。他最终仍然会得到一个未设置某些键的数组。它们应该改为默认值。这一点很好。如果这是一个问题,您总是可以添加“else{$data[$field]=false;}”之类的内容,或者任何您想要的默认值。他仍然会得到一个没有设置特定键的数组。它们应该改为默认值。这一点很好。如果这是一个问题,您总是可以添加“else{$data[$field]=false;}”之类的内容,或者任何您想要的默认值。当您需要显式默认值时,这是一个很好的通用解决方案+1卓越的解决方案,利用内置函数。当您需要明确的默认值时,这是一个很好的通用解决方案+1利用内置功能的卓越解决方案。