2013-12-04 7 views
0
class Users { 
    public $username = null; 
    public $password = null; 
    public $salt = "Zo4rU5Z1YyKJAASY0PT6EUg7BBYdlEhPaNLuxAwU8lqu1ElzHv0Ri7EM6irpx5w"; 

    public function __construct($data = array()) { 
     if(isset($data['username'])) $this->username = stripslashes(strip_tags(>$data['username'])); 
     if(isset($data['password'])) $this->password = stripslashes(strip_tags(>$data['password'])); 
    } 
    } 

public function storeFormValues($params) { 
     $this->__construct($params); 
} 

public function register() { 
    $correct = false; 
     try { 
      $con = new PDO(DB_DSN, DB_USERNAME, DB_PASSWORD); 
      $con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
      $sql = "INSERT INTO users(username, password) VALUES(:username, :password)"; 

      $stmt = $con->prepare($sql); 
      $stmt->bindValue("username", $this->username, PDO::PARAM_STR); 
      $stmt->bindValue("password", hash("sha256", $this->password . $this->salt), PDO::PARAM_STR); 
      $stmt->execute(); 
      return "Registration Successful <br/> <a href='index.php'>Login Now</a>"; 
     }catch(PDOException $e) { 
      return $e->getMessage(); 
     } 
} 

} 

Я хотел бы проверить, существует ли пользователь в моей базе данных, поскольку он позволяет мне создавать учетные записи с одинаковым именем пользователя в любое время. Спасибо.Как проверить, существует ли пользователь?

+0

Итак, прежде чем вставлять, выберите из БД, где username = любое имя пользователя, которое они ввели в рег-форме (безопасность сначала очистит его и т. Д.). если имя пользователя существует (например, строки> 0), то скажите им, чтобы выбрать другой, иначе вставьте – James

+2

. Установите уникальный ограничитель в столбце имени пользователя. Таким образом, проверка кода и условия гонки не были бы возможны. –

+2

фиксированная соль не идеальна –

ответ

0

Я бы порекомендовал несколько вещей, чтобы помочь здесь.

1) Сделайте свой столбец имени пользователя уникальным в базе данных. Это предотвратит имена пользователей, которые не являются уникальными для вставки.

2) Как только у вас есть уникальный указатель на имя пользователя, попробуйте вставить и проверьте успех на вставке. Так как вы можете получить код ошибки из mysql, если запрос не был успешным, а код ошибки - дублирующимся значением ... сбросить имя пользователя уже существует.

-1

Это основная идея возврата, если имя пользователя существует.

public function username($username) 
{ 
    $sth = $this->db->prepare("SELECT id, username FROM table WHERE username = ?"); 
    $sth->execute(array($username)); 

    $row = $sth->fetch(); 

    if(username == $row['username']) 
    { 
     do code here since username does not exist 
    } else { 
     echo 'username already exists'; 
    } 
} 
+0

thats not correct –

+0

Не могли бы вы объяснить, почему это не правильно, было бы также приятно понять и узнать из моих ошибок. – iBrazilian2

+0

Я считаю, что вообще не нужно добавлять ДРУГОЙ запрос базы данных, чтобы узнать, должен сделать вызов базы данных для вставки. –

-1
$sell= mysql_query("select * from `signup` where emailid='$email'"); 
$cntc=mysql_num_rows($sell); 
if($cntc==0) { 
    $sql=mysql_query("INSERT INTO `signup`(`firstname`,`lastname`,`emailid`,`dob`,`companyname`,`phoneno`,`password`) VALUES ('$name','$lastname','$email','$dob','$comname','$phone','$pass')"); 
    if($sql) { 
    echo'inserted successfully'; 
    } 
} else { 
    echo'Email is already exist. '; 
} 
Смежные вопросы