bugfix> php > 投稿

SQLで2つのテーブルを作成しました。 1つ目はログインテーブルで、2つ目は登録テーブルです。ログインテーブルに、ユーザーadminとパスワードadminの行を挿入しました。ログインしているときに機能します。しかし、登録テーブルからログインしたいと思います。すでに登録済みのユーザーがログインできるようにするには、どうすればいいですか?

以下は私のコードです、助けてください。 登録ユーザーとしてログインしようとすると、「ユーザー名またはパスワードが無効です」というエラーが表示されます。

<?php 
include('../dbcon.php');  //Database connection included
if (isset($_POST['login'])) {
    $username = $_POST['uname'];       //data of login table in sql
    $password = $_POST['password'];
    $qry = "SELECT * FROM `login` WHERE `uname`='$username' AND `password`='$password' ";
    $run = mysqli_query($dbcon,$qry);
    $row = mysqli_num_rows($run);
    if ($row<1) 
    {
        echo "invalid usernaem or password";
    }
    else
    {
        $data = mysqli_fetch_assoc($run);
        $id  = $data['id'];
        echo "Your Id is " .$id;
    }
}
else
{
    if (isset($_POST['login'])) {       //for the  data of registraion table in sql
        $username = $_POST['uname'];
        $password = $_POST['password'];
        $qry = "SELECT * FROM `registration` WHERE `uname`= '$username' OR `email`='$email' AND `password` = '$password' ";
        $run = mysqli_query($dbcon,$qry);
        $row = mysqli_num_rows($run);
        if ($row<1) 
        {
            echo "password is incorrect";
        }
        else
        {
            $data = mysqli_fetch_assoc($run);
            $id  = $data['id'];
            echo "Your Id is " .$id;
        }
    }
}
?>

回答 1 件
  • registration を照会する必要があります   login のときのテーブル  クエリは何も見つかりません。

    <?php 
    include('../dbcon.php');  //Database connection included
    if (isset($_POST['login'])) {
        $username = $_POST['uname'];       //data of login table in sql
        $password = $_POST['password'];
        $qry = "SELECT * FROM `login` WHERE `uname`='$username' AND `password`='$password' ";
        $run = mysqli_query($dbcon,$qry);
        $row = mysqli_num_rows($run);
        if ($row<1) 
        {
            // not an admin, check registration table
            $email = $_POST['email'];
            $qry = "SELECT * FROM `registration` WHERE (`uname`= '$username' OR `email`='$email') AND `password` = '$password' ";
            $run = mysqli_query($dbcon,$qry);
            $row = mysqli_num_rows($run);
            if ($row<1) 
            {
                echo "password is incorrect";
            }
            else
            {
                $data = mysqli_fetch_assoc($run);
                $id  = $data['id'];
                echo "Your Id is " .$id;
            }
        }
        else
        {
            $data = mysqli_fetch_assoc($run);
            $id  = $data['id'];
            echo "Your Id is " .$id;
        }
    }
    ?>
    
    

    また、変数をSQLに代入する代わりに準備されたステートメントを使用して、SQLインジェクションから保護することも学習する必要があります。 PHPでSQLインジェクションを防ぐ方法を参照してください。そして、あなたは password_hash() を使用する必要があります  および password_verify()  プレーンテキストのパスワードをデータベースに保存する代わりに。

あなたの答え