Foros del Web » Programando para Internet » PHP »

Problema con una Select desde PHP

Estas en el tema de Problema con una Select desde PHP en el foro de PHP en Foros del Web. Hola, soy nuevo en este lenguaje, y aunque conozco otros muchos lenguajes de este tipo, este de alguna forma u otra me está desquiciando :P ...
  #1 (permalink)  
Antiguo 31/08/2005, 01:36
Avatar de crcbad  
Fecha de Ingreso: enero-2005
Mensajes: 302
Antigüedad: 19 años, 10 meses
Puntos: 0
Problema con una Select desde PHP

Hola, soy nuevo en este lenguaje, y aunque conozco otros muchos lenguajes de este tipo, este de alguna forma u otra me está desquiciando :P

Simplemente estoy haciendo un método de validación, una vez que se conecta a la base de datos y todo tengo lo siguiente:

Código PHP:
 echo "Validando usuario...<br>"
 
//$result=mysql_query("select * from usuarios",$link); 
 
$result=mysql_query("SELECT * FROM usuarios WHERE usuario = $ZUSER",$link);
 
 echo 
$result;
 
 
// Cierra la conexion 
 
mysql_close($link);   
 while(
$row mysql_fetch_array($result)) { 
    
printf("%s %s %d %s"$row["usuario"],$row["password"],$row["accesos"],$row["nombre"]); 
 } 
Es decir, la Select es sencillita y busca en la tabla usuarios al usuario que sea igual a la variable $ZUSER.

Mi primera pregunta, $result que devuelve? el número de registro en formato entero que han sido devueltos de la consulta? En este caso no me devuelve nada.

Despues con el while recorro lo devuelto para ver si efectivamente me devuelve el registro con el usuarios o si no me lo devuelve... está bien hecho así?

De antemano gracias :)
__________________

:cool: [ http://eruben.sytes.net ] :cool:


Las dos frases que te ayudarán a salir adelante:
  • No hay mujer fea, solo copas de menos. :borracho:
  • Ante la duda, siempre coge la más tetuda. :arriba:
  #2 (permalink)  
Antiguo 31/08/2005, 01:46
Avatar de JavierB
Colaborador
 
Fecha de Ingreso: febrero-2002
Ubicación: Madrid
Mensajes: 25.052
Antigüedad: 22 años, 9 meses
Puntos: 772
Hola crcbad

Yo también soy novato en esto, pero creo que te faltan unas comillas en el select:
Código PHP:
$result=mysql_query("SELECT * FROM usuarios WHERE usuario = '$ZUSER'",$link); 
A ver si así te funciona. Saludos,
  #3 (permalink)  
Antiguo 31/08/2005, 01:48
Avatar de abe_k  
Fecha de Ingreso: diciembre-2004
Mensajes: 286
Antigüedad: 19 años, 11 meses
Puntos: 2
Código:
echo "Validando usuario...<br>";
$result=mysql_query("SELECT * FROM usuarios WHERE usuario = '".$ZUSER."'",$link);

 while($row = mysql_fetch_array($result)) {
    printf("%s %s %d %s", $row["usuario"],$row["password"],$row["accesos"],$row["nombre"]);
} 

// Cierra la conexion
mysql_close($link);
Creo que ya esta. He añadido las comillas simples en la consulta sql pq usuario es un string supongo, no? Ademas, acostumbrate a cerrar la conexion de la base de datos al final del script siempre (nunca se sabe..).

Si quieres saber los errores que puede darte el SQL, haz una consulta asi...

Código:
$result=mysql_query("SELECT * FROM usuarios WHERE usuario = '".$ZUSER."'",$link) or mysql_error();
la funcion mysql_error() te printeara por pantalla que falla de la query.

Espero que te sirva, un saludo
__________________
abe_k

Si quieres visitar Andorra, consulta la guia de este pequeño pais y conseguiras toda la información que necesites. La guia del visitante en Andorra
  #4 (permalink)  
Antiguo 31/08/2005, 01:49
Avatar de crcbad  
Fecha de Ingreso: enero-2005
Mensajes: 302
Antigüedad: 19 años, 10 meses
Puntos: 0
Hola JavierB que bien verte también por los foros de PHP :)

He puesto comillas como me dijiste y ahora por lo menos en $result me devuelve un valor que es: Resource id #3

Y en el caso que efectivamente devuelve algun registro me lo muestra :D

Una pregunta enlazada con lo que contiene la variable $result, que significa eso de Resource id #3??

Gracias :)
__________________

:cool: [ http://eruben.sytes.net ] :cool:


Las dos frases que te ayudarán a salir adelante:
  • No hay mujer fea, solo copas de menos. :borracho:
  • Ante la duda, siempre coge la más tetuda. :arriba:
  #5 (permalink)  
Antiguo 31/08/2005, 01:51
Avatar de illman  
Fecha de Ingreso: mayo-2001
Mensajes: 115
Antigüedad: 23 años, 6 meses
Puntos: 0
El result lo que hace es lanzar el query contra la conexión ($link). Este resultado lo colocas dentro de una array (mysql_fetch_array, por la utilización que le estas dando quizás podrías utilizar mysql_fetch_assoc, que consume menos recursos). Y yo acostumbro a cerrar la conexión al final (mysql_close...). Tod esta correcto, aunque en este caso seguramente tan solo recibes un resultado, pues los nombres de usuario no sxe deberían repetir, por ello te odría quedar como:

echo "Validando usuario...<br>";
//$result=mysql_query("select * from usuarios",$link);
$result=mysql_query("SELECT * FROM usuarios WHERE usuario = '$ZUSER' ",$link);

FIJATE EN LAS COMILLAS SIMPLES QUE RODEAN $ZUSER pues si esta variable es alfanumérica te daría un error





$row = mysql_fetch_array($result);
printf("%s %s %d %s", $row["usuario"],$row["password"],$row["accesos"],$row["nombre"]);
// Cierra la conexion
mysql_close($link);

Un código algo más simple

Saludos
  #6 (permalink)  
Antiguo 31/08/2005, 01:53
Avatar de crcbad  
Fecha de Ingreso: enero-2005
Mensajes: 302
Antigüedad: 19 años, 10 meses
Puntos: 0
ABE_K hola y gracias por la molestia de responder, en un principio hice lo que JavierB me dijo, solamente poniendo comillas simples y ha funcionado, me podrías explicar la diferencia entre:

Código PHP:
$result=mysql_query("SELECT * FROM usuarios WHERE usuario = '$ZUSER'",$link); 
y

Código PHP:
$result=mysql_query("SELECT * FROM usuarios WHERE usuario = '".$ZUSER."'",$link); 

Gracias ^_^
__________________

:cool: [ http://eruben.sytes.net ] :cool:


Las dos frases que te ayudarán a salir adelante:
  • No hay mujer fea, solo copas de menos. :borracho:
  • Ante la duda, siempre coge la más tetuda. :arriba:
  #7 (permalink)  
Antiguo 31/08/2005, 02:00
Avatar de abe_k  
Fecha de Ingreso: diciembre-2004
Mensajes: 286
Antigüedad: 19 años, 11 meses
Puntos: 2
dos consultas

Es una manera de hacerlo pero dos veces. Las comillas simples son obligatorias pq el campo usuario es un string o parecido.

consulta:
Código:
$result=mysql_query("SELECT * FROM usuarios WHERE usuario = '".$ZUSER."'",$link);
Aqui lo que hago es diferenciar el código sql del codigo php:

"SELECT * FROM usuarios WHERE usuario = '"->codigo SQL

.$ZUSER.->los puntos significan la concatenacion de caracteres en php (unimos la sentencia sql y la php)

"'",$link);->cerramos la sentencia sql

consulta:
Código:
$result=mysql_query("SELECT * FROM usuarios WHERE usuario = '$ZUSER'",$link);
Normalmente php cuando ve un $nombredelquesea, lo toma como una variable de php aunque este dentro de otro codigo embebida.

Puede decirse que son dos formas de hacerlo, su finalidad es la misma. Yo te recomendaria el primero pq, en algun caso especial el segundo caso no funciona.

lo entendiste??saludos
__________________
abe_k

Si quieres visitar Andorra, consulta la guia de este pequeño pais y conseguiras toda la información que necesites. La guia del visitante en Andorra
  #8 (permalink)  
Antiguo 31/08/2005, 02:56
Avatar de crcbad  
Fecha de Ingreso: enero-2005
Mensajes: 302
Antigüedad: 19 años, 10 meses
Puntos: 0
ABE_K gracias por tu explicación, me ha quedado totalmente aclarado, eres un buen profe :P

Supongo que me verás postear mas veces por aqui.... me gusta indagar sobre PHP y como se hacen las cosas pero cuando me atasco, siempre recurro al foro, así que me verás a menudo por aqui, gracias y saludos :)
__________________

:cool: [ http://eruben.sytes.net ] :cool:


Las dos frases que te ayudarán a salir adelante:
  • No hay mujer fea, solo copas de menos. :borracho:
  • Ante la duda, siempre coge la más tetuda. :arriba:
  #9 (permalink)  
Antiguo 31/08/2005, 03:01
Avatar de crcbad  
Fecha de Ingreso: enero-2005
Mensajes: 302
Antigüedad: 19 años, 10 meses
Puntos: 0
Información

Ya que estamos, y para finalizar mi consulta de la Select, si tengo:

Código PHP:
$result=mysql_query("SELECT * FROM usuarios WHERE usuario = '$ZUSER' and password = '$ZPASS'",$link); 
Como puedo plantear en php "si los resultados devueltos son 0 entonces haz algo, y si es >=1 haz esto otro?

Gracias de antemano :)
__________________

:cool: [ http://eruben.sytes.net ] :cool:


Las dos frases que te ayudarán a salir adelante:
  • No hay mujer fea, solo copas de menos. :borracho:
  • Ante la duda, siempre coge la más tetuda. :arriba:
  #10 (permalink)  
Antiguo 31/08/2005, 03:21
Avatar de abe_k  
Fecha de Ingreso: diciembre-2004
Mensajes: 286
Antigüedad: 19 años, 11 meses
Puntos: 2
Código:
 $result=mysql_query("SELECT * FROM usuarios WHERE usuario = '$ZUSER' and password = '$ZPASS'",$link); 

if(mysql_num_rows>1){//Si el numero de respuestas de la consulta es >1
//codigo
}
Esto es lo quequieres?
__________________
abe_k

Si quieres visitar Andorra, consulta la guia de este pequeño pais y conseguiras toda la información que necesites. La guia del visitante en Andorra
  #11 (permalink)  
Antiguo 31/08/2005, 03:34
Avatar de abe_k  
Fecha de Ingreso: diciembre-2004
Mensajes: 286
Antigüedad: 19 años, 11 meses
Puntos: 2
Código:
if(mysql_num_rows($result)>1){}
Es asi, perdon por mi equivocacion anterior
__________________
abe_k

Si quieres visitar Andorra, consulta la guia de este pequeño pais y conseguiras toda la información que necesites. La guia del visitante en Andorra
  #12 (permalink)  
Antiguo 31/08/2005, 03:50
Avatar de crcbad  
Fecha de Ingreso: enero-2005
Mensajes: 302
Antigüedad: 19 años, 10 meses
Puntos: 0
abe_k muchas gracias figura!! Creo que con todo esto ya tengo para entretenerme y hacer consultas y consultas :)

Una vez más, muchas gracias por tu ayuda, y la del resto ;)
__________________

:cool: [ http://eruben.sytes.net ] :cool:


Las dos frases que te ayudarán a salir adelante:
  • No hay mujer fea, solo copas de menos. :borracho:
  • Ante la duda, siempre coge la más tetuda. :arriba:
  #13 (permalink)  
Antiguo 31/08/2005, 04:32
Avatar de crcbad  
Fecha de Ingreso: enero-2005
Mensajes: 302
Antigüedad: 19 años, 10 meses
Puntos: 0
Bueno, os escribo de nuevo para comentaros los resultados, la validación ( cutre ) funciona parece correctamente, pero ahora viene la parte de optimización, os voy a poner el código para que opineis si os parece bueno, o se podría hacer más corto o cosas asi vale? Alla va, os pongo el index.php, que es llamado desde Login.php el cual pasa 3 variables, ZUSER, ZPASS Y SESID (un numero aleatorio) al index.php y en función de la select, redirige a index.htm, o bien devuelve al Login.php

Código PHP:
<html> 
<head> 
<title>Validación en Curso....</title> 
</head> 
<body> 
 
<?php 
    
function Conectarse() 
    { 
     
// Conectamos con el servidor, usuario y password y detectamos si error
     
if (!($link=mysql_connect("RUBEN","xxxxx","yyyy"))) 
     { 
     echo 
"Error conectando a la base de datos."
     exit(); 
     } 
 
     
// Detectamos que la base de datos que queremos exista, sino, error
     
if (!mysql_select_db("accesos",$link)) 
     { 
     echo 
"Error seleccionando la base de datos."
     exit(); 
     } 
     return 
$link
    } 
 
    
$link=Conectarse(); 
    echo 
"Validando usuario...<br>"
    
//$result=mysql_query("select * from usuarios",$link); 
    
$result=mysql_query("SELECT * FROM usuarios WHERE usuario = '$ZUSER' and password = '$ZPASS'",$link);
 
    
// Cierra la conexion 
    
mysql_close($link); 
 
    
// Existe coincidencia de usuario
    
if(mysql_num_rows($result)>0)
    {
?> 
 
<script>document.location = 'index.htm';</script>    
<?php
    
}
 
    
// No existe coincidencia
    
else
    {
?> 
<script>document.location = 'Login.php';</script>    
 
<?php
    
}
 
    
mysql_free_result($result); 
    
mysql_close($link); 
?> 
 
</body> 
</html>
__________________

:cool: [ http://eruben.sytes.net ] :cool:


Las dos frases que te ayudarán a salir adelante:
  • No hay mujer fea, solo copas de menos. :borracho:
  • Ante la duda, siempre coge la más tetuda. :arriba:
  #14 (permalink)  
Antiguo 31/08/2005, 07:21
Avatar de abe_k  
Fecha de Ingreso: diciembre-2004
Mensajes: 286
Antigüedad: 19 años, 11 meses
Puntos: 2
Primeramente, quita el primer mysql_close(); solo con que lo cierres una vez y al final tienes mas que suficiente.

Otra cosa, si has hecho una funcion para conectar, tb puedes hacer una para las querys ( lo digo pq no existe ningun mensaje que verifique si tu consulta es ok o no ). De esta manera podras generar un fichero que contenga todas la funciones relacionadas con mysql, incluirla en este fichero (el actual donde llamarias a las funciones) con un require o un include -> ej. require('mysql.php').

Finalmente, puedes ahorrarte varias lineas de codigo en:

Código:
// Existe coincidencia de usuario
    if(mysql_num_rows($result)>0)
    {
?>

<script>document.location = 'index.htm';</script>    
<?php
    }

    // No existe coincidencia
    else
    {
?>
<script>document.location = 'Login.php';</script>    

<?php
    }
y poner en su lugar una cosa tal que así:
Código:
<script>document.location =<?php (mysql_num_rows($result)>0)? ?>'index.htm';<?php : ?>'Login.php';</script>
Pruebalo y ya diras
__________________
abe_k

Si quieres visitar Andorra, consulta la guia de este pequeño pais y conseguiras toda la información que necesites. La guia del visitante en Andorra
  #15 (permalink)  
Antiguo 31/08/2005, 09:28
Avatar de crcbad  
Fecha de Ingreso: enero-2005
Mensajes: 302
Antigüedad: 19 años, 10 meses
Puntos: 0
Gracias por todo de nuevo, eres bueno en php ;)

He probado lo que me comentaste del document.location y tambien ha funcionado, una vez muchas gracias :)
__________________

:cool: [ http://eruben.sytes.net ] :cool:


Las dos frases que te ayudarán a salir adelante:
  • No hay mujer fea, solo copas de menos. :borracho:
  • Ante la duda, siempre coge la más tetuda. :arriba:
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 14:09.