Do while , no resetea PHP,MySQL

Estoy haciendo una página programada en PHP que conecta con una base de datos MySQL pero resulta que al lanzar un do while para sacar los datos de la consulta no puedo usar dicha consulta de nuevo para usarla en otro do while es decir solo me saca los datos en el primer do while, ¿cómo puedo solucionarlo?

1 Respuesta

Respuesta
1
¿No estarás excediendo el tiempo máximo de ejecución?
Si es posible postea el código implicado.
Hola de nuevo experto, primero agradecer la rápida atención a continuación dejo un código simple de la pregunta que estoy plantendo:
<?
/*Conexion MySQL*/
$conexion = mysql_connect("localhost", "root");
mysql_select_db("ejemplo", $conexion);
//fin de conexion MySQL
$consulta="SELECT * FROM usuario";
$resultado=mysql_query($consulta, $conexion);
$array=mysql_fetch_array($resultado);
//Ahora el formulario por ejemplo:
echo "
<html>
<head>
<title>ejemplo simple</title>
</head>
<body>
<form name='formuejemplo' method=POST action=loquesea.php>
<select name='lista1'>";
//Primer do while 'este si devuelve los datos de la consulta correctamente'
do {
echo "<option value='$array[id_usuario]'>$array[nombre_usuario] </option>";
}while ($array= mysql_fetch_array($resultado));
echo "
</select>
<br>
<select name='lista2'>";
//Segundo do while 'aun siendo exactamente como el otro ya no devuelve la consulta'
do {
echo "<option value='$array[id_usuario]'>$array[nombre_usuario] </otion>";
}while ($array= mysql_fetch_array($resultado));
echo "
</select>
</form>
</body>
</html>
";
?>
He pensado que el segundo do while no devuelve valor porque ya está lleno el array del primer do while y está cumpliendo ya la condición del segundo, mi intención es que se puedan hacer más de 1 select "en este caso" con la misma consulta, espero haberme explicado bien gracias de nuevo experto!
Lo que sucede es que el segundo bucle encuentra un array vacío. Al recorrerlo la primera vez lo vacías. Da igual que lo copies o lo que hagas, internamente es un Resource y una vez recorrido desaparece, la solución es volcarlo primero a un array y reutilizarlo después las veces que necesitemos.
Hola de nuevo experto, primero agradecer la rápida atención a
Continuación dejo un código simple de la pregunta que estoy plantendo:
<?
/*Conexion MySQL*/
$conexion = mysql_connect("localhost", "root");
mysql_select_db("ejemplo", $conexion);
//fin de conexion MySQL
$consulta="SELECT * FROM usuario";
//aqui insertamos el cambio
$result=mysql_fetch_array($resultado);
for($i = 0; $array_maestro[$i] = mysql_fetch_assoc($result); $i++) ;
Array_pop($array_maestro); //hay que eliminar el elemento vacío, de todas formas controla que no te falte un registro, si te pasa borra esta línea
$array=$array_maestro;
 resto código..................
$array=$array_maestro;
Resto código...
Esto te permite usar el array de forma asociativa, es decir por los nombres de las columnas de la tabla, por lo que el resto de tu código debería funcionar sin cambios.
Si te funciona no seas tacaño con los puntos ;)
Ahora lo que hace es sacar solo el primer valor de la consulta en este caso 'usuario1', en la base de datos 'ejemplo' tengo usuario1, usuario2, usuario3, usuario4. Ahora mismo lo que me hace el siguiente código es sacar solo usuario1 en el select, espero no estar siendo una carga xD, gracias por la ayuda!:
<?
/*Conexion MySQL*/
$conexion = mysql_connect("localhost", "root");
mysql_select_db("ejemplo", $conexion);
//fin de conexion MySQL
$consulta="SELECT * FROM usuario";
//aqui insertamos el cambio
$resultado=mysql_query($consulta, $conexion);
//$result=mysql_fetch_array($resultado);
$array_maestro=mysql_fetch_array($resultado);
for($i = 0; $array_maestro[$i] = mysql_fetch_assoc($resultado); $i++) ;
array_pop($array_maestro); //hay que eliminar el elemento vacío, de todas formas controla que no te falte un registro, si te pasa borra esta línea
$array=$array_maestro;
echo "
<html>
<head>
<title>ejemplo simple</title>
</head>
<body>
<form name='formuejemplo' method=POST action=loquesea.php>
<select name='lista1'>";
//Primer do while
do {
echo "<option value='$array[id_usuario]'>$array[nombre_usuario] </option>";
}while ($array= mysql_fetch_assoc($resultado));
echo "
</select>
<br>
<select name='lista2'>";
$array=$array_maestro;
//Los dos do while devuelven el primer valor 'usuario1'
do {
echo "<option value='$array[id_usuario]'>$array[nombre_usuario] </otion>";
}while ($array= mysql_fetch_assoc($resultado));
echo "
</select>
</form>
</body>
</html>
";
?>
Se me olvido mencionarlo en el comentario anterior, ¿es posible hacerlo con un foreach que lo que hace es leer el array y no machacarlo?, no se si voy mal encaminado :/, mil gracias por las contestaciones de nuevo!
Ok cambia esto:
$resultado=mysql_query($consulta, $conexion);
//$result=mysql_fetch_array($resultado);
$array_maestro=mysql_fetch_array($resultado);
for($i = 0; $array_maestro[$i] = mysql_fetch_assoc($resultado); $i++) ;
Array_pop($array_maestro); //hay que eliminar el elemento vacío, de
todas formas controla que no te falte un registro, si te pasa borra
esta línea
$array=$array_maestro;
>>>>>>
$resultado=$array_maestro;
y luego en el segundo bucle:
<br>
<select name='lista2'>";
$array=$array_maestro;
>>>>>>
$resultado=$array_maestro;
Gracias por la aclaración experto!, tuve que cambiar un poco más de código pero me encaminaste bien te doy 5 puntos y no te doy más porque no puedo, gracias de nuevo

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas