簡體   English   中英

如何檢查 $_POST 中的可選字段

[英]How to check for optional fields in $_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']) )
{
   $data = array(
       'lossless_copy' => $_POST['lossless_copy']
    );
}

// etc.

雖然這會導致無休止的 if 語句......即使使用三元語法它仍然很混亂。 有沒有更好的辦法?

這個怎么樣:

// 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()循環。

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];
  }
}

您可以構建一組可選字段:

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

這將添加返回的所有字段,包括提交。 如果您需要知道某個復選框是否未被選中,您將不得不使用您發布的代碼。 如果你只關心被選中的復選框,你可以使用上面的代碼。

這可能不適用於使用相同名稱的多個表單域,例如單選按鈕。

編輯:使用 Owen 的代碼,它更簡潔,我的是同一件事的更詳細的版本。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM