php
  • html
  • codeigniter
  • mysqli
  • bootstrap-selectpicker
  • 2017-06-20 146 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

    相关问题