문제

현재 내 코드는 다음과 같습니다.

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

그래도 진술이 끝날 수 없을 것입니다. 더 좋은 방법이 있습니까?

도움이 되었습니까?

해결책

이건 어때:

// 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() 고리.

다른 팁

옵션 필드 배열을 만들 수 있습니다.

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

$ _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];
  }
}
$formfields = $_POST;
$data = array();
foreach(array_keys($formfields) as $fieldname){
  $data[$fieldname] = $_POST[$fieldname];
}

제출을 포함하여 반환되는 모든 필드가 추가됩니다. 확인란이 확인되지 않았는지 알아야하는 경우 게시 한 것처럼 코드를 사용해야합니다. 확인 된 확인란에만 관심이있는 경우 위의 코드를 사용할 수 있습니다.

이것은 아마도 라디오 버튼과 같은 동일한 이름을 사용하는 여러 Formfields에서는 작동하지 않을 것입니다.

편집 : Owen의 코드를 사용하면 더 깨끗하고 광산은 같은 버전입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top