문제
현재 내 코드는 다음과 같습니다.
# 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의 코드를 사용하면 더 깨끗하고 광산은 같은 버전입니다.
제휴하지 않습니다 StackOverflow