2010-12-16 40 views
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 エルUsuarioトニSE Registroに/home/piscolab/public_html/keepyourlinks.com/Recetas/registro.phpに有効なMySQLの結果リソースではありません補正部

  • $ this-> nombreにはnull値がありません(チェックされています)
  • データベースは空ですので、結果は決してありません。
  • スクリプトが実行され、そのユーザーが登録されているように見せかけても、名前が表示されてしまうという問題があります。データベース上の更新はありません。

私はちょうど問題を見ることができません..できますか?

ありがとうございました!

+0

registro.phpから52行目を転記できますか?ここにmysql_fetch_arrayはありません。実際には、51行目に、クエリを実行します。正確なクエリを表示します。また、mysql_query()関数の後ろに "die(mysql_error())"を追加するだけで、クエリにフォールト(悪いテーブル名など)があるかどうかを調べることもできます。 – Tjirp

+0

うわー、あなたは[SQL Injection](http://en.wikipedia.org/wiki/SQL_injection)の攻撃に広く関わっていることに気づくべきでしょうか? (mysql_real_escape_stringを介して)入力をエスケープするか、パラメータ化されたクエリを使用してください(より良い選択肢)... – ircmaxell

+0

MySQLは英語のみを話します。 mattbasta

答えて

0

まあ、

そこに別のエラー(atribute名とは...、tipical)だったが、これらのエラーを知ったので、立派な静止画と思われ、私を助けていただき、誠にありがとうござい..

いくつかのいずれかが、クラスコードを、それを必要とする場合:(あなたの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; 
      } 
    } 

} 

おかげで再び!

0
ここ

使用の連結:

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

しかし、実際には**文字列操作**の使用を中止し、プレースホルダ/パラメータ化されたクエリを使用します。 –

+0

これは問題ではありません。 –

+0

真実、私は1つのエラーを指摘しました。 PDOは、DB(オブジェクトの向き)を処理するためのより良い選択でなければなりません。 http://php.net/manual/fr/book.pdo.php –

1

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

-1

代わりに、このいずれかを試してみてください。

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

あなたのコードにはmysql_fetch_array()文はありません。

+0

OK、連結しました、 'mysql_fetch_array()'どこに置くのですか? –

+0

あなたのエラーはあなたが既にどこかでそれを使用していることを意味します。そして、この答えは同じような答えでRocketが述べたように、問題ではありません。 –

+0

しかし、実際には、**文字列操作**の使用を中止し、プレースホルダ/パラメータ化クエリを使用します。 –

0

PHP manual says

リソースするmysql_query(文字列$クエリ [、リソースの$ link_identifier]) するmysql_queryは()で現在アクティブなデータベースに独自のクエリ (複数のクエリがサポートされていない) を送ります 指定されたlink_identifierに関連付けられているサーバー。

"現在アクティブなデータベース"がない場合、mysql_ *呼び出しは失敗します。あなたの呼び出しにMySQL接続リンク識別子を与えるのは、常にベストプラクティスです。

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

関連する問題