2016-11-22 2 views
0

Я создаю таблицу, которая показывает список лекарств. И он получил функцию процесса запаса.Флажок и значение ввода в той же строке

Проблема в том, что если у меня есть 3 записи данных, я могу только проверить запись № 1 и № 2, если я проверю запись № 3 (или последнюю запись, если у меня так много записей), я получил ошибку.

Дело в том, что если я проверю данные 3 (или последнюю запись), установите флажок serialno, но не получите значение количества.

также проблема возникает, когда я зарегистрировать новое лекарство, а затем проверить, что флажок, чтобы вставить значение и возвращает:

ВСТАВИТЬ МЕДИЦИНА КОЛИЧЕСТВА проверяемых МЕДИЦИНЫ.

Как исправить эту проблему? Я минимизировал код, насколько мог.

Форма:

<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>" class="form-horizontal" role="form"> 
    <div class="form-group"> 
     <label class="col-sm-3 control-label no-padding-right" for="form-name"> Search : </label> 

     <div class="col-sm-9"> 
      <span class="input-icon"> 
       <input type="text" id="myInput" onkeyup="myFunction()" placeholder="Keyword HERE" class="col-xs-10 col-sm-12" name="search" /> 
       <i class="ace-icon fa fa-search green"></i> 
      </span> 
     </div> 
    </div> 
    <table id="myTable" class="table table-bordered table-hover"> 
     <thead> 
      <tr> 
       <th>Name</th><th>Serial Number</th><th>Price</th><th>Current Stock</th><th>Action</th><th>Value</th> 
      </tr> 
     </thead> 
     <tbody>          
     <?php 
      $sqlTable = "SELECT * FROM medicinestock"; 
      $queryTable = $conn -> query($sqlTable); 

      if ($queryTable -> num_rows > 0) 
      { 
       while ($resultTable = $queryTable -> fetch_assoc()) 
       { 
        $price = number_format($resultTable['price'], 2); 
        ?> 
        <tr> 
         <td><?php echo $resultTable['name']; ?></td> 
         <td><?php echo $resultTable['serialNo']; ?></td> 
         <td>RM <?php echo $price; ?></td> 
         <td><?php echo $resultTable['quantity']; ?></td> 
         <td> 
          <div class="checkbox"> 
           <label> 
            <input name="checkboxCheck[]" type="checkbox" class="ace" value="<?php echo $resultTable['serialNo']; ?>"/> 
            <span class="lbl">&nbsp;&nbsp;Check</span> 
           </label> 
          </div> 
         </td> 
         <td> 
          <input type="number" name="quantity[]" style="max-width:50px" /> 
         </td> 
        </tr> 
        <?php 
       } 
      } 
      else 
      { 
       $err = $conn -> error; 
       $status = "<b><p><font color='red'>SYSTEM ERROR : $err</font></p></b>"; 
      } 
     ?> 
     </tbody> 
    </table> 
    <div class='clearfix form-actions'> 
     <div class='col-md-offset-3 col-md-9'> 
      <button class='btn btn-info' type='submit'> 
       <i class='ace-icon fa fa-check bigger-110'></i> 
       Finish 
      </button> 
     </div> 
    </div> 
</form> 

Процесс

if ($_SERVER["REQUEST_METHOD"] == "POST") 
{ 
    $icnumber = $_POST['icnumber']; 

    //Check if CHECKBOX checked 
    if (isset($_POST['checkboxCheck'])) 
    { 
     $quantity = $_POST['quantity']; 
     $checkboxCheck = $_POST['checkboxCheck']; 
     $count = count($checkboxCheck); 
    } 

    if ($count == 0) 
    { 
     $status = "<font color='red'><p><b>PLEASE CHECK AT LEAST 1 MEDICINE PRESCRIPTION</b></p></font>"; 
    } 
    else 
    { 
     //Run process for each checked checkbox 
     for ($i = 0; $i < $count; $i++) 
     { 
      $serialNo = $checkboxCheck[$i]; 
      $value = $quantity[$i]; 

      if ($value == null) 
      { 
       $checker = FALSE; 
      } 
      else 
      { 
       $sqlPrescription = "INSERT INTO medicinecheckout (patientic, serialno, quantity, medicineout) VALUES ('$icnumber', '$serialNo', $value, NOW())"; 
       $queryPrescription = $conn -> query($sqlPrescription); 

       if ($queryPrescription == FALSE) 
       { 
        $err = $conn -> error; 
        $status = "<b><p><font color='red'>SYSTEM ERROR : $err</font></p></b>"; 
       } 
      } 
     } 
    } 

    if ($checker == FALSE) 
    { 
     $status = "<b><p><font color='red'>INSERT MEDICINE QUANTITY FOR CHECKED MEDICINE</font></p></b>"; 
    } 
} 

<script type="text/javascript"> 
    function myFunction() 
    { 
     var input, filter, table, tr, td, i; 
     input = document.getElementById("myInput"); 
     filter = input.value.toUpperCase(); 
     table = document.getElementById("myTable"); 
     tr = table.getElementsByTagName("tr"); 

     // Loop through all table rows, and hide those who don't match the search query 
     for (i = 0; i < tr.length; i++) 
     { 
      td = tr[i].getElementsByTagName("td")[0]; 
      if (td) 
      { 
       if (td.innerHTML.toUpperCase().indexOf(filter) > -1) 
       { 
        tr[i].style.display = ""; 
       } 
       else 
       { 
        tr[i].style.display = "none"; 
       } 
      } 
     } 
    } 
</script> 
+0

Вы осматривали флажок элементы, чтобы подтвердить, что каждый из них имеет правильные значения, заданные? В вашем php-коде в цикле флажков у вас есть условный оператор: if value == null, то ничего не делайте с текущим индексом. Если последний элемент отсутствует, его значение не будет достигнуто. Вы можете использовать 'print ("

" . print_r($checkboxCheck,2) . "
");' в вашем php-коде после '$ checkboxCheck = $ _POST ['checkboxCheck'];', чтобы увидеть, что было получено, которое покажет, будут ли получаемые данные проблемой. –

+0

@ cmp-202 Да, я уже проверил, я установил флажок checked, но не поле ввода количества. Я делаю значение $ value == null, чтобы проверять, когда строка получает значение количества или нет. Я добавляю команду печати, которая показывает Array ([0] => UBATAN100). – Asyraf

+0

@ cmp-202 Я уже исправил проблему, но до сих пор не знаю, как ее исправить. Я пытаюсь проверить массив на количестве, которое он показывает так. Массив ( [0] => [1] => [2] => [3] => 1 [4] => 1 ) , что означает цикл читать все массивы количества , – Asyraf

ответ

0

Поэтому в основном я изменить «входное имя номера» в качестве серийного номера, то я $ _POST и сделать серийный номер в качестве индекса ,

<?php 
    //Run process for each checked checkbox 
    for ($i = 0; $i < $count; $i++) 
    { 
     $serialNo = $checkboxCheck[$i]; 

     //Change HERE 
     $value = $_POST[$serialNo]; 

     if ($value == null) 
     { 
      $checker = FALSE; 
     } 
     else 
     { 
      $sqlPrescription = "INSERT INTO medicinecheckout (patientic, serialno, quantity, medicineout) VALUES ('$icnumber', '$serialNo', $value, NOW())"; 
      $queryPrescription = $conn -> query($sqlPrescription); 

      if ($queryPrescription == FALSE) 
      { 
       $err = $conn -> error; 
       $status = "<b><p><font color='red'>SYSTEM ERROR : $err</font></p></b>"; 
      } 
     } 
    } 
    ?> 

    <!-- FORM --> 
    <tr> 
     <td><?php echo $resultTable['name']; ?></td> 
     <td><?php echo $resultTable['serialNo']; ?></td> 
     <td>RM <?php echo $price; ?></td> 
     <td><?php echo $resultTable['quantity']; ?></td> 
     <td> 
      <div class="checkbox"> 
       <label> 
        <input name="checkboxCheck[]" type="checkbox" class="ace" value="<?php echo $resultTable['serialNo']; ?>"/> 
        <span class="lbl">&nbsp;&nbsp;Check</span> 
       </label> 
      </div> 
     </td> 
     <td> 
     <!-- and here, change the name --> 
      <input type="number" name="<?php echo $resultTable['serialNo']; ?>" style="max-width:50px" /> 
     </td> 
    </tr> 
+0

Можете ли вы объяснить, как вы определили, что $ _POST ['quantity'] необходимо изменить с $ quantity [$ i] на использование $ _POST [$ serialNo]. Я могу понять, как это работает, но было бы информативно знать, как вы нашли ответ. –

+0

Я думаю, что флажок может содержать значение при проверке и только установить флажок checked. Поэтому я решил, что я просто имя входа POST (значение, которое хранится в проверенном флажковом массиве) и получает значение количества, а не набор входных массивов, которые замыкают всю строку, не пропуская нулевое значение. Надеюсь, вы понимаете. На самом деле я плохой на английском.^_^ – Asyraf

0

Этот флажок возвращает значение $ _POST, когда оно отмечено. Цикл, основанный на подсчете массива флажка, не будет работать. Способ получения возвращаемого значения заключается в том, чтобы включить тип ввода, спрятанный с тем же именем, перед флагом, с указанием значения = «0».

<input type="hidden" name="checkboxCheck" value="0" /> 
<input type="checkbox" name="checkboxCheck" /> 

Теперь это будет работать:

$checkboxChecks = $_POST['checkboxCheck']; 
$quantity = $_POST['quanty']; 
for($i =0;$i<count($quantity);$i++){ 
    $checked = $checkboxChecks[$i]; 
    $qty = $quantity[$i]; 
    ... 
} 
+0

Извините, только что вспомнил неприятную проблему с возвратом флажка. –

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