2008-10-21 19 views
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語句,雖然...即使三元語法,它仍然混亂。有沒有更好的辦法?

回答

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

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

這對任何未在POST中設置的字段都沒有幫助。 – 2008-10-21 18:51:52

4

你可以建立可選字段的數組:

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

他仍然會得到一個沒有設置特定鍵的數組。他們應該被設置爲默認值。 – 2008-10-21 18:52:26

+0

好點。如果這是一個問題,你總是可以添加諸如「else {$ data [$ field] = false;}」之類的東西 - 或者任何你想要的默認值。 – ojrac 2008-10-21 19:58:18

0
$formfields = $_POST; 
$data = array(); 
foreach(array_keys($formfields) as $fieldname){ 
    $data[$fieldname] = $_POST[$fieldname]; 
} 

這將添加返回包括提交所有領域。如果你需要知道一個複選框沒有被選中,你將不得不使用你發佈的代碼。如果您只關心已選中的複選框,則可以使用上述代碼。

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

編輯:使用歐文的代碼,它更清潔,我的是一個更詳細的版本的同一件事。