这个查询有什么问题?

发布于 2024-10-07 20:01:46 字数 2583 浏览 3 评论 0原文

我正在尝试定义一个用户注册类,这是我现在拥有的功能

 <?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_array():提供的参数不是 /home/piscolab/public_html/keepyourlinks.com/Recetas/registro.php 第 52 行中的有效 MySQL 结果资源 El Usuario toni se Registro Correctamente

  • $this->nombre 有一个非空值(选中)
  • 数据库为空,因此不应该有结果。
  • 问题是脚本继续并假装用户已注册,甚至显示名称!并且数据库没有更新..

我只是看不到问题..你能吗?

谢谢你!

i'm trying to define a User registration class and this is the function i have for now

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

}
?>

And the problem it's that i'm allways given this error (entering a simple varchar through a form with no weird chars):

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/piscolab/public_html/keepyourlinks.com/Recetas/registro.php on line 52
El Usuario toni se Registro Correctamente

  • $this->nombre has a not null value (checked)
  • Database its empty, so there should be never results.
  • The problem it's that the script goes on and pretends that user has been registered, even shows the name! and there is not an update on database..

I just can't see the problem.. can you?

thank you!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

去了角落 2024-10-14 20:01:46

删除“now()”周围的引号,否则您将作为字符串而不是 MySQL 时间戳插入

remove the quotes from around 'now()' else you are inserting as a string instead of MySQL timestamp

杀手六號 2024-10-14 20:01:46

在这里使用串联:

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

use concatenation here :

/* Comprobando si existe el usuario */
    $check = "SELECT * FROM usuarios WHERE alias = '".$this->nombre."'";
旧夏天 2024-10-14 20:01:46

PHP 手册说

资源 mysql_query ( 字符串 $query
[,资源 $link_identifier ] )
mysql_query() 发送唯一的查询
(不支持多次查询)
到当前活动的数据库
与关联的服务器
指定 link_identifier。

如果您没有“当前活动数据库”,那么您的 mysql_* 调用将会失败。在调用中提供 MySQL 连接链接标识符始终是最佳实践。

你在哪里调用 mysql_connect ?

The PHP manual says:

resource mysql_query ( string $query
[, resource $link_identifier ] )
mysql_query() sends a unique query
(multiple queries are not supported)
to the currently active database on
the server that's associated with the
specified link_identifier.

If you do not have a "currently active database" then your mysql_* calls will fail. It's always best practice to supply the MySQL connection link identifier with your calls.

Where are you calling mysql_connect?

呢古 2024-10-14 20:01:46

好吧,非常感谢你帮助我,

似乎有一个不同的错误(带有属性名称,典型......)但仍然值得,因为发现了这些错误..

如果有人需要它,类代码: (调整您的属性)

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

}

再次感谢!

Well, thank you very much for helping me,

it seems that there was a different error (with a atribute name, tipical...) but stills worthy because found out about those errors..

If some one needs it, the class code: (adapt your atributes)

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

}

Thanks again!

墨落画卷 2024-10-14 20:01:46

试试这个吧;

$check = "SELECT * FROM usuarios WHERE alias = '".$this->nombre."'";

我在您的代码中没有看到任何 mysql_fetch_array() 语句。

Try this one instead;

$check = "SELECT * FROM usuarios WHERE alias = '".$this->nombre."'";

And I don't see any mysql_fetch_array() statement in your code.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文