php
  • html
  • codeigniter
  • mysqli
  • bootstrap-selectpicker
  • 2017-06-20 141 views 0 likes 
    0

    我做了一個「管理」頁面上傳照片到不同的類別,所以有一個<input type="file">和一個<select>,其中包含在optgroups中組織的類別和子類別,如果一個類別有一個子類別,或者只是一個類別沒有optgroup 。如何獲得有關從codeigniter中選擇「optgroup」的信息?

    <?php echo form_open_multipart('principal/subir_foto');?> 
          <div class='input-group'>         
           <label for="img" class='control-label'>Seleccionar:</label> 
           <input id="img" required="true" type='file' name='imagen'/> 
          </div> 
          <div class='input-group'>            
           <label for="categoria" class='control-label'>Elegir Categoria:</label> 
           <select class='selectpicker form-control' name='cat_op' data-width='auto'> 
            <?php 
             foreach ($categorias as $row_cat) {       
              if($row_cat->tiene_subcat > 0){ 
               echo "<optgroup value='".$row_cat->nom_cat ."' label='". $row_cat->nom_cat ."'>"; 
               foreach ($subcat as $row_subcat) { 
                if($row_subcat->id_cat === $row_cat->id_cat){ 
                 echo "<option value=". $row_subcat->nom_subcat ."> ". $row_subcat->nom_subcat ."</option>"; 
                }          
               } 
               echo "</optgroup>"; 
              } 
              else{ 
               echo "<option value='" . $row_cat->nom_cat . "'>". $row_cat->nom_cat . "</option>"; 
              } 
             } 
            ?> 
           </select>        
          </div>     
          <div class='input-group'> 
           <input type='submit' name='agregar' value="Agregar"> 
          </div>    
          </form> 
    

    所以,當代碼由服務器解釋,該<select>標籤顯示如下:

    <label class='control-label'>Elegir Categoria:</label> 
    <select class='selectpicker form-control' name='cat_op' data-width='auto'> 
    
        <optgroup value='SALAS' label='SALAS'> 
    
        <option value=RAWSON> RAWSON</option> 
        <option value=CAPITAL> CAPITAL</option> 
    
        </optgroup> 
    
        <option value='SERVICIOS FUNERARIOS'>SERVICIOS FUNERARIOS</option> 
        <option value='ATAUDES'>ATAUDES</option> 
        <option value='FLORES'>FLORES</option>     
    </select> 
    

    所以,當提交按鈕被按下時,在我的代碼點火器控制器命名爲「校長」和在「subir_foto」方法中,我可以訪問$ this-> input-> post('cat_op')這給我提交時選擇的選項,但我怎樣才能獲得optgroup值,因爲我需要有子類別和類別名稱。 我希望我已經表達了我的問題以及

    This is how the selectpicker is displayed

    謝謝你,是我的第一個問題。

    +1

    imo您需要根據選定的選項自行回溯其他類別 – DarkBee

    回答

    0

    好了,我終於在「校長」控制器做出的邏輯,所以我可以知道,如果它是一個類別或子類別,也知道從最重要的類別繼承。

    public function subir_foto(){ 
        $opcion = $this->input->post('cat_op');//obtengo el valor de "option" elegido 
        $op_row = $this->datos_model->getWhere('sub_categorias',array('nom_subcat'=>$opcion));#busco en la tabla sub_categorias por el nombre. Si lo encuentra, busco en la tabla categoria por id_cat 
        if(!empty($op_row)){ 
         foreach ($op_row as $row) { 
          $id_Cat = $row->id_cat; 
          $subcat = $row->nom_subcat; 
         }   
         $cat_row = $this->datos_model->getWhere('categorias',array('id_cat'=>$id_Cat)); 
         foreach ($cat_row as $row) { 
          $cat = $row->nom_cat; 
         }       
        } 
        else{ 
         $cat = $opcion; 
         $subcat = null; 
        } 
    

    然後,我可以插圖照片在我的數據庫是這樣的(當然,我跳過了驗證部分的代碼)

    $datos = $this->upload->data(); 
         $row = array(
          'ruta'=>$datos['file_path'], 
          'nom_img'=>$datos['file_name'], 
          'categoria'=>$cat, 
          'subcat'=>$subcat, 
          'alt'=>$alt, 
          'height'=>$datos['image_height'], 
          'width'=>$datos['image_width'],'size'=>$datos['file_size']); 
         $this->datos_model->insertar('imagenes',$row); 
         $data['error'] = 'Archivo '. $datos['file_name'] .' subido exitosamente'; 
    
         $this->load->view('templates/header', $data); 
         $this->load->view('pages/admin', $data); 
         $this->load->view('templates/footer'); 
    

    這是模型方法的表「getWhere」時我從$ this-> datos_model-> getWhere(table,array)調用它;

    function getWhere($tabla,$arreglo){ 
         $query = $this->db->get_where($tabla, $arreglo); 
         if($query->num_rows() > 0){ 
          return $query->result(); 
         } 
         else{ 
          return null; 
         } 
        } 
    

    所以基本上,當我選擇的選項,我第一次進行查詢,其中「名」 =選項MI DB的「子類別」表。如果查詢不爲空,則表示該選項對應於一個子類別。所以現在我需要知道哪個類別的子類下(我有id_cat作爲「子類別」表中的外鍵)所以我做了另一個查詢,其中「id_cat」= id_cat在我的數據庫的「類別」表。最後我可以得到父類別的名稱。

    我希望我明確自己。謝謝

    0

    The <optgroup> tag does not have a value attribute.它純粹是瀏覽器的格式化指令。

    如果需要在一個<select>元件的多個類似的選項之間進行區分,包括<option>元件的value必要的數據的所有。例如,您可能包括由冒號分隔的類別和子類別名稱:

    echo "<option value='" 
        . $row_cat->nom_cat . ":" . $row_subcat->nom_subcat 
        . "'>" . $row_subcat->nom_subcat . "</option>"; 
    
    +0

    所以,當我選擇一個選項時,我會有一個像「category1:subcat1」的值,有沒有辦法做一個「拆分「由':'所以我可以分別處理這些值? –

    +0

    查看'explode()'函數。 – duskwuff

    相關問題