2013-02-20 41 views
0

我有兩個文件,一個包含reg_db類,在其他我調用reg_db的對象。我希望它能檢查用戶輸入和數據庫中的列,以確保它只是唯一的值。如果它不是唯一的停止代碼,並帶有消息。現在我沒有得到任何東西,var_dump($ conn - > uniqueInput($ _ POST ['reg_username'],'username'));輸出NULL。 我希望代碼具有靈活性,並且可以設置哪個用戶輸入來檢查數據庫中的哪一列。驗證唯一的用戶名或電子郵件

//reg_db class 
class reg_db{ 
    private $input; 
    private $column; 

    public function __construct(){ 

    } 

    public function uniqueInput($reg_input, $reg_column){ 
     $this -> input = $reg_input; 
     $this -> column = $reg_column; 
     $pdo = new PDO('mysql:host=localhost;dbname=fail once again;', 'root', ''); 
     $db_user = $pdo -> prepare('SELECT :column FROM `users` WHERE :column = :input'); 
     $db_user -> bindParam(':input', $this -> input, PDO::PARAM_STR); 
     $db_user -> bindParam(':column', $this -> column, PDO::PARAM_STR); 
     $db_user -> execute(); 
     $row = $db_user -> fetch(PDO::FETCH_ASSOC); 
     if($this -> input == $row[$this -> column]){ 
      die($this -> column . ' ' . $this -> input . ' is already taken'); 
     } 
    } 
} 

//object of reg_db 
$conn = new reg_db(); 
$conn -> uniqueInput($_POST['reg_username'], '`username`'); 
+0

對不起!我無法理解你準確實現的目標。請使用其他措辭。 '這是我的。這是它輸出的內容。這是我想要它輸出的。' – SteAp 2013-02-20 23:16:19

+1

綁定':column'會引用'$ this-> column',這不是你想要的。 – 2013-02-20 23:30:06

回答

0

您只需通過用戶名獲取用戶名,並檢查它是否不是您正在更新的用戶。

class reg_db{ 
    private $pdo; 

    public function __construct(){ 
     $this->pdo = new PDO('mysql:host=localhost;dbname=fail once again;', 'root', ''); 
    } 

    public function getUserBy($reg_column, $reg_input){ 
     $db_user = $this->pdo->prepare("SELECT * FROM `users` WHERE `$reg_column` = :input"); 
     $db_user->bindParam(':input', $reg_input, PDO::PARAM_STR); 
     $db_user->execute(); 
     return $db_user->fetch(PDO::FETCH_OBJ); 
    } 
} 

$conn = new reg_db(); 
$user = $conn->getUserBy('username', $_POST['reg_username']); 
if ($user && $user->id != $_POST['reg_id']) { 
    die("Username '{$_POST['reg_username']}' is already taken"); 
} 
相關問題