كيفية التحقق من وجود حقول اختيارية في $ _post
سؤال
في الوقت الحالي ، يبدو الكود الخاص بي هكذا:
# 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 باستخدام نفس الاسم ، مثل أزرار الراديو.
تحرير: استخدم رمز أوين ، إنه أنظف ، لي هو نسخة أكثر مطوّلة من نفس الشيء.