2010-08-19 5 views
4

PHP로 사용자 로그인/생성 스크립트를 만들려고하는데 사용자 생성시 사용자 이름이 존재하는지 확인하는 가장 좋은 방법을 알고 싶습니다. 현재로서는 다음과 같은 코드를 가지고 있습니다.mySQL 데이터베이스에서 기존 사용자를 확인하는 가장 좋은 방법은 무엇입니까?

function createUser($uname,$pword) { 
     $server->connect(DB_HOST,DB_USER,DB_PASS,DB_NAME); 
     $this->users = $server->query("SELECT * FROM user_list"); 
     while ($check = mysql_fetch_array($this->users) { 
      if ($check['uname'] == $uname) { 

제가 잘 모르는 부분은 이것에 대한 최선의 논리입니다.

$boolean = true; 
} 
if ($boolean) { 
    echo "User already exists!"; 
    } 
else { 
    $server->query("INSERT USER INTO TABLE"); 
    echo "User added Successfully"; 
    } 

을하지만이 조금 비효율적 인 것 같다 -이 할 수있는 더 효율적인 방법이 : I합니다 (if 문 후) 같은 것을 할 수있는 부울 변수를 추가하는 생각? 죄송합니다. 기본 솔루션이 있다면 저는 비교적 새로운 PHP 프로그래머입니다.

답변

7

주어진 사용자 이름 만 행을 얻기 위해 WHERE 절을 사용

"SELECT * FROM user_list WHERE uname='".$server->real_escape_string($uname)."'" 

이 그런 선택하면 MySQLi_Result::num_rows과 모든 행 (0 또는 1 행)을 선택의 쿼리 결과 :

function createUser($uname,$pword) { 
    $server->connect(DB_HOST,DB_USER,DB_PASS,DB_NAME); 
    $result = $server->query("SELECT * FROM user_list WHERE uname='".$server->real_escape_string($uname)."'"); 
    if ($result->num_rows() === 0) { 
     if ($server->query("INSERT INTO user_list (uname) VALUES ('".$server->real_escape_string($uname)."'")) { 
      echo "User added Successfully"; 
     } else { 
      echo "Error while adding user!"; 
     } 
    } else { 
     echo "User already exists!"; 
    } 
} 
+0

항상 +1 답변 매우 신속하게 답변을드립니다. – PHP

+0

굉장한 답변입니다. 고맙습니다! 하나의 질문 : 무엇을합니까. $ server하기 전에? 전에는 본 적이 없어요. –

+1

@Saladin Akara : 그것은 [문자열 연결 연산자]입니다 (http://php.net/language.operators.string). – Gumbo

2

기본적으로 데이터베이스에 구성원을 삽입하기 전에 유효성 검사 중에 쿼리를 수행해야합니다.

<?php 
$errors = array(); 
$alerts = array(); 

if (isset($_POST['register'])) { 

    $pdo = new PDO('[dsn]', '[user]', '[pass]'); 

    // first, check user name has not already been taken 
    $sql = "SELECT COUNT(*) AS count FROM user_list WHERE uname = ?"; 
    $smt = $pdo->prepare($sql); 
    $smt->execute(array($_POST['uname'])); 
    $row = $smt->fetch(PDO::FETCH_ASSOC); 
    if (intval($row['count']) > 0) { 
     $errors[] = "User name " . htmlspecialchars($_POST['uname']) . " has already been taken."; 
    } 

    // continue if there are no errors 
    if (count($errors)==0) { 
     $sql = "INSERT INTO user_list ([fields]) VALUES ([values])"; 
     $res = $pdo->exec($sql); 
     if ($res==1) { 
      $alerts[] = "Member successfully added."; 
     } else { 
      $errors[] = "There was an error adding the member."; 
     } 
    } 
} 

위 예제는 PHP의 PDO를 사용하므로 구문을 변경하여 사용하는 데이터베이스 추상화를 사용하십시오.

관련 문제