1

目前我的代码如下所示:

# 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 语句......即使使用三元语法,它仍然很混乱。有没有更好的办法?

4

4 回答 4

9

这个怎么样:

// 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_merge()将合并这些值,使后面的值覆盖前面的值。

如果你不想信任,array_merge()那么你可以做一个foreach()循环。

于 2008-10-21T17:08:42.457 回答
4
foreach ($_POST as $key => $value) {
  $data[$key] = $value;
}

记得清理你的 $_POST 值!

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

$fields = array();
$table  = 'Current_Table';

// we are not using mysql_list_fields() as it is deprecated
$query  = "SHOW COLUMNS from {$table}";
$result = mysql_query($query);
while ($get = mysql_fetch_object($result) ) {
  $fields[] = $get->Field;
}

foreach($fields as $field) {
  if (isset($_POST[$field]) ) {
    $data[$field] = $_POST[$field];
  }
}
于 2008-10-21T16:57:21.670 回答
4

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

$optional = array('lossless_copy', 'bossless_floppy', 'foo');
foreach ($optional as $field) {
    if (isset($_POST[$field])) {
        $data[$field] = $_POST[$field];
    }
}
于 2008-10-21T16:59:18.733 回答
0
$formfields = $_POST;
$data = array();
foreach(array_keys($formfields) as $fieldname){
  $data[$fieldname] = $_POST[$fieldname];
}

这将添加所有返回的字段,包括提交。如果您需要知道复选框是否未被选中,您将不得不使用您发布的代码。如果你只关心被选中的复选框,你可以使用上面的代码。

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

编辑:使用欧文的代码,它更干净,我的是同一件事的更详细的版本。

于 2008-10-21T17:04:34.290 回答