Foros del Web » Programando para Internet » PHP »

Update 30 entradas simultaneas

Estas en el tema de Update 30 entradas simultaneas en el foro de PHP en Foros del Web. Hola Estoy intentando hacer un update con SQL a 30 entradas. Para comenzar las llamo a todas con este código: Código PHP: $i = 1 ...
  #1 (permalink)  
Antiguo 25/08/2011, 04:14
Avatar de Shaito  
Fecha de Ingreso: agosto-2010
Mensajes: 383
Antigüedad: 13 años, 8 meses
Puntos: 37
Update 30 entradas simultaneas

Hola

Estoy intentando hacer un update con SQL a 30 entradas.

Para comenzar las llamo a todas con este código:

Código PHP:
$i=1;
$result=mysql_query("select * from cursos order by id")or die("La base de datos no existe");
while (
$row=mysql_fetch_array($result))
{
    
    echo
'<tr class="odd">
            <td>'
.utf8_encode($row['curso']).'</td>
            <td width="10%" align="center">
                <input type="checkbox" '
; if($row['estado']=='1'){echo'checked="checked"';}; echo' name="curso'.$i++.'" value="1">
            </td>
        </tr>'
;

De este modo obtengo las 30 consultas con un número más en cada input, para poder hacer la update.

Luego, en el envío del formulario tengo este código:

Código PHP:
            $i2=1;
            while(
$i2<=30){ // Un blucle de 30 repeticiones
                
$cursoid=$_POST['curso'.$i2.''];
                if(
$cursoid=='1'){
                
mysql_query("UPDATE cursos SET estado='1' WHERE id='$i2'") or die($error);
                
$i2++;
                }
                else{
mysql_query("UPDATE cursos SET estado='0' WHERE id='$i2'") or die($error);
                }
            } 
De este modo se repite 30 veces, cambiando el id del input que revisa para hacer el update.
Si el input no está checkeado se va a else, sin cambiar el id del input para ponerle un 0 en estado.


Pero me salta un error tras agotar el tiempo de espera: Fatal error: Maximum execution time of 30 seconds exceeded in


Espero que me puedan ayudar, si saben alguna forma mejor de hacer este tipo de update avisen ;)


Un saludo y gracias
__________________
Shaito Hiraga - Diseñador CSS
  #2 (permalink)  
Antiguo 25/08/2011, 04:17
Avatar de repara2  
Fecha de Ingreso: septiembre-2010
Ubicación: München
Mensajes: 2.445
Antigüedad: 13 años, 7 meses
Puntos: 331
Respuesta: Update 30 entradas simultaneas

"Maximum execution time of 30 seconds exceeded" es porque exedes el tiempo máximo de ejecución. O cambias la directiva en tu php.ini o en cadaa vuelta del bucle incrementas el valor con ini_set() en tiempo de ejecución. . Al final del script puedes restaurarlo a su valor original.
Salu2,
__________________
Fere libenter homines, id quod volunt, credunt.
  #3 (permalink)  
Antiguo 25/08/2011, 04:19
Avatar de Shaito  
Fecha de Ingreso: agosto-2010
Mensajes: 383
Antigüedad: 13 años, 8 meses
Puntos: 37
Respuesta: Update 30 entradas simultaneas

Podrías explicarme como adaptarlo a este code?
__________________
Shaito Hiraga - Diseñador CSS
  #4 (permalink)  
Antiguo 25/08/2011, 04:30
Avatar de vgonga1986  
Fecha de Ingreso: marzo-2008
Ubicación: País de Pandereta
Mensajes: 1.021
Antigüedad: 16 años, 1 mes
Puntos: 253
Respuesta: Update 30 entradas simultaneas

Buenas, para empezar, te sobra un ; en la sentencia del if en el que añades el checked. No se pone ; al final de una estructura if, tu tienes esto:
Código PHP:
Ver original
  1. if($row['estado']=='1'){echo'checked="checked"';};

El último sobra. Esto pasa por no hacer el código bien formateado.

Por otro lado, creo que no podemos fiarnos del mensaje de error que te da, ya que no sabemos de donde están viniendo los errores:
Código PHP:
Ver original
  1. $result=mysql_query("select * from cursos order by id")or die("La base de datos no existe");
Código PHP:
Ver original
  1. mysql_query("UPDATE cursos SET estado='1' WHERE id='$i2'") or die($error);
Código PHP:
Ver original
  1. mysql_query("UPDATE cursos SET estado='0' WHERE id='$i2'") or die($error);

En la primera sentencia es muy optimista pensar que eso falla porque no existe la base de datos, puede fallar por mil cosas diferentes. En las otras dos, no sé de dónde viene $error, pero si está declarado antes de hacer las query, seguramente tampoco sea el correcto. Cambia estos mensajes por mysql_error() y tendremos un mensaje seguro de qué falla.

De todas formas, dudo mucho que esos sean los causantes del problema de tu aplicación. Es probable que lo que ocurra es que estés enviando un update a un id que no existe. En tu aplicación se puden eliminar cursos? Te lo digo porque estás utilizando una variable $i2 (que aumenta de uno en uno) para los ids de los cursos. Si tú no modificas la tabla, puede que funcione, pero si borras el registro 4, por ejemplo, la variable sigue pasando por 4. No es que sea muy correcto (ni seguro). Creo que la mejor solución sería la que sigue:
- En el name pones cursos[], así PHP lo pasará por POST como un array de valores. Luego recorres este array con un for o un foreach. Esto también te solventa que tu bucle while está hecho para 30 cursos, pero puedes aumentar la base de datos, por lo que dejaría de funcionar. Con el array te aseguras de que se recorran todos.
- En el value pones el id del curso, que lo tienes en $row['id']. A la hora de comprobar sólo tienes que comprobar que el value esté relleno.

Espero que te quede claro, si no, avisa. Un saludo.
__________________
¿Alguna pregunta, duda, acotación, nota, cuestión, reparo, comentario, demanda, crítica, interpretación, objeción, interrogante, discrepancia, observación, réplica, disquisición, apostilla o exégesis?
  #5 (permalink)  
Antiguo 25/08/2011, 04:39
Avatar de Shaito  
Fecha de Ingreso: agosto-2010
Mensajes: 383
Antigüedad: 13 años, 8 meses
Puntos: 37
Respuesta: Update 30 entradas simultaneas

Arreglado, gracias por la ayuda, pero al final el fallo era del tiempo que se tomaba el while creando un blucle.

Solución sencilla, escribir todos los updates con su id predeterminada, puestas por mi. (Si haces un php con un bucle que te suelte todo hecho es más rápido =P)

Tarda 1 segundo en actualizar y lo hace correctamente


Gracias por la ayuda ;)
__________________
Shaito Hiraga - Diseñador CSS
  #6 (permalink)  
Antiguo 25/08/2011, 04:52
Avatar de vgonga1986  
Fecha de Ingreso: marzo-2008
Ubicación: País de Pandereta
Mensajes: 1.021
Antigüedad: 16 años, 1 mes
Puntos: 253
Respuesta: Update 30 entradas simultaneas

Está bien, pero vuelvo a hacer incapié en que utilizar una variable en PHP para las ids de la base de datos no es una buena solución. Si pasado mañana borras el campo 4 y añades el 31. El bucle que tienes dejará de funcionar, ya que intentará hacer update de un campo que no existe y, además, se saltará un campo que sí existe.

Un saludo.
__________________
¿Alguna pregunta, duda, acotación, nota, cuestión, reparo, comentario, demanda, crítica, interpretación, objeción, interrogante, discrepancia, observación, réplica, disquisición, apostilla o exégesis?
  #7 (permalink)  
Antiguo 25/08/2011, 04:54
Avatar de Shaito  
Fecha de Ingreso: agosto-2010
Mensajes: 383
Antigüedad: 13 años, 8 meses
Puntos: 37
Respuesta: Update 30 entradas simultaneas

En este coso si que sirve ya que son variables fijas en la base de datos.

Son 30 consultas las que se harán y ninguna se borrará.

De no ser así, no recomiendo que se use este método, como bien dices tu.


Un saludo
__________________
Shaito Hiraga - Diseñador CSS

Etiquetas: entradas, mysql, simultaneas, sql, update, formulario
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 12:10.