Pergunta

No momento, meu código se parece com o seguinte:

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

Isso levaria a inúmeras declarações se as declarações ... mesmo com a sintaxe ternária, ainda está confuso. Existe uma maneira melhor?

Foi útil?

Solução

Que tal agora:

// 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() irá mesclar os valores, com os valores posteriores substituir os anteriores.

Se você não quer confiar array_merge() Então você pode fazer um foreach() ciclo.

Outras dicas

Você pode construir uma variedade de campos opcionais:

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

Lembre -se de higienizar seus valores $ _Post!

editar: Se você deseja combinar valores opcionais $ _Post com campos que podem ou não existir em sua tabela, você pode fazer algo assim (estou assumindo que está usando o 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];
  }
}
$formfields = $_POST;
$data = array();
foreach(array_keys($formfields) as $fieldname){
  $data[$fieldname] = $_POST[$fieldname];
}

Isso adicionará todos os campos que são retornados, incluindo o envio. Se você precisar saber se uma caixa de seleção não foi verificada, precisará usar o código como postou. Se você se preocupa apenas com as caixas de seleção que são verificadas, poderá usar o código acima.

Provavelmente isso não funcionaria para vários campos de formulários usando o mesmo nome, como botões de rádio.

EDIT: Use o código de Owen, é mais limpo, o meu é uma versão mais detalhada da mesma coisa.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top