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(): 指定された引数は、52 行目の /home/piscolab/public_html/keepyourlinks.com/Recetas/registro.php にある有効な MySQL 結果リソースではありません El Usuario toni se Registro Correctamente

  • $this->nombre には null 以外の値があります (チェック済み)
  • データベースは空なので、結果はありません。
  • 問題は、スクリプトが実行され、ユーザーが登録されているふりをして、名前が表示されることです! データベースの更新はありません..

問題がわかりません..できますか?

ありがとう!

4

5 に答える 5

1

MySQLタイムスタンプの代わりに文字列として挿入している「now()」の周りから引用符を削除します

于 2010-12-16T17:46:20.063 に答える
0

さて、私を助けてくれてありがとう、

別のエラーがあったようです(属性名、典型的な...)が、それらのエラーについてわかったので、それでも価値があります。

誰かがそれを必要とする場合、クラスコード:(あなたの属性を適応させる)

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

}

再度、感謝します!

于 2010-12-16T17:56:50.590 に答える
0

PHPマニュアルには次のように書かれています:

resource mysql_query ( string $query [, resource $link_identifier ] ) mysql_query() は、指定された link_identifier に関連付けられているサーバー上の現在アクティブなデータベースに一意のクエリ (複数のクエリはサポートされていません) を送信します。

「現在アクティブなデータベース」がない場合、mysql_* 呼び出しは失敗します。呼び出しで MySQL 接続リンク識別子を提供することは、常にベスト プラクティスです。

どこで mysql_connect を呼び出していますか?

于 2010-12-16T17:55:38.200 に答える
0

ここで連結を使用します。

/* Comprobando si existe el usuario */
    $check = "SELECT * FROM usuarios WHERE alias = '".$this->nombre."'";
于 2010-12-16T17:43:16.610 に答える
-1

代わりにこれを試してください。

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

また、コードに mysql_fetch_array() ステートメントがありません。

于 2010-12-16T17:48:35.500 に答える