目前我的代码看起来像这样:
# 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语句......即使使用三元语法,它仍然是凌乱的。还有更好的方法吗?
答案 0 :(得分: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()
循环。
答案 1 :(得分: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];
}
}
答案 2 :(得分:4)
您可以构建一个可选字段数组:
$optional = array('lossless_copy', 'bossless_floppy', 'foo');
foreach ($optional as $field) {
if (isset($_POST[$field])) {
$data[$field] = $_POST[$field];
}
}
答案 3 :(得分:0)
$formfields = $_POST;
$data = array();
foreach(array_keys($formfields) as $fieldname){
$data[$fieldname] = $_POST[$fieldname];
}
这将添加返回的所有字段,包括提交。如果您需要知道是否未选中复选框,则必须使用您发布的代码。如果您只关心选中的复选框,则可以使用上面的代码。
这可能不适用于使用相同名称的多个表单字段,例如单选按钮。
编辑:使用Owen的代码,它更干净,我的同一个东西是更冗长的版本。