2017-02-09 129 views
0

我想從表單插入數據到MySQL數據庫我有一個像下面的例子中的表格。PHP插入MySql

表格示例

複選框| Dropdown

複選框| Dropdown

複選框| Dropdown

複選框| Dropdown

所有的表和控件都從數據庫中填充。我只想從複選框被選中的下拉列表中插入值。到目前爲止,只有當第一個下拉列表不是空的時候,所有的複選框才能正常工作。用於插入

PHP代碼:

 <?php 
      //$c = checkbox array which is generated from mysql db data 
       $c = $_POST['check']; 
//$n = dropdown array which is generated from mysql db data 
       $n = $_POST['nivel']; 
     //count the amount of checkboxes checked to use in for loop 
       $camount = count($c); 
     //count the amount of dropdowns which have a value selected should be equal to $camount but it is not 
       $namount = count($n); 
        ?> 



       <?php 



          for($i = 0; $i <$camount; $i++) 
          { 

              //insert row into table for each checked checkbox 
              $d = new Disciplina_Estudiante(); 
              $d->idestudiante = $estudiante->id; 
              $d->iddisciplina =$c[$i]; 

    //this is supposed to get the values from the dropdowns that are not empty 
              $d->idnivel = $n[$i]; 


              $d->save();    
          } 


      html markup: 
      <div class="col-md-4"> 

            <table class="table table-bordered table-condensed table-hover" > 
            <thead style="background-color: #f707f3;"> 
             <tr> 
             <th>Disclipina</th> 
             <th>Costo</th> 
             <th>Grupo</th> 


             </tr> 
            </thead> 
            <tbody> 
            <?php foreach ($disciplinas as $disciplina) : ?> 

            <tr> 


              <td> <input type="checkbox" id="check" value="<?php echo $disciplina->id;?>" name="check[]"><?php echo $disciplina->nombre;?></input></td> 
              <td> <?php echo $disciplina->costo;?></td> 
              <td><select class="form-control" id="nivel" name="nivel[]" > 
              <option selected value="" readonly>Seleccionar un Nivel</option>        
              <?php foreach ($niveles as $nivel) : ?> 


              <option value="<?php echo $nivel->id; ?>"> <?php echo $nivel->nombre_nivel."<br>";?></option> 




              <?php endforeach; ?> 
               </select> 
               </td> 


            </tr> 
            <?php endforeach ;?> 

            </tbody> 

            </table> 
            <br> 
              <input type="submit" class="btn btn-primary pull-right" name="submit" value="Aceptar"></input> 


            </div> 

任何幫助,將不勝感激首次發佈...請LMK如果這沒有意義

+2

這沒有意義。您是否可以將它縮減爲只針對當前問題的更少量的代碼? – tadman

+0

更好嗎? –

+0

簡單的事情,例如刪除空白行或刪除不相關的內聯CSS,可以顯示您將注意力集中在眼前的問題上。調試時要做的最重要的事情就是刪除所有不會導致問題的事情,直到您將其縮小到所需的東西爲止。 (另外,yikes,內聯CSS?請,樣式表!) – tadman

回答

0

您的問題是,雖然只有複選框是檢查通過$_POST陣列,所有select框被傳遞,無論用戶是否選擇了一個值。

你可以在這種情況下,做的是指數在name屬性的複選框,以便$check[]數組的索引i將匹配$nivel[]數組的索引i。像這樣:

<input type="checkbox" id="check" value="<?php echo $disciplina->id; ?>" name="check[0]" />順便說input s爲自閉元素。)

這將對應選擇:<select class="form-control" id="nivel" name="nivel[0]" >

然後改變你的循環像這樣一個foreach:

foreach ($c as $i => $checkbox) { 
    $d = new Disciplina_Estudiante(); 
    $d->idestudiante = $estudiante->id; 
    $d->iddisciplina = $checkbox; 

    $d->idnivel = $n[$i]; 
    $d->save(); 
} 

最後一點,縮進你的代碼。

+0

**非常感謝你**,解決了我的問題。順便說一句,我只是想以這種方式關閉我的投入。個人喜好我猜。 –

+0

不客氣:)僅供參考,[HTML5規範](https://www.w3.org/TR/html5/syntax.html#void-elements)明確指出,不應將結束標記添加到void元素像「輸入」......這不是個人偏好問題,因爲它是正確的。 – jake2389

+0

@ifigs這是XHTML,它表面上與HTML5相似但不等同。如果您正在學習,請使用[驗證器](https://validator.w3.org)來驗證您是否正確編寫了您的代碼。個人偏好是一個障礙,如果瀏覽器會錯誤地解釋你的HTML。 – tadman