me podrian explicar el sgte codigo en php

Iniciado por jhonatanAsm, 23 Diciembre 2011, 15:44 PM

0 Miembros y 2 Visitantes están viendo este tema.

jhonatanAsm

hola, creo que el sgte codigo se deberia ejecutarse una sola vez, sin embargo llega a buscar todas las filas de la tabla, por qué?

while($busca=mysqli_fetch_array($consulta))
{
if($busca['nombre']==$nombre && $busca['pass']==$pass)
echo 'ingreso';

break;//este break debería hacer que el while se ejecute una sola vez, mas no lo hace.
}//fin while


espero puedan ayudarme.salu2.
mi primer lenguaje fue ensamblador, tengo 60 años, y no creo que haya sido un error.

- La mayor complejidad de todas es hacer complejo algo que no lo es.

- El inteligente no es aquel que lo sabe todo sino aquel que sabe utilizar lo poco que sabe.


#!drvy

#2
Citar$consulta que trae dentro  

Pues una query x'D.

Na enserio, si pasa por todas las filas de la tabla, es porque la consulta lo indica así y/o porque usas while.

Yo veo que tienes un lio con el if, un lio muy grande xD.
Vamos a ver.

Código (php) [Seleccionar]
while($busca=mysqli_fetch_array($consulta)){
Aquí le indicamos que haga un while en todas las filas devueltas por $consulta.

Código (Php) [Seleccionar]
if($busca['nombre']==$nombre && $busca['pass']==$pass)
echo 'ingreso';

Aquí le hacemos comparacion para ver si coinciden los parametros.
PERO, ni abres el { que va después del if, ni lo cierras después.

Por tanto PHP toma todo lo que esta dentro del while como un if.

Tienes que escapar el if usando { y }, si no, te lias tu y se lia PHP tambien.


Código (php,4,6) [Seleccionar]
while($busca=mysqli_fetch_array($consulta))
{
if($busca['nombre']==$nombre && $busca['pass']==$pass)
{
echo 'ingreso';
}
break;//este break debería hacer que el while se ejecute una sola vez, mas no lo hace.
}//fin while


Saludos

cassiani

Cita de: jhonatanAsm en 23 Diciembre 2011, 15:44 PM
sin embargo llega a buscar todas las filas de la tabla, por qué?

El arreglo se arma con el resultado de la consulta, va a albergar todas las filas del resultado independientemente de si las muestras o no, ahora, no sé si te refieres a eso o a las iteraciones del ciclo.

Creo que debería postear el código completo, yo no veo nada raro en esas líneas de código y efectivamente, debería iterar una sola vez.

monkey, en realidad las llaves no son necesarias si es una sola instrucción la que quieres condicionar, en este caso el echo. Condicionara esa e ignorara las demás líneas.

saludos!!

#!drvy

Mmmmm, fallo mio entonces xD


PD: De todos modos, no apruebo el no usar las { }. Es un lio total xD.
Saludos

Pablo Videla

Cita de: drvy | BSM en 24 Diciembre 2011, 00:05 AM
Mmmmm, fallo mio entonces xD


PD: De todos modos, no apruebo el no usar las { }. Es un lio total xD.
Saludos
Es considerado una mala practica no usarlos.

jhonatanAsm

hola. -$consulta trae una query ( select * from nombreTabla ).
-mi duda es por qué  itera más de una vez?

le agregué a el codigo las llaves, pero esta igual, repitiendo varias veces.
averigue que mysqli_fetch_array() utiliza un puntero para pasar de un valor a otro, así no olvida la posición anterior. posiblemente sea esta funcion la que obliga a repetirse en contra de su voluntad!gracias por las respuestas.salu2.

mi primer lenguaje fue ensamblador, tengo 60 años, y no creo que haya sido un error.

- La mayor complejidad de todas es hacer complejo algo que no lo es.

- El inteligente no es aquel que lo sabe todo sino aquel que sabe utilizar lo poco que sabe.


Shell Root

#8
No entiendo porque la query de esa forma, es decir, supongo que con ese ingreso se supone que es un login de usuario? Debería de ser, algo al estilo...
Código (sql) [Seleccionar]
SELECT pass                -- Campos de la tabla
 FROM tblUsuario             -- Tabla
WHERE usuario = 'usuario' -- Condición
LIMIT 1;                  -- Limitar los resultados de la consulta MySQL a sólo 1

El resultado del campo pass lo guardas en una variable y después verificas qué esa pass de la consulta, sea igual al pass ingresado.
Código (php) [Seleccionar]
print ($returnQuery['pass'] === $pass)?"SI":"NO";


No entiendo porque recorres todos los registros, en busca del user y pass del usuario, sabiendo que también lo puedes hacer directamente desde la query.
Código (sql) [Seleccionar]
SELECT id, nombre, apellido, email
 FROM tblUsuario
WHERE (usuario = 'usuario') AND (pass = 'contraseña')
LIMIT 1;
Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.

jhonatanAsm

#9
buena idea shell root.

gracias por sus respuestas.salu2.
mi primer lenguaje fue ensamblador, tengo 60 años, y no creo que haya sido un error.

- La mayor complejidad de todas es hacer complejo algo que no lo es.

- El inteligente no es aquel que lo sabe todo sino aquel que sabe utilizar lo poco que sabe.