¿Qué hay de malo en esta consulta?
-
11-10-2019 - |
Pregunta
Estoy tratando de definir una clase de registro de usuario y esta es la función que tengo por ahora
<?php
///// SE SUPONE QUE AQUI EL USUARIO YA HA INTRODUCIDO SUS DATOS DE REGISTRO
/* Conectando la Base de Datos */
include("includes/basedatos.php");
require_once("includes/funciones.php");
class registro_usuarios
{
var $pass;
var $email;
var $nombre;
public function tratandovariables()
{
/* Eliminando Caracteres Especiales */
$password = htmlspecialchars($_POST['pass']);
$mail = htmlspecialchars(strip_tags($_POST['mail']));
$nombre = htmlspecialchars(strip_tags($_POST['nombre']));
if (preg_match("/^[a-zA-Z0-9\-_]{3,20}$/", $nombre))
{
/* Asignando Valor */
$this->pass = md5($password);
$this->email = $mail;
$this->nombre = $nombre;
}
else
{
echo "El nombre de usuario no es válido<br>";
exit;
}
}
public function register()
{
$this->tratandovariables();
/* Comprobando si existe el usuario */
$check = "SELECT * FROM usuarios WHERE alias = '$this->nombre'";
$qry = mysql_query($check);
/* La compracion */
if (mysql_num_rows($qry))
{
echo "Lo sentimos, el nombre de usuario ya esta registrado.<br />";
mysql_free_result($qry);
return false;
} else
{
$insert = "INSERT INTO usuarios (alias, pass, email, fid, fechar, ultima, img_src, reputacion) VALUES ('".$this->nombre."','".$this->pass."','".$this->email."','-1', 'NOW()', 'NOW()',' ', '0' )";
$qry = mysql_query($insert);
if(mysql_affected_rows())
{
echo "El Usuario $this->nombre se Registro Correctamente";
return true;
}
else
{
echo "Error Ingresando datos";
return false;
}
return false;
}
}
}
?>
Y el problema es que estoy Allways dado este error (entrando un varchar sencilla a través de un formulario sin caracteres extraños):
Warning: mysql_fetch_array (): argumento suministrado no es un recurso resultado MySQL válido en /home/piscolab/public_html/keepyourlinks.com/Recetas/registro.php en la línea 52 El Usuario se Toni Registro Correctamente
- $ this-> nombre tiene un valor no nulo (comprobado)
- Base de datos de su vacío, así que no debe haber nunca más resultados.
- El problema es que el guión sigue y pretende que el usuario se ha registrado, incluso muestra el nombre! y no hay una actualización de la base de datos ..
Simplemente no puedo ver el problema .. ¿Puede usted?
gracias!
Solución 4
Bien, muchas gracias por ayudarme,
parece que hubo un error diferente (con un nombre de atributo, típico ...) pero alambiques digna porque enterado de esos errores ..
Si alguien necesita, el código de clase: (adaptar sus atributos)
class registro_usuarios
{
var $pass;
var $email;
var $nombre;
public function tratandovariables()
{
/* Eliminando Caracteres Especiales */
$password = htmlspecialchars($_POST['pass']);
$mail = htmlspecialchars(strip_tags($_POST['mail']));
$nombre = htmlspecialchars(strip_tags($_POST['nombre']));
if (preg_match("/^[a-zA-Z0-9\-_]{3,20}$/", $nombre))
{
/* Asignando Valor */
$this->pass = md5($password);
$this->email = $mail;
$this->nombre = $nombre;
}
else
{
echo "El nombre de usuario no es válido<br>";
exit;
}
}
public function register()
{
$this->tratandovariables();
/* Comprobando si existe el usuario */
$check = "SELECT * FROM usuarios WHERE alias = '".$this->nombre."'";
$qry = mysql_query($check);
/* La compracion */
if (mysql_num_rows($qry))
{
echo "Lo sentimos, el nombre de usuario ya esta registrado.<br />";
mysql_free_result($qry);
return false;
} else
{
$insert = "INSERT INTO usuarios (alias, pass, mail, fid, fechar, ultima, img_src, reputacion) VALUES ('".$this->nombre."','".$this->pass."','".$this->email."','-1', NOW(), NOW(),' ', 0 )";
$qry = mysql_query($insert);
if(mysql_affected_rows())
{
echo "El Usuario $this->nombre se Registro Correctamente";
return true;
}
else
{
echo "Error Ingresando datos";
return false;
}
return false;
}
}
}
Gracias de nuevo!
Otros consejos
quitar las comillas de todo 'ahora ()' otra cosa va a insertar como una cadena en lugar de MySQL marca de tiempo
El uso de concatenación aquí:
/* Comprobando si existe el usuario */
$check = "SELECT * FROM usuarios WHERE alias = '".$this->nombre."'";
El href="http://php.net/manual/en/function.mysql-query.php" rel="nofollow"> manual de PHP :
mysql_query de recursos ($ string consulta [, Resource $ id_enlace]) mysql_query () envía una consulta única (Varias consultas no son compatibles) a la base de datos activa en el servidor que está asociada con el especificado link_identifier.
Si usted no tiene una "base de datos activa", entonces sus mysql_ llamadas * fallarán. Siempre es la mejor práctica para suministrar el enlace identificador de conexión de MySQL con sus llamadas.
mysql_connect ¿De dónde llama?
Prueba este lugar;
$check = "SELECT * FROM usuarios WHERE alias = '".$this->nombre."'";
Y no veo ninguna declaración mysql_fetch_array () en el código.