0

データベースに接続できることはわかっています。コードを修正する前に確認しました。

管理者がログインしたときにリダイレクトしたいのですtableedit.phpが、ユーザーが管理者でない場合はにリダイレクトしたいと思いtableuser.phpます。

これはエラーです:

警告: mysql_fetch_array() は、パラメーター 1 がリソースであると想定し、47 行目の C:\xampp\htdocs\joy\inventory\login.php で指定された文字列 クエリが失敗しました

コードは次のとおりです。

//Create query
$qry="SELECT * FROM user WHERE username='$username' AND password='".md5($_POST['password'])."'";

while($row=mysql_fetch_array($qry));

$result = $row['username'];
{
//Check whether the query was successful or not
if($result) {
    if(mysql_num_rows($result)== 'admin'){
        session_regenerate_id();
        $member = mysql_fetch_assoc($result);
        $_SESSION['SESS_MEMBER_ID'] = $member['id'];
        $_SESSION['SESS_FIRST_NAME'] = $member['username'];
        $_SESSION['SESS_LAST_NAME'] = $member['password'];
        session_write_close();
        header("location: tableedit.php");
        exit();
    }
    elseif(mysql_num_rows($result) != 'admin') {
        //Login Successful   
        session_regenerate_id();
        $member = mysql_fetch_assoc($result);
        $_SESSION['SESS_MEMBER_ID'] = $member['id'];
        $_SESSION['SESS_FIRST_NAME'] = $member['username'];
        $_SESSION['SESS_LAST_NAME'] = $member['password'];
        session_write_close();
        header("location: tableuser.php");
        exit();
    } else {
        //Login failed
        $errmsg_arr[] = 'Username and password not found.';
        $errflag = true;
        if($errflag) {
            $_SESSION['ERRMSG_ARR'] = $errmsg_arr;
            session_write_close();
            header("location: index.php");
            exit();
        }
    }
} else {
    die("Query failed");
}}
4

3 に答える 3

0

最初に mysql_query を実行し、結果を配列に入れる必要があります。この後:

   $qry="SELECT * FROM user WHERE username='$username' AND
         password='".md5($_POST['password'])."'";

これを行う:

$result = mysql_query($qry);

次、

 while($row = mysql_fetch_array($result)){
    // stuff
    }

さらに、セキュリティを確保するために、md5 でソルトを使用することをお勧めします。さらに追加するには、さらに優れたセキュリティのためにsha1を使用できます

于 2013-09-26T18:51:17.277 に答える
0

あなたのコードには多くの問題があります... 多くのmysql_*関数があなたが思っているようには機能しません。どのリソースから学習していますか?

ほとんどの php 関数については、http: //php.net/FUNCTION_NAMEにアクセスしてください。

例:

  1. http://php.net/mysql_query
  2. http://php.net/mysql_num_rows
  3. http://php.net/mysql_fetch_array

コード

次のコードで開始できます。関連する場所にすべてのものを追加できます$_SESSION(コメントを参照)。

$password = md5($password);
$qry= mysql_query("SELECT * FROM user WHERE username='$username' AND password='$password'");
if(mysql_num_rows($qry)){
    while($row = mysql_fetch_array($qry)){
        if($row['uername'] == 'admin'){
            //The user IS the admin
            header('location:tableedit.php');
        }
        else{
            //The user is NOT admin
            header('location:tableuser.php');
        }
    }
}
else{
    //Login failed
    header('location:/');
}

exit; //Only need this once at the end

mysqli::

mysqli(または)に変更することも検討することを強くお勧めしますPDO...それを行う場合は、次のように開始します。

$mysqli = new mysqli('localhost', 'USERNAME', 'PASSWORD', 'DATABASE'); //Replace USERNAME, PASSWORD, DATABASE to the actual database username etc.

$password = md5($password);
$qry= $mysqli->query("SELECT * FROM user WHERE username='$username' AND password='$password'");
if($qry->num_rows){
    while($row = $qry->fetch_assoc()){
        if($row['uername'] == 'admin'){
            //The user IS the admin
            header('location:tableedit.php');
        }
        else{
            //The user is NOT admin
            header('location:tableuser.php');
        }
    }
}
else{
    //Login failed
    header('location:/');
}

exit; //Only need this once at the end

詳細については、ドキュメントを確認してください。

  1. http://php.net/mysqli_query
  2. http://php.net/mysqli_num_rows
  3. http://php.net/mysqli_fetch_assoc
  4. http://php.net/mysqli
于 2013-09-26T19:12:21.187 に答える
0

mysql_fetch_array は、MySQL リソースをパラメーターとして想定しています。リソースは mysql_query から返されるため、

$qry = 'YOUR QUERY';
$res = mysql_query($qry);
while ($row = mysql_fetch_array($res))

そして... mysql_num_rows は「admin」を返すことはありません (整数、指定されたリソースの行数を返します)。したがって、常に tableuser.php にリダイレクトされます。

この場合、「elseif」は必要ありません。ここでは「else」が最適です:)

そして、なぜ mysql_* が機能するのですか? PDOを試してください:)

于 2013-09-26T19:02:57.957 に答える