Foros del Web » Programando para Internet » PHP »

Actualizar varios registros mediante checkbox

Estas en el tema de Actualizar varios registros mediante checkbox en el foro de PHP en Foros del Web. Hola a todos Tengo un formulario donde muestro algunos datos en base a una consulta, y pretendo actualizar esos registros mediante un checkbox siendo así ...
  #1 (permalink)  
Antiguo 07/01/2013, 17:20
Avatar de Briss  
Fecha de Ingreso: junio-2011
Mensajes: 1.293
Antigüedad: 12 años, 9 meses
Puntos: 12
Actualizar varios registros mediante checkbox

Hola a todos
Tengo un formulario donde muestro algunos datos en base a una consulta, y pretendo actualizar esos registros mediante un checkbox
siendo así que los registros donde marque el checkbox (Lo seleccione)... deben actualizarse
Si marco un solo registro funciona bien se actualiza... pero al momento de marcar todos solo se actualiza uno y los demás en el campo a actualizar quedan vacios....
¿Que estoy haciendo mal?
De antemano GRACIAS





Formulario

<form action="<?php echo $editFormAction; ?>" method="post" id="form1">
<table>

<thead>
<tr>
<td></td>
<td>ID</td>
<td>Nombre</td>
<td>Seleccionar</td>
</tr>
</thead>
<?php do { ?>
<tbody>
<tr>
<input type="hidden" name="idg[]" id="idg" value="" size="26" />Este valor lo obtengo al elegir un elemento en un select (esto es lo que debo actualizar)

<td><input type="text" name="clave3[]" id="clave3" value="<? echo $row_productos['id']; ?>" size="10" /></td>
<td><? echo $row_productos['Nombre']; ?></td>
<td><input name="aprobar[]" value="<? echo $row_productos['id'];?>" type="checkbox" /><td>

</tr>
</tbody>
<?php } while ($row_productos = mysql_fetch_assoc($productos)); ?>
</table>


<input type="submit" value="Actualizar" />

<input type="hidden" name="MM_update" value="form1" />


</form>






PARA ACTUALIZAR

Código PHP:
if ((isset($_POST["MM_update"])) && ($_POST["MM_update"] == "form1")) {
if( 
is_array $_POST 'aprobar' ])) 


   foreach(
$_POST["aprobar"] as $i => $value){


                 
$estado$_POST['idg'][$i];
                 
$id$_POST['aprobar'][$i];
         
$query=mysql_query("update productos SET estado='$estado' WHERE id='$id'");
                      

                       
  
mysql_select_db($database_connection$connection);


  
$updateGoTo "index.php";
  if (isset(
$_SERVER['QUERY_STRING'])) {
    
$updateGoTo .= (strpos($updateGoTo'?')) ? "&" "?";
    
$updateGoTo .= $_SERVER['QUERY_STRING'];
  }    
    } 
  #2 (permalink)  
Antiguo 08/01/2013, 10:20
Avatar de ginitofl  
Fecha de Ingreso: diciembre-2006
Ubicación: Lima Perú
Mensajes: 349
Antigüedad: 17 años, 4 meses
Puntos: 22
Respuesta: Actualizar varios registros mediante checkbox

Hola aqui deje un ejemplo parecido a tu problema:

http://www.forosdelweb.com/f18/consu...ckbox-1030607/
  #3 (permalink)  
Antiguo 08/01/2013, 10:57
Avatar de Briss  
Fecha de Ingreso: junio-2011
Mensajes: 1.293
Antigüedad: 12 años, 9 meses
Puntos: 12
Respuesta: Actualizar varios registros mediante checkbox

Hola gracias he intentado adecuarlo a tu ejemplo pero no consigo q actualice

Código PHP:
if ((isset($_POST["MM_update"])) && ($_POST["MM_update"] == "form1")) {



$usuarios array_keys($_POST['usuarios']); 
$usuarios implode("','"$usuarios); 
$usuarios "'" $usuarios "'"
   


                 
$estado$_POST['idg'][$i];
                 
$id$_POST['aprobar'][$i];
                 
$query=mysql_query("update productos SET estado='$estado' WHERE id in ($usuarios)");
                      
                       
  
mysql_select_db($database_connection$connection); 
  #4 (permalink)  
Antiguo 08/01/2013, 10:58
Avatar de Briss  
Fecha de Ingreso: junio-2011
Mensajes: 1.293
Antigüedad: 12 años, 9 meses
Puntos: 12
Respuesta: Actualizar varios registros mediante checkbox

En el campo que debe actualizar se pone sin ningun texto aunque sea un solo registro (antes funcionaba al seleccionar solo uno)
  #5 (permalink)  
Antiguo 08/01/2013, 11:34
Avatar de Briss  
Fecha de Ingreso: junio-2011
Mensajes: 1.293
Antigüedad: 12 años, 9 meses
Puntos: 12
Respuesta: Actualizar varios registros mediante checkbox

Lo cambie guiandome en un ejemplo y lo deje asi


Código PHP:
if ((isset($_POST["MM_update"])) && ($_POST["MM_update"] == "form1")) {
if( isset( 
$_POST 'aprobar' ])) 


    
$actualizar$_POST["aprobar"]; 
    
$cantidad count($actualizar) ;
    for (
$i=0$i<$cantidad$i++){  

                 
$del_id $actualizar[$i]; 
                 
$estado$_POST['idg'][$i];
                 
                
                
        
$query=mysql_query("update productos SET estado='$estado' WHERE  id='$del_id '");
                      

                       
  
mysql_select_db($database_connection$connection); 

aprobar es mi check en el form

<input name="aprobar[]" value="<? echo $row_c['id'];?>" type="checkbox" />


Pero pasa lo mismo solo funciona al seleccionar un registro en dos o mas no actualiza solo uno , los demas deja vacio el campo estado :(


Ayuda por fa
  #6 (permalink)  
Antiguo 08/01/2013, 16:29
Avatar de Briss  
Fecha de Ingreso: junio-2011
Mensajes: 1.293
Antigüedad: 12 años, 9 meses
Puntos: 12
Respuesta: Actualizar varios registros mediante checkbox

Alguien sabe porque solo puedo actualizar un solo registros....
No encuentro mi error :s
  #7 (permalink)  
Antiguo 08/01/2013, 17:02
Avatar de DeivisAndres  
Fecha de Ingreso: febrero-2012
Ubicación: Colombia
Mensajes: 305
Antigüedad: 12 años, 2 meses
Puntos: 41
Respuesta: Actualizar varios registros mediante checkbox

Por que no lo intentas de esta manera para ver si te funciona:

Código PHP:
Ver original
  1. if ((isset($_POST["MM_update"])) && ($_POST["MM_update"] == "form1")) {
  2.     if( isset( $_POST [ 'aprobar' ]))  
  3.     {
  4.         $estado = $_POST['idg'];
  5.  
  6.             $actualizar= $_POST["aprobar"];
  7.         for ($i=0; $i<count($actualizar); $i++){
  8.                     $del_id = $actualizar[$i];                                                                       
  9.             $query=mysql_query("update productos SET estado='".$estado[$i]."' WHERE  id='$del_id'");                                                
  10.             mysql_select_db($database_connection, $connection);
  11.         }
  12.     }
  13. }

Pero de todas formas de donde sale el $_POST['idg'] que no lo veo en el formulario ? y verifica que las {} estén bien ubicadas y donde ejecutas la Query este dentro de los {} del for.
  #8 (permalink)  
Antiguo 08/01/2013, 18:06
Avatar de Briss  
Fecha de Ingreso: junio-2011
Mensajes: 1.293
Antigüedad: 12 años, 9 meses
Puntos: 12
Respuesta: Actualizar varios registros mediante checkbox

Gracias pero se tarda bastante en actualizar y actualizar deja en blanco mi campo estado... no actualiza ni aun en un solo registro
  #9 (permalink)  
Antiguo 08/01/2013, 19:13
Avatar de Briss  
Fecha de Ingreso: junio-2011
Mensajes: 1.293
Antigüedad: 12 años, 9 meses
Puntos: 12
Respuesta: Actualizar varios registros mediante checkbox

Sigo probando asi
Código PHP:
if ((isset($_POST["MM_update"])) && ($_POST["MM_update"] == "form1")) { 
if( isset( 
$_POST 'aprobar' ]))  
{  

    
$actualizar$_POST["aprobar"];  
    
$cantidad count($actualizar) ; 
    for (
$i=0$i<$cantidad$i++){   

                 
$del_id $actualizar[$i];  
                 
$estado$_POST['idg'][$i]; 
                  
                 
                 
        
$query=mysql_query("update productos SET estado='$estado' WHERE  id='$del_id '"); 
                       

                        
  
mysql_select_db($database_connection$connection); 

Pero no entiendo porque al querec actualizar mas de un registro solo me actualiza el primero y los demas en estado quedan en blanco
  #10 (permalink)  
Antiguo 09/01/2013, 07:13
Avatar de DeivisAndres  
Fecha de Ingreso: febrero-2012
Ubicación: Colombia
Mensajes: 305
Antigüedad: 12 años, 2 meses
Puntos: 41
Respuesta: Actualizar varios registros mediante checkbox

Por que no imprimes el array para ver si te esta recogiendo los datos que necesitas y en cuanto a la id es de tipo varchar o int ?
  #11 (permalink)  
Antiguo 09/01/2013, 10:45
Avatar de Briss  
Fecha de Ingreso: junio-2011
Mensajes: 1.293
Antigüedad: 12 años, 9 meses
Puntos: 12
Respuesta: Actualizar varios registros mediante checkbox

Gracias por tu respuesta ... veras mi id es varchar (pero unico) mezclo numeros y letras...
ammm lo raro es que si mando a actualizar un solo registro lo hace si pongo 2 o mas solo actualiza bien uno y los demás los deja en blanco
  #12 (permalink)  
Antiguo 09/01/2013, 12:15
Avatar de DeivisAndres  
Fecha de Ingreso: febrero-2012
Ubicación: Colombia
Mensajes: 305
Antigüedad: 12 años, 2 meses
Puntos: 41
De acuerdo Respuesta: Actualizar varios registros mediante checkbox

Cita:
Iniciado por Briss Ver Mensaje
Gracias por tu respuesta ... veras mi id es varchar (pero unico) mezclo numeros y letras...
ammm lo raro es que si mando a actualizar un solo registro lo hace si pongo 2 o mas solo actualiza bien uno y los demás los deja en blanco
Por lo mismo te digo que imprimar el array para ver si los datos están, como así: print_r($actualizar);. pero igual verifica que mysql_select_db($database_connection, $connection); este dentro del ciclo for ya que debe ejecutar la actualización varias veces, y una cosa mas el $_POST['idg'] es un array de igual forma ?

Bueno pruebalo de esta forma para ver:

Código PHP:
Ver original
  1. if ((isset($_POST["MM_update"])) && ($_POST["MM_update"] == "form1")) {  
  2.     if( isset( $_POST [ 'aprobar' ]))  
  3.     {
  4.         $estado = $_POST['idg'];
  5.             $actualizar = $_POST["aprobar"];  
  6.             $cantidad = count($actualizar);  
  7.             for ($i=0; $i<$cantidad; $i++){    
  8.                     $del_id = $actualizar[$i];                                    
  9.                    
  10.             $UpdateSql = "UPDATE productos SET estado='".$anios[$i]."' WHERE id='$del_id'";
  11.             mysql_select_db($database_conexion, $conexion) or die('No se puede conectar a la base de datos. ' . mysql_error());
  12.                 $query = mysql_query($UpdateSql, $conexion);           
  13.         }
  14.     }
  15. }

NOTA: pon el mysql_select_db($database_conexion, $conexion) or die('No se puede conectar a la base de datos. ' . mysql_error()); arriba del $query = mysql_query($UpdateSql, $conexion);
  #13 (permalink)  
Antiguo 09/01/2013, 12:33
 
Fecha de Ingreso: enero-2012
Ubicación: Mexico Df
Mensajes: 95
Antigüedad: 12 años, 3 meses
Puntos: 6
Respuesta: Actualizar varios registros mediante checkbox

Cita:
Iniciado por Briss Ver Mensaje

<?php do { ?>
<tbody>
<tr>
<input type="hidden" name="idg[]" id="idg" value="" size="26" />Este valor lo obtengo al elegir un elemento en un select (esto es lo que debo actualizar)

<td><input type="text" name="clave3[]" id="clave3" value="<? echo $row_productos['id']; ?>" size="10" /></td>
<td><? echo $row_productos['Nombre']; ?></td>
<td>
<input name="aprobar[]" value="<? echo $row_productos['id'];?>" type="checkbox" /><td>


</tr>
</tbody>
<?php } while ($row_productos = mysql_fetch_assoc($productos)); ?>
</table>


<input type="submit" value="Actualizar" />

<input type="hidden" name="MM_update" value="form1" />


</form>


[/PHP]

El campo del checkbox puedes recibirlo asi
Código PHP:
Ver original
  1. $aprobar = $_REQUEST['aprobar'];
  2. $aprobar= implode(',', $aprobar);

Esto te debería de quedar algo así 155,108,1087,174,125

si el estado al que vas actualizar es el mismo para todos los que esta seleccionados en el checked podrías modificar tu query

Código PHP:
Ver original
  1. query=mysql_query("update productos SET estado='$estado' WHERE  id IN ($aprobar)");

Espero ayudarte

Saludos
__________________
Mi proyecto web Desarrollo-Tech visitame http://www.desarrollo-tech.com
  #14 (permalink)  
Antiguo 09/01/2013, 12:43
Avatar de Briss  
Fecha de Ingreso: junio-2011
Mensajes: 1.293
Antigüedad: 12 años, 9 meses
Puntos: 12
Respuesta: Actualizar varios registros mediante checkbox

Cita:
Iniciado por cesar_viridi Ver Mensaje
El campo del checkbox puedes recibirlo asi
Código PHP:
Ver original
  1. $aprobar = $_REQUEST['aprobar'];
  2. $aprobar= implode(',', $aprobar);

Esto te debería de quedar algo así 155,108,1087,174,125

si el estado al que vas actualizar es el mismo para todos los que esta seleccionados en el checked podrías modificar tu query

Código PHP:
Ver original
  1. query=mysql_query("update productos SET estado='$estado' WHERE  id IN ($aprobar)");

Espero ayudarte




Saludos
Gracias pero NO actualiza nada
  #15 (permalink)  
Antiguo 09/01/2013, 12:45
Avatar de Briss  
Fecha de Ingreso: junio-2011
Mensajes: 1.293
Antigüedad: 12 años, 9 meses
Puntos: 12
Respuesta: Actualizar varios registros mediante checkbox

Código PHP:
if ((isset($_POST["MM_update"])) && ($_POST["MM_update"] == "form1")) {

$aprobar $_REQUEST['aprobar'];
$aprobarimplode(','$aprobar); 
                 
$estado$_POST['idg'][$i];
                
                
                
                
$query=mysql_query("Update productos SET estado='$estado' WHERE  id IN ($aprobar)");
                      

                       
  
mysql_select_db($database_connection$connection); 
Lo deje asi pero Nada
  #16 (permalink)  
Antiguo 09/01/2013, 12:55
 
Fecha de Ingreso: enero-2012
Ubicación: Mexico Df
Mensajes: 95
Antigüedad: 12 años, 3 meses
Puntos: 6
Respuesta: Actualizar varios registros mediante checkbox

prodrias probar imprimiendo la consulta y ver que dice

Código PHP:
Ver original
  1. echo "Update productos SET estado='$estado' WHERE  id IN ($aprobar)";
__________________
Mi proyecto web Desarrollo-Tech visitame http://www.desarrollo-tech.com
  #17 (permalink)  
Antiguo 09/01/2013, 13:04
Avatar de Briss  
Fecha de Ingreso: junio-2011
Mensajes: 1.293
Antigüedad: 12 años, 9 meses
Puntos: 12
Respuesta: Actualizar varios registros mediante checkbox

Update productos SET estado='' WHERE id IN (1a,2a,3a)
Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\....php:97) line 108

Código PHP:
if ((isset($_POST["MM_update"])) && ($_POST["MM_update"] == "form1")) {

$aprobar $_REQUEST['aprobar'];
$aprobarimplode(','$aprobar); 
                 
$estado$_POST['idg'][$i];
                
                
                
            
$query=mysql_query("Update productos SET estado='$estado' WHERE  id IN ($aprobar)");
                      
echo 
"Update productos SET estado='$estado' WHERE  id IN ($aprobar)";
                       
  
mysql_select_db($database_connection$connection);


  
$updateGoTo "tsu.php";
  if (isset(
$_SERVER['QUERY_STRING'])) {
    
$updateGoTo .= (strpos($updateGoTo'?')) ? "&" "?";
    
$updateGoTo .= $_SERVER['QUERY_STRING'];
  }    
   
  
header(sprintf("Location: %s"$updateGoTo));/*esta linea es la 108*/

  #18 (permalink)  
Antiguo 09/01/2013, 13:11
Avatar de Briss  
Fecha de Ingreso: junio-2011
Mensajes: 1.293
Antigüedad: 12 años, 9 meses
Puntos: 12
Respuesta: Actualizar varios registros mediante checkbox

la linea 108 ya la arregle pero no actualiza
  #19 (permalink)  
Antiguo 09/01/2013, 13:39
Avatar de Briss  
Fecha de Ingreso: junio-2011
Mensajes: 1.293
Antigüedad: 12 años, 9 meses
Puntos: 12
Respuesta: Actualizar varios registros mediante checkbox

Ya corregi esos detalles ahora al tratar de actualizar obtengo esto

Unknown column '1a' in 'where clause'

Por que????
  #20 (permalink)  
Antiguo 09/01/2013, 13:52
Avatar de Briss  
Fecha de Ingreso: junio-2011
Mensajes: 1.293
Antigüedad: 12 años, 9 meses
Puntos: 12
Respuesta: Actualizar varios registros mediante checkbox

Lo solucione asi IN ('$aprobar')


con las comillas simple...

pero solo actualiza un solo registro si marco dos no actualiza nada


  #21 (permalink)  
Antiguo 09/01/2013, 16:43
 
Fecha de Ingreso: enero-2012
Ubicación: Mexico Df
Mensajes: 95
Antigüedad: 12 años, 3 meses
Puntos: 6
Respuesta: Actualizar varios registros mediante checkbox

el probleme puede ser tu variable

$estado= $_POST['idg'][$i];


esta variable puede tener diferente valor? o uno mismo??

Saludos...
__________________
Mi proyecto web Desarrollo-Tech visitame http://www.desarrollo-tech.com
  #22 (permalink)  
Antiguo 09/01/2013, 16:46
Avatar de Briss  
Fecha de Ingreso: junio-2011
Mensajes: 1.293
Antigüedad: 12 años, 9 meses
Puntos: 12
Respuesta: Actualizar varios registros mediante checkbox

Cita:
Iniciado por cesar_viridi Ver Mensaje
el probleme puede ser tu variable

$estado= $_POST['idg'][$i];


esta variable puede tener diferente valor? o uno mismo??

Saludos...
Un solo en input capturo el elemnto seleccionada en un select....
PERO ese no es el error ya que en mi consulta define un estado (para no cachar la variable idg)

Pero aun asi si marco un solo check actualiza sin problemas...
si marco 2 o mas no actualiza nada
  #23 (permalink)  
Antiguo 09/01/2013, 17:03
Avatar de DeivisAndres  
Fecha de Ingreso: febrero-2012
Ubicación: Colombia
Mensajes: 305
Antigüedad: 12 años, 2 meses
Puntos: 41
De acuerdo Respuesta: Actualizar varios registros mediante checkbox

Cita:
Iniciado por Briss Ver Mensaje
Un solo en input capturo el elemnto seleccionada en un select....
PERO ese no es el error ya que en mi consulta define un estado (para no cachar la variable idg)

Pero aun asi si marco un solo check actualiza sin problemas...
si marco 2 o mas no actualiza nada
Pero si esa variable es de un select por que lo pones como si fuera un array, por que no le quitas el [$i] que esta a su lado y lo dejas $estado = $_POST['idg'];
  #24 (permalink)  
Antiguo 09/01/2013, 17:09
Avatar de Briss  
Fecha de Ingreso: junio-2011
Mensajes: 1.293
Antigüedad: 12 años, 9 meses
Puntos: 12
Respuesta: Actualizar varios registros mediante checkbox

Cita:
Iniciado por DeivisAndres Ver Mensaje
Pero si esa variable es de un select por que lo pones como si fuera un array, por que no le quitas el [$i] que esta a su lado y lo dejas $estado = $_POST['idg'];
Cambie mi consulta a delete para borrar registros (solo para probar si tenia algo mal en el update)

y sorpresa solo borra tambien un solo registro si pongo 2 o mas no hace nada
  #25 (permalink)  
Antiguo 09/01/2013, 17:53
 
Fecha de Ingreso: enero-2012
Ubicación: Mexico Df
Mensajes: 95
Antigüedad: 12 años, 3 meses
Puntos: 6
Respuesta: Actualizar varios registros mediante checkbox

esto cambialo

Código PHP:
Ver original
  1. <input name="aprobar[]" value="<? echo $row_productos['id'];?>" type="checkbox" />

por

Código HTML:
Ver original
  1. <input name="aprobar[]" value="'<? echo $row_productos['id'];?>'" type="checkbox" />

y el que recibe dejalo como

IN ($aprobar)

sin los apostrofes y pruebas

Saludos...

PD: te mande un mnsje
__________________
Mi proyecto web Desarrollo-Tech visitame http://www.desarrollo-tech.com
  #26 (permalink)  
Antiguo 09/01/2013, 18:08
Avatar de Briss  
Fecha de Ingreso: junio-2011
Mensajes: 1.293
Antigüedad: 12 años, 9 meses
Puntos: 12
Respuesta: Actualizar varios registros mediante checkbox

Marca un error al ejecutar syntax to use near '\'1a\',\'2a\')' at line 1

Etiquetas: checkbox, formulario, mediante, mysql, registro, registros
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:11.