Problema con Is_resource

Iniciado por zered, 5 Diciembre 2012, 05:45 AM

0 Miembros y 1 Visitante están viendo este tema.

zered

Hola, como estan? Estoy aprendiendo a programar en PHP y como primer ejemplo quise hacer un sistema de registro en una base de datos. Primero lo hice sin que chequeara si se repetia el nombre de usuario (o nick) y funciono perfecto. Pero ahora que quiero que chequee si se repite, no esta funcionando como quisiera.

Es muy simple y seguramente hay cosas que seria mejor que haga de otras formas pero como dije, recien hace 2 dias estoy con PHP.

Código (php) [Seleccionar]

<?php

#Defino una variable para simplificar ($conexion). 
$conexion mysql_connect("localhost""root""") or die ("Fallo en el establecimiento de la conexión");

#Selecciono la base de datos.
mysql_select_db("registro"$conexion) or die ("Error en la selección de la base de datos");

#Chequeo si se repite el nick del usuario.
$busqueda=("SELECT nick FROM jugadores WHERE 'nick'='$_POST[nick_]'");
$resultado=mysql_query($busqueda$conexion);

if (
is_resource($resultado))
{
echo 
"Ese nombre de usuario ya se encuentra usado";

else 
{
mysql_query("INSERT INTO jugadores (nick, contraseña, mail, nombre)
VALUES ('
$_POST[nick_]', '$_POST[contraseña_]', '$_POST[mail_]', '$_POST[nombre_]')"$conexion);
}

?>



El problema es que este codigo me devuelve "Ese nombre de usuario ya se encuentra usado" para cualquier nick, tanto los repetidos como los que no lo estan.
Agradeceria mucho si me dan una mano y perdon si hay errores muy basicos!

RevangelyonX

Hola,

Esto es que porque mysql_query te devuelve un resource aunque no exista

en www.php.net:

reject note Return Values

For SELECT, SHOW, DESCRIBE, EXPLAIN and other statements returning resultset, mysql_query() returns a resource on success, or FALSE on error.

Al no devolver un error, devuelve un resource y por lo tanto el IF es válido.

tienes que analizar el resultado de mysql_query y ver si tiene datos:

$resultado=mysql_query($busqueda, $conexion);

if (sizeof(mysql_fetch_assoc($resultado)) > 0){
/*Hay más de 0 valores, es decir, existe*/
die("Sorry, nicks exists");
}....
...


Salu2
Just Linux
OSCP certified

cassiani

zered, Guiate de la ayuda oficial
http://php.net/mysql_query

ojo a las sugerencias que te da el sitio.

puedes usar mysql_num_rows para evaluar,
$número_filas = mysql_num_rows($resultado);
echo "$número_filas Filas\n";

zered

Gracias por la ayuda, al final termine utilizando mysql_num_rows. El codigo me quedo asi por el momento:

Código (php) [Seleccionar]

<?php

#Defino una variable para simplificar ($conexion). 
$conexion mysql_connect("localhost""root""") or die ("Fallo en el establecimiento de la conexión");

#Selecciono la base de datos dentro del host.
mysql_select_db("registro"$conexion) or die ("Error en la selección de la base de datos");

#Defino variable a partir de los datos obtenidos en registro.html.
$nick$_POST['nick_'];



$resultado=mysql_query("SELECT * FROM jugadores WHERE nick='$nick'"$conexion);
$usuario_existente=mysql_num_rows($resultado);

#Escapo variables para evitar inyecciones sql. Esto falta

if ($usuario_existente>0){
echo 
"Ese nick ya se encuentra registrado";
}
else
{
mysql_query("INSERT INTO jugadores (nick, contraseña, mail, nombre)
VALUES ('
$_POST[nick_]', '$_POST[contraseña_]', '$_POST[mail_]', '$_POST[nombre_]')"$conexion);
echo 
"Registrado de forma satisfactoria. Ahora puede iniciar sesion.";
}

?>