2017-10-17 56 views
0

我已經建立了一個pdo連接,並將其作爲變量傳遞給一個函數。這一切工作正常,該功能正確返回。如果我使用PDO變量和名稱在條件語句中運行該函數,它將正確運行 - 如果名稱位於數據庫中,則它會正確迴應,如果不是,則它也會正確回顯。我想要做的是將表單帖子的值傳遞給函數,以便檢查它是否存在於數據庫中。這裏是我的代碼:

函數檢查列計數是否爲1。

function user_exists($pdo, $username) { 
$stmt = $pdo->prepare('SELECT COUNT(uid) FROM users WHERE username = :username'); 
$stmt->execute(['username' => $username]); 
$result = $stmt->fetchColumn(); 
return ($result == 1); 
} 

如果管理員用戶在數據庫中存在回聲「存在」 - 只是用於測試。

if(user_exists($pdo,'admin') == true) { 
echo "exists"; 
} else { 
echo "doesnt exist"; 
} 

檢查,看看這兩個領域已經進入那麼我想它來檢查輸入的用戶名在數據庫中,但我做錯了什麼。

if(!empty($_POST) === true) { 
$username = $_POST['username']; 
$pwood = $_POST['password']; 
if(empty($username) === true || empty($pwood) === true) { 
echo "You need to enter a username and password"; 
} else if (user_exists($pdo,$_POST['username']) == false){ 
echo 'We can\'t find that username. Please try again or register'; 
} 
} 
+0

此行'如果(!空($ _ POST)===真){' – Akintunde007

+0

完美非常感謝。我不知道爲什麼。 post的值不爲空...... –

+0

@GrumpyCrouton,使用'global'變量*不推薦。請參閱https://stackoverflow.com/questions/5166087/php-global-in-functions或https://stackoverflow.com/questions/1557787/are-global-variables-in-php-considered-bad-practice-if -so-why爲什麼 –

回答

2

最好不要與布爾值進行比較,只是用

//...see below 
require_once('UserRepository.php'); 
$ur = new UserRepostory($pdo); 

if(!empty($_POST)) { 
    if (empty($username) || empty($pwood)) { 
     // something 
    } else if (!$ur->exists($_POST['username'])) { // your user_exists($pdo, $username) works fine, too 
     // something else 
    } 
} 

尤其是初始if(!empty($_POST) === true) {是難以閱讀和導致錯誤「的原因誤解操作的優先級。基於上述意見

更新,這裏是一個類的實例:

// UserRepository.php 
class UserRepository { 
    private $pdo; 

    // '\PDO' instead of 'PDO', see PHP Namespacing 
    public function __construct (\PDO $pdo) 
    { 
     $this->pdo = $pdo; 
    } 

    public function exists($username) 
    { 
     $sql = 'SELECT COUNT(uid) FROM users WHERE username = :username'); 
     $stmt = $this->pdo->prepare($sql); 
     $stmt->execute(['username' => $username]); 
     $result = $stmt->fetchColumn(); 

     return (bool) $result; 
    } 
} 
+0

我可以看到這是如何合理的。 OO目前略高於我的技能水平。雖然我相信我會回到這個答案。 –

+0

正如代碼註釋中提到的,沒有類的函數可以正常工作,並且對於小型項目和初學者也很有用。從小開始沒有什麼不好,只是爲了顯示「正確」的方式,而不是使用全局變量。 – clemens321

+0

真的很棒的編輯,我希望我能第二次upvote。 – GrumpyCrouton

相關問題