Php 这个查询有什么问题?

Php 这个查询有什么问题?,php,user-registration,Php,User Registration,我正在尝试定义一个用户注册类,这是我目前拥有的函数 <?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

我正在尝试定义一个用户注册类,这是我目前拥有的函数

 <?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;
            }
    }

}
?>
问题是我总是遇到这样一个错误,通过一个没有奇怪字符的表单输入一个简单的varchar:

警告:mysql_fetch_数组:在第52行的/home/piscolab/public_html/keepyourlinks.com/Recetas/registro.php中,提供的参数不是有效的mysql结果资源 El Usuario toni se Registro Correctante

$this->nombre已选中非空值 数据库是空的,所以永远不会有结果。 问题是,脚本继续运行,假装用户已注册,甚至显示名称!数据库上没有更新。。 我就是看不出有什么问题。。你能吗


谢谢大家!

在此处使用连接:

/* Comprobando si existe el usuario */
    $check = "SELECT * FROM usuarios WHERE alias = '".$this->nombre."'";

删除“now”周围的引号,否则将以字符串形式而不是MySQL时间戳插入

试试这个

$check = "SELECT * FROM usuarios WHERE alias = '".$this->nombre."'";
我在您的代码中没有看到任何mysql\u fetch\u数组语句。

资源mysql\u查询字符串$query [,资源$link\u标识符] mysql\u查询发送一个唯一的查询 不支持多个查询 到上的当前活动数据库 与服务器关联的服务器 指定的链接标识符

如果当前没有活动数据库,那么mysql_*调用将失败。在调用时提供MySQL连接链接标识符始终是最佳做法


你在哪里打电话给mysql\u connect?

好吧,非常感谢你帮助我

似乎有一个不同的错误与阿曲布他名字,tipical。。。但仍然有价值,因为发现了这些错误

如果有人需要,课程代码:调整你的心房肌

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;
            }
    }

}

再次感谢

你能从registro.php发布第52行吗?我在这里没有看到mysql\u fetch\u数组。实际上,在第51行,执行查询。显示精确的查询。此外,如果您使用mysql\u查询函数来查看查询是否存在错误,例如表名不正确,那么您可以尝试在其后面添加或删除mysql\u错误。哇,您应该意识到您非常容易受到攻击,对吗?要么通过mysql\u real\u escape\u字符串转义输入,要么使用参数化查询——更好的选择……mysql只会说英语。但实际上,停止使用字符串操作,使用占位符/参数化查询。没错,我只是指出了一个错误。PDO应该是处理DB对象定向的更好选择。好的,连接“mysql\u fetch\u array”应该放在哪里?您的错误意味着您已经在某处使用了它。正如Rocket在类似的回答中所说,这个答案不是问题所在。但实际上,停止使用字符串操作,使用占位符/参数化查询。$check=SELECT*FROM usuarios,其中alias='$this->nombre';是完全有效的,并将生成正确的查询,但存在“字符”的情况除外。在这种情况下,两种解决方案都将失败,而不添加CSLASHE。不需要添加mysql\u fetch\u数组语句,因为您不是从数据库中获取内容,而是放置一条记录$qry=mysql\u query$insert或diemsql\u错误;试试这个,看看是否有错误。