0

こんにちは私は、ユーザーがログインフォームを送信した後、ユーザーのユーザー名とパスワードをチェックして、PDOを使用してデータベースに存在するかどうかを確認しようとしていますが、falseが返されます。

これが私が使用しているコードです:

<?php 
//import all of the available functions
require_once('func/functions.php');

//create a connection to the database
$database = new database('localhost', 'root', 'usbw');
$database->connect();
$database->select('mjbox');

//Check if the user is logged in
loggedin();


//Check if the submit button has been clicked first
if ( isset( $_POST['submit'] ) ){
    //Check if user exists on database
    match_login($_POST['username'],$_POST['password']);
}
?>

//Check if user is logged in
function loggedin(){
    //Check if the loggedin status is set to true, meaning that user is logged in.
    if ( isset ( $_SESSION['loggedin'] ) && $_SESSION['loggedin'] == true  ) {
        echo '<p>Hello '. $_SESSION['username'] . ', <a href="Logout.php">Logout.</a></p>';
    }else{
        //If the user is not logged in display a login form
        echo '<form action="index.php" method="post">';
        echo '<input type="text" name="username">';
        echo '<input type="text" name="password">';
        echo '<input type="submit" name="submit" value="submit">';
        echo '<form>';
    }

}

//Check users login details
function match_login($username, $password){
        //If the button has been clicked get the variables
        $dbh = new PDO("mysql:host=localhost;dbname=mjbox","root", "usbw");
        $stmt = $dbh->prepare("SELECT * FROM mjbox WHERE username=':name' AND password=':pword'");
        $stmt->bindParam(":name", $_POST['username']);
        $stmt->bindParam(":pword", $_POST['password']);
        $stmt->execute();

        if( $stmt->rowCount() > 0 ){

            echo 'There is a match!';
        }else{
            echo 'nooooo';
        }
}

PDOを使用するのはこれが初めてですが、正しく使用しましたか?すべての詳細が正しいように見え、ユーザーはデータベース内に存在するため、trueが返されない理由を理解できません。ありがとう

4

1 に答える 1

1

PDOで文字列をバインドすると、引用符が自動的に追加されます。クエリ内の:nameと:pwordを囲む引用符を削除するだけで、修正されるはずです。

于 2012-06-02T11:54:25.927 に答える