0

重複の可能性:
警告: mysql_fetch_array(): 指定された引数は有効な MySQL 結果ではありません

ユーザー名とパスワードを入力すると、エラーが発生します

mysql_num_rows(): 指定された引数は有効な MySQL 結果リソースではありません

データベースが選択されていないと表示されます...

このエラーが何を意味するのか気になりました。データベースへの接続に問題があるのでしょうか、それとも構文の問題でしょうか。これがユーザー名とパスワードのコードです

$query = mysql_query("SELECT * FROM Users WHERE username = '$user'");
                $numrows = mysql_num_rows($query);
                if($numrows == 1){
                    $row = mysql_fetch_assoc($query);
                    $dbid = $row['id'];
                    $dbuser = $row['username'];
                    $dbpass = $row['password'];
                    $dbactive = $row['active'];

                    if($password == $dbpass){
                        if($dbactive == 1){

                            //set session info
                            $_SESSION['userid'] = $dbid;
                            $_SESSION['username'] = $dbuser;

                            echo "You have been logged in as <b>$dbuser</b> Click here to go to member page.";

                        }else
                            echo "You must activate your account to login.";

                    }else 
                        echo "You did not enter the correct password.";


                }else 
                    echo "The username you entered was not found.";
            }


        }else
            echo "You must enter your username.";

    }

問題は $query 行にあります。最初の行

4

2 に答える 2

1

最も可能性の高い原因は、接続されていないか、正しいデータベースを選択していないことですmysql_error()。これを追跡するために使用する必要があります。しかし、いくつかのロジックの混乱も見られます。これは非常に単純なログインの例です。PHP ではなく、データベース クエリでチェックを行う必要があります (データベース以外の場所にパスワードを保存する必要はありません)。また、ユーザー アカウントのパスワードをハッシュし、ユーザー入力をエスケープする必要があります。

<?php 
session_start();
$db = mysql_connect('host','uesr','pass') or die(mysql_error());
mysql_select_db('database') or die(mysql_error());

if($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['username']) && isset($_POST['password'])){

    $username = mysql_real_escape_string($_POST['username']);
    $password = mysql_real_escape_string($_POST['password']);

    $query = mysql_query("SELECT `username`,`active`
                          FROM Users 
                          WHERE username ='$user' && password='$password' && active=1
                          LIMIT 1");

    if(mysql_num_rows($query) == 1){
        //Log in user found
        $row = mysql_fetch_assoc($query);

        $_SESSION['username']  = $row['username'];
        $_SESSION['active']    = $row['active'];
        $_SESSION['logged_in'] =true;
        header('Location: ./members.php');
        die;
    }else{
        //failed login
        $_SESSION['logged_in']=false;
        $_SESSION['log_in_error']='Fail!! Account not active or incorrect login information!';
        header('Location: ./login.php');
        die;
    }
}
?>
于 2012-04-22T21:14:11.123 に答える
0

zerkms が提案したように、mysql_error() を画面に出力してみてください。何かのようなもの:

$query = mysql_query("your_query here");
if(!$query){
    echo 'Error! : ' . mysql_error();
}

http://www.php.net/manual/en/function.mysql-error.php

これらすべてを行う前に、データベースに接続していることを確認してください。例: http://php.net/manual/en/function.mysql-connect.php

$link = mysql_connect('localhost', 'database_user', 'database_password');
if(!$link){
    die('Could not connect: ' . mysql_error());
}

//select your db
mysql_select_db("YOUR_DB_NAME",$link);


$result = mysql_query("SELECT * FROM Users WHERE username = '$user'");
if(!$result){
    echo 'Error! ' . mysql_error();
}
于 2012-04-22T20:59:48.113 に答える