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 ステートメントにつながります... 三項構文を使用しても、まだ面倒です。より良い方法はありますか?

4

4 に答える 4

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()

于 2008-10-21T17:08:42.457 に答える
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];
  }
}
于 2008-10-21T16:57:21.670 に答える
4

オプションのフィールドの配列を作成できます。

$optional = array('lossless_copy', 'bossless_floppy', 'foo');
foreach ($optional as $field) {
    if (isset($_POST[$field])) {
        $data[$field] = $_POST[$field];
    }
}
于 2008-10-21T16:59:18.733 に答える
0
$formfields = $_POST;
$data = array();
foreach(array_keys($formfields) as $fieldname){
  $data[$fieldname] = $_POST[$fieldname];
}

これにより、送信を含む返されるすべてのフィールドが追加されます。チェックボックスがチェックされていないかどうかを知る必要がある場合は、投稿したようなコードを使用する必要があります。チェックされているチェックボックスのみを気にする場合は、上記のコードを使用できます。

これは、ラジオ ボタンのように、同じ名前を使用する複数のフォーム フィールドでは機能しない可能性があります。

編集: Owen のコードを使用してください。よりクリーンです。私のコードは、同じもののより冗長なバージョンです。

于 2008-10-21T17:04:34.290 に答える