2015-04-21 4 views
4

Я хочу вставить в базу данных множество меток, выпадающих списков и дат. Если я проверил все флажки, все работает нормально. Однако, когда я проверил определенные флажки, значение флажков можно вставить, но не значение раскрывающегося списка и даты.Вставить несколько массивов, используя один запрос

Это код CheckBox, выпадающий список, и дата:

<div class='field'> 
    <div class='checkboxes'> 
     <div class='checkbox'> 
      <input type='checkbox' id='spesimen$i' name='spesimen[]' value='$JenisSpesimen' required minlength='1'/><label>$JenisSpesimen</label><br> 
     </div> 
     <div class='select'> 
      <select id='bilangan$i' name='bilangan[]' class='med' style='display: none;'> 
       <option></option> 
       <option value='Pertama'>Pertama</option> 
       <option value='Kedua'>Kedua</option> 
      </select> 
     </div> 
     <br> 
     <div class='input' id='tarikh_ambil$i' style='display: none;'> 
      <input type='text' id='tarikh_ambil_spesimen$i' name='tarikh_ambil_spesimen[]' class='small' readonly/> 
     </div> 
    </div> 
</div> 

И это процесс:

$spesimen = $_POST['spesimen'];   
$countSpesimen = count($_POST['spesimen']); 

$bilangan = $_POST['bilangan']; 
//$countBilagan = count($_POST['bilangan']); 

$tarikh_ambil = $_POST['tarikh_ambil_spesimen'];  
//$countTarikh = count($_POST['tarikh_ambil_spesimen']); 

for ($x = 0; $x < $countSpesimen; $x++) 
    { 
     $xx = $x+1; 
     $SubIDMohon = $IDMohonx.'-'.$xx; 

     $dd=substr($tarikh_ambil[$x], 0, 2); 
     $mm=substr($tarikh_ambil[$x], 3, 2); 
     $yy=substr($tarikh_ambil[$x], 6, 4); 
     $tarikh_ambil[$x] = $yy."-".$mm."-".$dd; 
     if($tarikh_ambil[$x] == '--') { $tarikh_ambil[$x] = '0000-00-00'; } 

     $pdo->exec("insert into simka_spesimen(IDMohon,SubIDMohon, Nama, LainLain, TarikhAmbil, TarikhHantar, TarikhMakmalTerima) 
      values ('".$IDMohonx."','".$SubIDMohon."','".$spesimen[$x]."','".$bilangan[$x]."','".$tarikh_ambil[$x]."','".$tarikh_hantar_spesimen."','".$tarikh_terima_spesimen."')"); 
    } 
+0

Добро пожаловать. Похож на ваш первый пост. Опишите, как данные формы публикуются в PHP. Пожалуйста, добавьте примеры кода. – Twisty

+0

Кроме того, 'name = 'spesimen []'' не требуется, поскольку у вас есть только один элемент. Поскольку у вас не так много элементов с одним и тем же именем, массив не создается. Порекомендуйте только 'name = 'spesimen'' и' $ _POST [' spesimen '] '. – Twisty

+0

[] значение: -dropdown list- -date- [] Значение B -dropdown list- -date- это то, что предполагают, чтобы появиться. поэтому, когда я проверил значение B, выпадающий список и дата не вставлялись в базу данных. Только если я проверил значение A, у них не возникнут проблемы –

ответ

0

Я бы рекомендовал, чтобы обернуть свои поля в общее название, так что вы может запускать foreach по каждому «набору полей», а затем обращаться к соответствующим полям, вместо того, чтобы иметь их отдельными и независимыми, как вы их сейчас.

HTML будет что-то вроде этого: (Реализуйте счетчик, как вы хотите, но будьте уверены, чтобы увеличить его, прежде чем добавить еще один набор)

<div class='field'> 
    <div class='checkboxes'> 
     <div class='checkbox'> 
      <label><input type='checkbox' id='spesimen$i' name='fieldset[$counter][spesimen]' value='$JenisSpesimen' required minlength='1'/>$JenisSpesimen</label> 
     </div> 
     <div class='select'> 
      <select id='bilangan$i' name='fieldset[$counter][bilangan]' class='med' style='display:none;'> 
       <option></option> 
       <option value='Pertama'>Pertama</option> 
       <option value='Kedua'>Kedua</option> 
      </select> 
     </div> 
     <div class='input' id='tarikh_ambil$i' style='display:none;'> 
      <input type='text' id='tarikh_ambil_spesimen$i' name='fieldset[$counter][tarikh_ambil_spesimen]' class='small' readonly/> 
     </div> 
    </div> 
</div> 

и ваш PHP код следующим образом:

foreach($_POST['fieldset'] as $i=>$fields){ 

    $SubIDMohon = $IDMohonx .'-' . ($i + 1) ; 

    //If specimen is checked, the value comes with post, otherwise set it to default '' 
    $specimen = (isset($fields['specimen'])) ? $fields['specimen'] : ''; 

    //check if the date is valid format 
    $date = ''; 
    if(preg_match('^([0-9]{2}-){2}[0-9]{4}$', $fields['tarikh_ambil_spesimen'])){ 
     $date = implode('-', array_reverse(explode('-', $fields['tarikh_ambil_spesimen']))); 
    } 
    else{ 
     $date = '0000-00-00'; 
    } 


    $pdo->exec(
     "insert into simka_spesimen(IDMohon,SubIDMohon, Nama, LainLain, TarikhAmbil, TarikhHantar, TarikhMakmalTerima) 
      values (
       '" . $IDMohonx . "', 
       '" . $SubIDMohon . "', 
       '" . $spesimen . "', 
       '" . $fields['bilangan'] . "', 
       '" . $date . "', 
       '" . $tarikh_hantar_spesimen . "', 
       '" . $tarikh_terima_spesimen . "' 
      )" 
    ); 
} 

Попробуйте сделать print_r на $_POST, чтобы вы могли видеть, как он структурирован.

Удачи вам!

Смежные вопросы