0

こんにちは、認証が失敗し続ける理由を理解するのに苦労しています。私は多くのデバッグ方法を試しましたが、私は困惑していると思います。私はまだ初心者であり、今のところセキュリティは問題ではありません。私はそれを機能させたいだけです。

私の登録スクリプトでは、ユーザーにユーザー名とパスワードを入力してもらいます

            $username  = $_POST['username'];
            $password  = $_POST['password'];

// Post Data 保存中

            $createTable = $db->prepare("CREATE TABLE `$username` (Title varchar(40) ,
                                                    About   varchar(1000) , 
                                                    Chapter int(4),
                                                    Img varchar(100) , 
                                                    Url varchar(50)) ");

            $createTable->execute();

/// ユーザー用のテーブルを作成します

            $Register = $db->prepare("INSERT INTO library (id, 

username, password) VALUES ($id ,
'$username','$password')");
            $Register ->execute();

// データをライブラリ テーブルに挿入します。ライブラリにはユーザーとパスワードがあります

                echo 'user sucessfully registered';

                $_SESSION['user'] = $username;
                $_SESSION['pass'] = $password;

私が抱えている問題は、ログインのためにこれを認証することです。ログイン関数は、パラメーターとして使用される 2 つの SESSION 変数で呼び出されます。

function login($SentUser , $SentPass)

      {

echo 'trying to log in '.'<br>';

    require_once 'Connection.php';
    $user = $SentUser;
    $pass = $SentPass;

    /// check data base for match user and pass
        $sth = $db->prepare('SELECT username , password from `library` where username = ? And password = ? ');

        $sth->bindParam(1, $user);
        $sth->bindParam(2, $pass);
        $sth->execute();


        while ($row = $sth->fetch(PDO::FETCH_ASSOC))
            {
        echo 'user : ' . $row['username'] , '<br>';
        echo 'pass: ' . $row['password'] , '<br>';
        echo '<br>';
            }
        .
        // fetchcolumn returns true false if select took a row or not.
if($sth->fetchColumn() != false) { /// This is where the code fails as it almost always goes to the else case.

            $_SESSION['user'] = $user;
            $_SESSION['pass'] = $pass;
            $_SESSION['passed'] = TRUE;
            echo 'Welcome '.$user.'<br>';}
        else
            {

                echo 'failed authenticate'.'<br>';

            }

さらに明確にするために、呼び出されている connection.php を次に示します。基本的には、$db オブジェクトを提供するデータベースに接続するだけです。

<?php


$config['db'] = array(
    'host' => 'localhost',
    'username' => 'root',
    'password' => '',
    'dbname' => 'mywebsite'
    );




$db = new PDO('mysql:host=' . $config['db']['host']. ';dbname=' . $config['db']['dbname'] , $config['db']['username'] , $config['db']['password']);

?>
4

1 に答える 1

1

libraryテーブルにはユーザー/パスワードがあると述べました。したがって、ユーザーごとに 1 つの行のみを持つ必要があります。以下のようにコードを変更します。

   if($sth->rowCount() == 1) {
      //row exists, so user exists
      $row = $sth->fetch(PDO::FETCH_ASSOC);
      echo 'user : ' . $row['username'] , '<br>';
      echo 'pass: ' . $row['password'] , '<br>';
      echo '<br>';

      //set session
      $_SESSION['user'] = $user;
      $_SESSION['pass'] = $pass;
      $_SESSION['passed'] = TRUE;
      echo 'Welcome '.$user.'<br>';
   } else {
      //auth failed
      echo 'failed authenticate'.'<br>';
   }
于 2013-10-05T08:44:21.420 に答える