Foros del Web » Programando para Internet » PHP »

Error al Actualizar varios registros a la vez con PHP

Estas en el tema de Error al Actualizar varios registros a la vez con PHP en el foro de PHP en Foros del Web. Buenos días amigos, estoy intentando actualizar varios registros a la vez desde un formulario PHP y me sale el siguiente error : "Request-URI Too Large ...
  #1 (permalink)  
Antiguo 25/07/2012, 04:18
 
Fecha de Ingreso: abril-2011
Mensajes: 103
Antigüedad: 13 años, 7 meses
Puntos: 3
Error al Actualizar varios registros a la vez con PHP

Buenos días amigos,

estoy intentando actualizar varios registros a la vez desde un formulario PHP y me sale el siguiente error : "Request-URI Too Large The requested URL's length exceeds the capacity limit for this server."

Mi problema es el siguiente:
Primero muestro una serie de registros a partir de aplicar una serie de filtros a un formulario. Cuantos menos requisitos, más registros se mostrarán.
Cada uno de esos registros va acompañado de un checkbox y al enviar el formulario, quiero que me actualice un campo de esos registros sólo en el caso de que el checkbox esté marcado.

validar_ver.tpl.php -> esta es la plantilla donde se muestran los datos y desde la que quiero que se saquen los registros a actualizar.
Código:
<form action="informecliente.admin.php">
<input type="" name="accion" value="actvalidarbloque">

<table border="1" bgcolor="#ffffff" cellspacing="0" cellpadding="3" width="50%" align="left">

if (isset($resultado_informe) && count($resultado_informe)>0) {
    $i=1;
    foreach($resultado_informe as $resultado) {
     
     for($m=1;$m<=50;$m++){
	$j=1;
	
?>
<tr>
    
    <td><input type="checkbox" name="validate<?=$m?>">
        <input style="visibility:hidden; width:1px;" value="<?=$resultado['idtrabajo']?>" name="idtrabajo"/>
        <input style="visibility:hidden; width:1px;" value="<?=$resultado['idtrabajo']?>" name="idtrabaj<?=$m?>"/></td>
	
    <td><?=$resultado['grupo'];?></td>
    <td><?=$resultado['cliente'];?></td>
</tr>
}}}

</table>
<input class="envio" type="submit" value="Validar Bloque" />
informecliente.php Desde este archivo, necesito actualizar un campo de los registros que tengan su checkbox activado. Este trozo de código está incluido dentro de un switch

Código:
	case 'actvalidarbloque':
		    
	for ($i=1;;$i++){
		
	$idtrab = $_POST['idtrabaj'.$i];
     	$val= $_POST['validate'.$i];
	
	$validar= new InformeCliente();
	$validar->validarCampoValidar($val);
	
if ($validar==1){
    
      $query = "UPDATE trabajos SET estadocliente ='SI' WHERE idtrabajo ='$idtrab';";
    
      if (mysql_query($query))
    
         echo "<br>Ha sido validada la actividad". $idtrab;
   }
   else{}
}   
	break;
La función validarCampoValidar me devuelve 0 o 1 en función de si esta activado o no el checkbox.

Gracias por adelantado y un saludo
  #2 (permalink)  
Antiguo 25/07/2012, 06:57
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 8 meses
Puntos: 574
Respuesta: Error al Actualizar varios registros a la vez con PHP

Creo que si defines el metodo del formulario lo tendrás solucionado

<form action="informecliente.admin.php" method="post">

al no definir el metodo esta usando get y debes estar generando una url muy larga ya que get transfire los datos por la url....

No se si puede haber un servidor que no le gusten esos nombres de fichero con dos puntos que estas usando, supongo que habrias tenido problemas antes.
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Última edición por quimfv; 25/07/2012 a las 07:09
  #3 (permalink)  
Antiguo 25/07/2012, 07:26
 
Fecha de Ingreso: abril-2011
Mensajes: 103
Antigüedad: 13 años, 7 meses
Puntos: 3
Respuesta: Error al Actualizar varios registros a la vez con PHP

Muchas gracias! vaya error más tonto...

aún así no consigo que funcione. Creo que el problema está en que recorre todos la lista de registros (a veces pueden ser cientos), en vez de recorre unicamente los que tienen el checkbox marcado. He aprobado a aumentar el tiempo de ejecución con set_time_limit() pero me sigue saliendo el mensaje "Fatal error: Maximum execution time of 30 seconds exceeded in..."

¿Alguna idea?

Gracias como siempre
  #4 (permalink)  
Antiguo 26/07/2012, 01:12
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 8 meses
Puntos: 574
Respuesta: Error al Actualizar varios registros a la vez con PHP

Este error es distinto.... quizas lo que deberias hacer es crear una string con todos los $idtrab con Si y luego lanzar la consulta de esta forma

UPDATE trabajos SET estadocliente ='SI' WHERE idtrabajo IN (...lista de $idtrab SI...);

UPDATE trabajos SET estadocliente ='NO' WHERE idtrabajo NOT IN (...lista de $idtrab SI...);

la lista debe ser sin delimitadores y con los valores separados por comas (sin coma al final)

1,4,6,7
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #5 (permalink)  
Antiguo 26/07/2012, 02:14
 
Fecha de Ingreso: abril-2011
Mensajes: 103
Antigüedad: 13 años, 7 meses
Puntos: 3
Respuesta: Error al Actualizar varios registros a la vez con PHP

Muchas gracisa Quimfv por tu ayuda, pero no sé cómo crear un string con todos los $idtrab que tienen el checkbox a SI. ¿podrías explicármelo un pelin más o con un ejemplo?

La parte de SQL sí la tengo más clara.

Muchas gracias de nuevo!
  #6 (permalink)  
Antiguo 26/07/2012, 07:29
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 8 meses
Puntos: 574
Respuesta: Error al Actualizar varios registros a la vez con PHP

Cita:
for ($i=1;;$i++){
Acabo de ver un error que explica por que no terminaba de ejecutarse el script!!!!!

ese for es un bucle infinito te falta el limite

for ($i=1;$i<...algo..;$i++)

desde i igual a 1 hasta algo subiendo 1 de uno en uno...

mira si funciona con

$j=1;
for ($i=0;$i<count($_POST);$i++){

$idtrab = $_POST['idtrabaj'.$j];
$val= $_POST['validate'.$j];
$j++;
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #7 (permalink)  
Antiguo 02/08/2012, 06:14
 
Fecha de Ingreso: abril-2011
Mensajes: 103
Antigüedad: 13 años, 7 meses
Puntos: 3
Respuesta: Error al Actualizar varios registros a la vez con PHP

Muchas gracias por tu ayuda quimfv. Casi casi lo tengo. Gracias.

Digo casi porque no consigo que termine de funcionar. Ya entra en el bucle, gracias al límite aunque debo definirlo mejor (recoge todos los $_POST que hay en el formulario y no sólo los de $idtrabajo).

El problema que tengo ahora es en la validación del checkbox. Si está a 0, tiene que ejecutar una sentencia de actualización sobre un registro de sql, y si está activado (a 1), me tiene que ejecutar otra sentencia sql. El problema es que toma todos los checkbox como si estuvieran a 1.

La función ValidacionTrabajos la he usado de forma parecida en otros casos y no he tenido este problema

Código:
    public function ValidacionTrabajos($val){
        if ($val == null || $val == ''){
            $validacion=0;
            }
            else{
            $validacion=1;
            }
            return $validacion;
    
    }    
}
esta es el código que recoge los datos del formulario y llama a la función ValidacionTrabajos:
Código:
	case 'actvalidarbloque':

$j=1;
	for ($i=1;$i<count($_POST);$i++){
	
	$idtrab = $_POST['idtrabaj'.$j];
     	$val= $_POST['validate'.$j];
	
	$validar= new InformeCliente();
	$validar->validarCampoValidar($val);
	
if ($validar==0){
    
      $query = "UPDATE trabajos SET estadocliente ='' WHERE idtrabajo ='$idtrab';";
  
	
	$consulta = new Consulta($query);    
   }
   else{
        $query = "UPDATE trabajos SET estadocliente ='SI' WHERE idtrabajo ='$idtrab';";
	    
	$consulta = new Consulta($query);    
         echo "<br>Ha sido validada la actividad". $idtrab;
   }

$j++;

}

    $tpl_cuerpo = 'validar_ver.tpl.php';

	break;
Y esta la plantilla que muestra los trabajos y el checkbox
Código:
    
foreach($resultado_informe as $resultado) {
    $i++ ;
    
	$j=1;
	
?>
<tr>
    <!
    <td><input type="checkbox" name="validate<?=$i?>">
        <input style="visibility:; width:1px;" value="<?=$resultado['idtrabajo']?>" name="idtrabaj<?=$i?>"/>
</td>
</tr>
}

Muchas gracias de nuevo por adelantado!
  #8 (permalink)  
Antiguo 02/08/2012, 07:25
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 8 meses
Puntos: 574
Respuesta: Error al Actualizar varios registros a la vez con PHP

Agrega un condicional que discrimine con que datos del post debe ejecutar la consulta, con los demas que no haga nada....
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Etiquetas: formulario, mysql, registro, registros, vez
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 22:22.