Foros del Web » Programando para Internet » PHP »

Chekbox y mysql

Estas en el tema de Chekbox y mysql en el foro de PHP en Foros del Web. Hola a todos como esta. Ayer me ayudaron a resolver un problema con los checkbos, pero resulta que ahora surgio otro y es el diguiente: ...
  #1 (permalink)  
Antiguo 30/07/2014, 11:05
Avatar de shadowwolfone  
Fecha de Ingreso: abril-2009
Ubicación: Amaguaña
Mensajes: 40
Antigüedad: 14 años, 11 meses
Puntos: 1
Chekbox y mysql

Hola a todos como esta.

Ayer me ayudaron a resolver un problema con los checkbos, pero resulta que ahora surgio otro y es el diguiente:

Tengo un archivo acta.tpl y un archivo actaController.php, en el archivo php tengo las consultas las cual envio al tpl pra mostrarlas.

Ahora este tiene hasta el momento 2 query el uno consulta y el otro hace un insert.

El de consulta me muestra una tabla en tl pl con la información de la siguiente forma:

Código PHP:
<form action="{$link->getPageLink('acta', true)|escape:'html'}" method="post" class="std" id="ent_acta" name="ent_acta">
   <
tr>
   <
td>REFERENCIA DEL PEDIDO:&nbsp;{$envio}</td>
   </
tr>
   <
table class="std">
           <
thead>
            <
tr>
                <
th class="first_item">{l s='Producto'}</th>
                <
th class="item">{l s='Cantidad'}</th>
                <
th class="item">{l s='Total'}</th>
                <
th class="item">{l s='SI'}</th>
                <
th class="item">{l s='NO'}</th>
                <
th class="item">{l s='Observacion'}</th>
            </
tr>
        </
thead>
        <
tbody>
        {foreach 
from=$lista key=key item=row }
            <
tr>
                <
td align="left">{$row['nombre']}</td>
                <
td align="left">{$row['cantidad']}</td>
                <
td align="justify">{$row['Total']}</td>
                <
td><input type="checkbox" name="ent_si_no[]" value="1"/></td>
                <
td><input type="checkbox" name="ent_si_no[]" value="0"/></td>
                <
td><textarea name="observacion[]" rows="3" cols="40"></textarea></td>
                <
input name="nombre[]" type="hidden" value="{$row['nombre']}"/>
                <
input name="cantidad[]" type="hidden" value="{$row['cantidad']}"/>
                <
input name="total[]" type="hidden" value="{$row['Total']}"/>
                <
input name="referen[]" type="hidden" value="{$envio}" />
                <
input name="product_id[]" type="hidden" value="{$row['producto']}" />
                <
input name="user_id[]" type="hidden" value="{$cookie->id_customer}"/>
            </
tr
          {/foreach}
          </
tbody>
  </
table>
    <
class="submit">
       <
input type="submit" id="acta_env" name="acta_env" class="button" value="{l s='Enviar'}" />
    </
p>
</
form
como pueden ver he añadido 2 checbox para escoger si o no, en la base de datos me guarda 1 si es "si" y 0 si es "no",

el problema da que si escojo en la primera fila si, en la segunda le dejo en blanco y en la tercera si, al guardar en la base merecorre todo una fila para arriba es decir deberia guardar 1 - 0 - 1, pero guarda 1 -1 -0.

Alguien me podria ayudar.

De ante mano les agradesco fuullll.
__________________
En este mundo no existen las casualidades, solo lo inevitable.
  #2 (permalink)  
Antiguo 30/07/2014, 13:07
Avatar de Patriarka  
Fecha de Ingreso: enero-2011
Ubicación: Moreno, Buenos Aires, Argentina
Mensajes: 2.851
Antigüedad: 13 años, 2 meses
Puntos: 288
Respuesta: Chekbox y mysql

hola otra vez
el problema debe estar en donde guarda los datos,
escribi solo la linea que hace el while y el insert y lo vemos
  #3 (permalink)  
Antiguo 30/07/2014, 13:20
Avatar de shadowwolfone  
Fecha de Ingreso: abril-2009
Ubicación: Amaguaña
Mensajes: 40
Antigüedad: 14 años, 11 meses
Puntos: 1
Respuesta: Chekbox y mysql

Hola Patriarka, gracias por tu ayuda.

Mira en si no utilizo ningun while, el codigo que tengo para hacer el insert es el siguiente, este codigo esta en el actaController.php

Código PHP:
        $nom_prod=$_POST['nombre'];
        
$cant_prod=$_POST['cantidad'];
        
$tot_com=$_POST['total'];
        
$ent_si_no=$_POST['ent_si_no'];
        
//$ent_no=$_POST['ent_si_no'];
        
$obs_ent=$_POST['observacion'];
        
$prod_id=$_POST['product_id'];
        
$user=$_POST['user_id'];
        
$refer_ped=$_POST['referen'];        
        
         if (isset(
$_POST['nombre'])){
            if (!empty(
$_POST['ent_si_no'])){
            for(
$i 0$i<count($nom_prod); $i++){
                
$acta="INSERT INTO ps_acta (ing_si_no, observacion, product_id, user_id, reference, cantidad, total)
                VALUES ('$ent_si_no[$i]', '$obs_ent[$i]', '$prod_id[$i]', '$user[$i]', '$refer_ped[$i]', '$cant_prod[$i]', '$tot_com[$i]')"
;
                
Db::getInstance()->execute($acta); }
                }
       } else {
        echo 
'aun no guarda nada';
       } 
El segundo if que tu ves if(!empty) lo estaba probando para tratar de validar los checks, el problema esque no me valida por filas sino solo uno en toda la tabla.


Como dije en el primer mensaje yo publico los datos enviandolos del php al tpl con la siguiente consulta:

Código PHP:
        $refer=$_POST['referencia'];
        
//Tools::getValue('email');
        
$productos="SELECT
                    b.id_cart,
                    c.name AS nombre,
                    b.quantity AS cantidad,
                    d.price,
                    d.price * b.quantity AS Total,
                    a.reference,
                    b.id_product AS producto
                    FROM ps_orders AS a, ps_cart_product AS b, ps_product_lang AS c, ps_product AS d
                    WHERE a.id_cart = b.id_cart
                    AND b.id_product = c.id_product
                    AND b.id_product = d.id_product
                    AND a.reference = '$refer'
                    AND c.id_lang = 2"
;
                    
        
$this->context->smarty->assign('lista'Db::getInstance()->executeS($productos));
        
$this->context->smarty->assign('envio'$refer);
        
$this->setTemplate(_PS_THEME_DIR_.'acta.tpl'); 
y en el tpl armo la tabla con el {foreach} aqui es donde le agrego los checkbox.
__________________
En este mundo no existen las casualidades, solo lo inevitable.
  #4 (permalink)  
Antiguo 30/07/2014, 18:14
Avatar de Patriarka  
Fecha de Ingreso: enero-2011
Ubicación: Moreno, Buenos Aires, Argentina
Mensajes: 2.851
Antigüedad: 13 años, 2 meses
Puntos: 288
Respuesta: Chekbox y mysql

esta mal obviamente, cuando ent_si_no es cero empty es true,
vos tenes que pensar siempre en tomar valores defualt, por ejemplo para ent_si_no que el default sea 0
Código PHP:
Ver original
  1. <?
  2.   if (isset($_POST['nombre'])){
  3.             for($i = 0; $i<count($nom_prod); $i++){
  4. $_ent_si_no = (isset($ent_si_no[$i]) && !empty($ent_si_no[$i])) ? $ent_si_no[$i] : 0;
  5.  
  6.  
  7.  
  8.                 $acta="INSERT INTO ps_acta (ing_si_no, observacion, product_id, user_id, reference, cantidad, total)
  9.                VALUES ('$_ent_si_no ', '$obs_ent[$i]', '$prod_id[$i]', '$user[$i]', '$refer_ped[$i]', '$cant_prod[$i]', '$tot_com[$i]')";
  10.                 Db::getInstance()->execute($acta); }
  11.        } else {
  12.         echo 'aun no guarda nada';
  13.        }  
  14. ?>
  #5 (permalink)  
Antiguo 31/07/2014, 07:55
Avatar de shadowwolfone  
Fecha de Ingreso: abril-2009
Ubicación: Amaguaña
Mensajes: 40
Antigüedad: 14 años, 11 meses
Puntos: 1
Respuesta: Chekbox y mysql

Hola Patriarka mil gracias por tu ayuda, yo no soy desarrollador y en tiendo lo basico de programación.

Hice los cambios como expones pero cuando guarda en la base por ejemplo si se listan 3 filas escojo la 1 y la 3 y meguarda la 1 y la 2 con valor 1 en caso de que escoja si en las dos pero la tercera no sale y es en esa la que escoji la casilla si.



en esa lista el producto de la primera fila es el id 3, el segundo 11 y el tercero 51, cuando escojo el id 3 y el 51 en l base me guarda el 3 y el 11 con valor 1 pero el tercero no, lo ideal seria que se guarden los 3 y el que no llenen la casilla seponga en 0.

Agradeceria mucho si me pueden ayudar y disculpen las molestias.
__________________
En este mundo no existen las casualidades, solo lo inevitable.
  #6 (permalink)  
Antiguo 31/07/2014, 08:21
Avatar de Patriarka  
Fecha de Ingreso: enero-2011
Ubicación: Moreno, Buenos Aires, Argentina
Mensajes: 2.851
Antigüedad: 13 años, 2 meses
Puntos: 288
Respuesta: Chekbox y mysql

aplicaste el codigo que te escribi?
  #7 (permalink)  
Antiguo 31/07/2014, 08:32
Avatar de shadowwolfone  
Fecha de Ingreso: abril-2009
Ubicación: Amaguaña
Mensajes: 40
Antigüedad: 14 años, 11 meses
Puntos: 1
Respuesta: Chekbox y mysql

Hola Patriarka,

Si le puse tu codigo y me guarda de esta forma por ejemplo como en la imagen de arriba me guarda en la base el priemro con valor 1 el segundo con valor 1 y el tercero no guarda, y como ves en la imagen yo hice el chec en el primero y el tercero.
Código PHP:
         if (isset($_POST['nombre'])){
            for(
$i 0$i<count($ent_si_no); $i++){
                
$_ent_si_no = (isset($ent_si_no[$i]) && !empty($ent_si_no[$i])) ? $ent_si_no[$i] : 0;
                
$acta="INSERT INTO ps_acta (ing_si_no, observacion, product_id, user_id, reference, cantidad, total)
                VALUES ('$_ent_si_no', '$obs_ent[$i]', '$prod_id[$i]', '$user[$i]', '$refer_ped[$i]', '$cant_prod[$i]', '$tot_com[$i]')"
;
                
Db::getInstance()->execute($acta); }
       } else {
        echo 
'aun no guarda nada';
       } 
__________________
En este mundo no existen las casualidades, solo lo inevitable.
  #8 (permalink)  
Antiguo 31/07/2014, 08:46
Avatar de Patriarka  
Fecha de Ingreso: enero-2011
Ubicación: Moreno, Buenos Aires, Argentina
Mensajes: 2.851
Antigüedad: 13 años, 2 meses
Puntos: 288
Respuesta: Chekbox y mysql

bueno no leistel el html basico

<td><input type="checkbox" name="ent_si_no[]" value="1"/></td>
<td><input type="checkbox" name="ent_si_no[]" value="0"/></td>

cambia por

<td><input type="radio" name="ent_si_no[]" value="1"/></td>
<td><input type="radio" name="ent_si_no[]" value="0"/></td>


si queres que sea chekbox

<td><input type="checkbox" name="ent_si_no[]" value="1"/></td>
  #9 (permalink)  
Antiguo 31/07/2014, 09:01
Avatar de shadowwolfone  
Fecha de Ingreso: abril-2009
Ubicación: Amaguaña
Mensajes: 40
Antigüedad: 14 años, 11 meses
Puntos: 1
Respuesta: Chekbox y mysql

Hola Patriarka,

Nada, no funciona, ya habia probado con los radio pero el problema con esos es que si escojo la primera fila y escojo en la segunda, tercera, cuarta fila o cualquier otra, se pierde la seleccion en la primera y solo queda seleccionado 1.

Y con el check solo un check tengo el mismo problema si dejo una fila vacia.

Taalves si se te ocurre alguna otra forma de hacerlo te lo agradeceria fullllll.
__________________
En este mundo no existen las casualidades, solo lo inevitable.
  #10 (permalink)  
Antiguo 31/07/2014, 12:37
Avatar de Patriarka  
Fecha de Ingreso: enero-2011
Ubicación: Moreno, Buenos Aires, Argentina
Mensajes: 2.851
Antigüedad: 13 años, 2 meses
Puntos: 288
Respuesta: Chekbox y mysql

esta mal tu ultimo codigo, fijate bien copia y pega este codigo que te puse antes:
es tan simple como eso
Código PHP:
Ver original
  1. <?
  2.   if (isset($_POST['nombre'])){
  3.             for($i = 0; $i<count($nom_prod); $i++){
  4. $_ent_si_no = (isset($ent_si_no[$i]) && !empty($ent_si_no[$i])) ? $ent_si_no[$i] : 0;
  5.  
  6.  
  7.  
  8.                 $acta="INSERT INTO ps_acta (ing_si_no, observacion, product_id, user_id, reference, cantidad, total)
  9.               VALUES ('$_ent_si_no', '$obs_ent[$i]', '$prod_id[$i]', '$user[$i]', '$refer_ped[$i]', '$cant_prod[$i]', '$tot_com[$i]')";
  10.                 Db::getInstance()->execute($acta); }
  11.        } else {
  12.         echo 'aun no guarda nada';
  13.        }  
  14. ?>

Última edición por Patriarka; 31/07/2014 a las 12:45

Etiquetas: chekbox, html, mysql, tabla
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 19:18.