-1

管理者 (管理者フォーム) としてログインすると、エラー: 管理者ログインが表示され続けます。顧客まだテーブル (db_table_customers) を持っていません。

編集:Wampを使用すると、これが得られます


( ! ) Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, boolean given in C:\wamp\www\dev6\login.php on line 36
Call Stack
#   Time    Memory  Function    Location
1   0.0003  692264  {main}( )   ..\login.php:0
2   0.0121  710400  mysqli_num_rows ( ) ..\login.php:36

36行目は$rows = mysqli_num_rows($result);

また、var_dump() で $result と $row を実行すると、Web ブラウザーに次のように出力されます。

ブール偽

ヌル


これは、login.php が、db_table_admins テーブルの admin に提供されたログインと一致しないことを意味します。しかし、私は管理者に正しいログイン情報を提供しています。何度もチェック。

<form name="admin_login" method="POST" action="login.php">
        <h3>Admin:</h3>
        Username: <input type="text" id="username" name="admin_login[username]"><br>
        Password: <input type="password" id="password" name="admin_login[password]"><br>
        <input type="submit" name="admin_submit" value="Login">
</form> 

<form name="customer_login" method="POST" action="login.php">
        <h3>Customer:</h3>
        Username: <input type="text" id="username" name="customer_login[username]"><br>
        Password: <input type="password" id="password" name="customer_login[password]"><br>
        <input type="submit" name="customer_submit" value="Login">
</form> 

ログイン.php

<?php

    require('connection.inc.php');

    $username = null;
    $password = null;
    $administrator = false;
    $result = null;

    $link = mysqli_connect($db_host, $db_username, $db_password, $db_database) or die("Can't connect");

    if(isset($_POST['admin_submit'])){
            $administrator = true;
            $username = $_POST['admin_login']['username'];
            $passname = $_POST['admin_login']['password'];
    }else{
            $username = $_POST['customer_login']['username'];
            $passname = $_POST['customer_login']['password'];
    }

    if($administrator){
        $query = "SELECT * FROM $db_table_admins WHERE username='$username' AND password='$password'";
        $result = mysqli_query($link, $query);
        $rows = mysqli_num_rows($result);

        if($rows == 1){
            $_SESSION['admin'] = true;
            header("location:login_success.php");
        }else{
            echo "Error: admin login";
        }
    }else{
        $query = "SELECT * FROM $db_table_customers WHERE username='$username' AND password='$password'";
        $result = mysqli_query($link, $query);
        $rows = mysqli_num_rows($result);

        if($rows == 1){
            $_SESSION['admin'] = false;
            header("location:login_success.php");
        }else{
            echo "Error: customer login";
        }
    }
?>
4

2 に答える 2

0

管理者のログイン ボタンは次のように呼ばれますadmin_submit

 <input type="submit" name="admin_submit" value="Login">

しかし、あなたのコードでは以下をチェックしますadmin_login:

if($_POST['admin_login']){

テキストフィールドにすでに使用されているため、admin_submit確認する必要があります(そして...に変更する必要があります)admin_login

編集:ご指摘のとおり、SQL インジェクションの問題があります。つまり、たとえば、'文字が$_POSTクエリを壊します。

それとは別に、テーブル名に変数を使用しているようです。これらはどこから来たのですか / それらは設定されていますか?

于 2013-02-04T17:24:26.320 に答える
0

あなたは持っていますが$administrator = true;、あなたはテストしますif($admin){

于 2013-02-04T17:10:04.180 に答える