2010-12-16 1 views
0

i는 사용자 등록 클래스를 정의하기 위해 노력하고있어이는 내가에 allways없이있는 양식을 통해 간단한 VARCHAR를 입력이 오류를 (주어진거야 것을의 지금이 쿼리에 어떤 문제가 있습니까?

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

} 
?> 

에 대해 가지고있는 기능과 문제 이상한 문자) :

경고 :로 MYSQL_ASSOC() : 공급 인수가 52 엘 사용자 선호도 토니가 Registro을 SE는 라인에 /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

음,

거기 다른 오류 (A atribute 이름은 ..., 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; 
      } 
    } 

} 

감사를 (당신의 부가 요소를 적용)!

0

사용 연결 :

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

하지만 실제로는 ** 문자열 조작 **을 사용하지 않고 자리 표시 자/매개 변수화 된 쿼리를 사용합니다. –

+0

이것은 문제가되지 않습니다. –

+0

사실, 방금 한 가지 오류를 지적했습니다. PDO는 DB (객체 지향)를 처리하기위한 더 나은 선택이어야합니다. http://php.net/manual/fr/book.pdo.php –

-1

대신이 하나를 시도하는 대신 MySQL의 타임 스탬프의 문자열로 삽입된다 ') (지금은'각국에서 따옴표를 제거;

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

그리고 코드에 mysql_fetch_array() 문이 표시되지 않습니다.

+0

괜찮 았어, 연결 했어, 'mysql_fetch_array()'어디에 놓을 까? –

+0

오류는 이미 다른 곳에서 사용하고 있다는 것을 의미합니다. 그리고이 답변은 비슷한 대답으로 Rocket이 말한 것처럼 문제가 아닙니다. –

+0

하지만 실제로는 ** 문자열 조작 ** 사용을 중지하고 자리 표시 자/매개 변수화 된 쿼리를 사용합니다. –

0

PHP manual says :

리소스는 mysql_query (문자열 $ 쿼리 [자원 $의 link_identifier를]) 는 mysql_query()가 전송 현재 활성화 된 데이터베이스에 고유 한 쿼리 (여러 쿼리는 지원되지 않음) 에를 지정된 link_identifier와 연결된 서버입니다.

"현재 활성 데이터베이스"가 없다면 mysql_ * 호출이 실패합니다. 항상 MySQL 연결 링크 식별자를 호출에 제공하는 것이 가장 좋습니다.

어디에서 mysql_connect를 호출할까요?