Как проверить наличие дополнительных полей в $ _POST - PullRequest
1 голос
/ 21 октября 2008

На данный момент мой код выглядит так:

# 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 ]

9 голосов
/ 21 октября 2008

Как насчет этого:

// 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 голосов
/ 21 октября 2008

Вы можете создать массив необязательных полей:

$optional = array('lossless_copy', 'bossless_floppy', 'foo');
foreach ($optional as $field) {
    if (isset($_POST[$field])) {
        $data[$field] = $_POST[$field];
    }
}
4 голосов
/ 21 октября 2008
foreach ($_POST as $key => $value) {
  $data[$key] = $value;
}

не забудьте очистить ваши значения $ _POST!

edit : если вы хотите сопоставить необязательные значения $ _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 голосов
/ 21 октября 2008
$formfields = $_POST;
$data = array();
foreach(array_keys($formfields) as $fieldname){
  $data[$fieldname] = $_POST[$fieldname];
}

Это добавит все поля, которые возвращаются, включая submit. Если вам нужно знать, если флажок не установлен, вам придется использовать код, который вы опубликовали. Если вы заботитесь только о флажках, которые отмечены, вы можете использовать приведенный выше код.

Это, вероятно, не будет работать для нескольких полей формы, использующих одно и то же имя, например переключатели.

РЕДАКТИРОВАТЬ: Используйте код Оуэна, он чище, мой - более подробная версия того же самого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...