Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] CodeIgniter [HTML-PHP] Enviar datos múltiples checkbox al controlador

Estas en el tema de [HTML-PHP] Enviar datos múltiples checkbox al controlador en el foro de PHP en Foros del Web. Buenas, Recientemente entré en un proyecto como programador web. Soy novato. Muy novato. Quiero decir, tengo algo de experiencia, he hecho mis pinitos, pero mi ...
  #1 (permalink)  
Antiguo 19/05/2014, 05:31
Avatar de alberthp  
Fecha de Ingreso: abril-2013
Mensajes: 12
Antigüedad: 6 años, 9 meses
Puntos: 0
Pregunta [HTML-PHP] Enviar datos múltiples checkbox al controlador

Buenas,

Recientemente entré en un proyecto como programador web. Soy novato. Muy novato. Quiero decir, tengo algo de experiencia, he hecho mis pinitos, pero mi formación es escasa y aunque tengo dos FP de programación, me siento eternamente como si no supiera nada. Los profesores nos explican cómo poner en marcha un motor de carbón cuando hay de gasolina (bonita metáfora), se lo dices y lo único que te dicen es "el currículo que nos ha dado Educación es así".

En fin...

Tengo una pequeña duda. He probado de varias maneras y estoy casi seguro de que estoy rozando la respuesta correcta, pero no llego a tocarla.

La cuestión es que tengo diversos registros variables, en los que cada uno hay un checkbox que al seleccionar y luego clickar a un botón, envía los datos a la función del controlador correspondiente y entra en la DB, para luego volver y cambiar el checkbox por un "recibido por...". Me va bien si marco una sola casilla, pero si selecciono varias únicamente me coge la primera.

HTML:
Código:
<td>
    <p>
        <?php 
            if(isset($arraysalidas[$i]['recibido']) && $arraysalidas[$i]['recibido']=="1" && isset($arraysalidas[$i]['empleado_recibe']) ){
                echo "<font color=green>Recibido por:</font><br>".$arraysalidas[$i]['empleado_recibe']."<br>";	
                if(isset($arraysalidas[$i]['fecha_recibido'])) echo $arraysalidas[$i]['fecha_recibido'];
            }else{  ?>
            <form id="recibidos" name="recibidos" method="post" action="<?=base_url('informes/reparto2');?>">
                <input type="hidden" id="id_ref_txt_busq" name="id_ref_txt_busq" value="<?=$arraysalidas[$i]['referencia_txt']?>" >
                <input id="checkbox" type="checkbox"  value="<?=$arraysalidas[$i]['id']?>" name="recibido[]">
            </form>
        <?php }?>
    </p>
</td>
Esto por sí solo no hace nada si no se le da al botón recibidos:

Código:
<button type="submit" id="recibidos" onClick="document.forms['recibidos'].submit();">Recibido</button>
Y luego el PHP donde se deberían recibir los datos..., la parte donde tengo problemas:

Código:
//INICIO - Marcar pedido recibido en tienda
//Si se recibe el array con los marcados a Recibidos (es decir: Marcar recibidos)
    if($this->input->post('recibido')){
        $id_emp=$this->centinela->getId();//Recoge el id de empleado
        //Viene a marcar salidas como recibidas
            $arrayRecib = ($this->input->post('recibido'))?($this->input->post('recibido')):(array());
                foreach($arrayRecib as $key => $value) {
                    $this->M_salidas->update_recibido($value, $id_emp);
		}
    } 
El resultado es que sólo se me marca el primero de los checkbox seleccionados, el resto no pasa nada. Supongo que es por ese "input->post('recibido')", pero cuando lo cambié por el botón (recibidos), no me hacía nada de nada xD También he intentado con recibido[], recibido[$i] y un for delante, con un foreach...

Ya no sé qué más hacer xD

¿Me puede ayudar alguien y, sobretodo, ¿explicarme por qué? ¿qué hago mal o qué no entiendo de lo que estoy haciendo?

Gracias de antemano
  #2 (permalink)  
Antiguo 20/05/2014, 03:16
Avatar de alberthp  
Fecha de Ingreso: abril-2013
Mensajes: 12
Antigüedad: 6 años, 9 meses
Puntos: 0
Respuesta: [HTML-PHP] Enviar datos múltiples checkbox al controlador

Hola!

Aún no está solucionado, no logro dar con la respuesta adecuada..

He probado:
Código PHP:
for ($i=0; isset($data['salidasrecibidas'][$i]); $i++)
{
      if(
$this->input->post('recibido['.$i.']')){
            
$id_emp=$this->centinela->getId();//Recoge el id de empleado
            //Viene a marcar salidas como recibidas
                  
$arrayRecib = ($this->input->post('recibido['.$i.']'))?($this->input->post('recibido['.$i.']')):(array());
                  foreach(
$arrayRecib as $key => $value) {
                        
$this->M_salidas->update_recibido($value$id_emp);
                  }
      }

Tampoco, en este caso ya no me hace ni el primero (imagino que lo de ->post('recibido[i]') no está bien XD

Ni siquiera sé cómo buscar por palabras claves para ver qué es lo que fallo. ¿Alguien me sabe iluminar el camino? xD
  #3 (permalink)  
Antiguo 20/05/2014, 03:52
Avatar de alberthp  
Fecha de Ingreso: abril-2013
Mensajes: 12
Antigüedad: 6 años, 9 meses
Puntos: 0
Respuesta: [HTML-PHP] Enviar datos múltiples checkbox al controlador

Solucionado.

El problema es que con cada salida generada salía un form con el mismo nombre (Recibidos), así que supongo que el pobre sistema se volvía loco por saber cuál era el form que enviaba y cogía solo el primero :P

En definitiva, he sacado el form del bucle iterativo y ha funcionado, ya se envían todos a la vez.

Odio comerme la olla y que luego sean tonterías xD
  #4 (permalink)  
Antiguo 20/05/2014, 03:59
Avatar de Eleazan  
Fecha de Ingreso: abril-2008
Ubicación: Ibiza
Mensajes: 1.879
Antigüedad: 11 años, 10 meses
Puntos: 326
Respuesta: [HTML-PHP] Enviar datos múltiples checkbox al controlador

Cita:
Iniciado por alberthp Ver Mensaje
Odio comerme la olla y que luego sean tonterías xD
Pasa en las mejores familias... no te preocupes!
__________________
>> Eleazan's Source
>> @Eleazan

Etiquetas: checkbox, codeigniter, controlador, fecha, html, registro, variable
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:37.