Frage

Im Moment sieht mein Code so aus:

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

Dies würde jedoch zu endlosen, wenn auch Aussagen führen ... selbst mit der ternären Syntax ist es immer noch chaotisch. Gibt es einen besseren Weg?

War es hilfreich?

Lösung

Wie wäre es damit:

// 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() Fusioniert die Werte, wobei die späteren Werte die vorherigen überschreiben.

Wenn Sie nicht vertrauen wollen array_merge() dann kannst du a machen foreach() Schleife.

Andere Tipps

Sie können eine Reihe von optionalen Feldern erstellen:

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

Denken Sie daran, Ihre $ _post -Werte zu sanieren!

bearbeiten: Wenn Sie optionale $ _post -Werte mit Feldern übereinstimmen möchten, die möglicherweise in Ihrer Tabelle vorhanden sind oder nicht, können Sie so etwas tun (ich gehe davon aus, dass Sie MySQL verwenden):

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

Dadurch werden alle Felder hinzugefügt, die zurückgegeben werden, einschließlich Senden. Wenn Sie wissen müssen, ob ein Kontrollkästchen nicht überprüft wurde, müssen Sie Code verwenden, wie Sie es gepostet haben. Wenn Sie sich nur um Kontrollkästchen kümmern, die überprüft werden, können Sie den oben genannten Code verwenden.

Dies würde wahrscheinlich nicht für mehrere Formenfelder mit demselben Namen wie Optionsfelder funktionieren.

Bearbeiten: Verwenden Sie Owens Code, es ist sauberer, meine ist eine ausführlichere Version derselben Sache.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top