كيفية التحقق من وجود حقول اختيارية في $ _post

StackOverflow https://stackoverflow.com/questions/222520

  •  03-07-2019
  •  | 
  •  

سؤال

في الوقت الحالي ، يبدو الكود الخاص بي هكذا:

# 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 باستخدام نفس الاسم ، مثل أزرار الراديو.

تحرير: استخدم رمز أوين ، إنه أنظف ، لي هو نسخة أكثر مطوّلة من نفس الشيء.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top