-2

警告が表示されるユーザーログインフォームを作成しようとしています。これがすべてのスクリプトです

conncect.php

<?php

$con = mysql_connect("localhost" , "xxx" , "xxxxxx");
if(!$con)
{
    die('Could Not Connect' . mysql_error());
}
else
{
    echo "User Connect". "<br>";
}
mysql_select_db("xxxx" , $con)
or die('Error: could not connect' . mysql_error());

echo "Database connected" . "<br>";


function dbQuery($sql)
{
    return mysql_query($sql) or die('Query Failed. ' . mysql_error());
}

function dbAffectedRows()
{
    global $dbConn;
    return mysql_affected_rows($dbConn);
}

function dbFetchArray($result, $resultType = MYSQL_NUM)
{
    return mysql_fetch_array($result, $resultType);
}
function dbFetchAssoc($result)
{
    return mysql_fetch_assoc($result);
}
function dbFetchRow($result)
{
    return mysql_fetch_row($result);
}
function dbFreeResult($result)
{
    return mysql_free_result($result);
}
function dbNumRows($result)
{
    return mysql_num_rows($result);
}
function dbSelect($dbName)
{
    return mysql_select_db($dbName);
}

?>

function.php

<?php
require_once 'connect.php';
    $userName = $_POST['txtUserName'];
    $password = $_POST['txtPassword'];

//$sql = mysql_query("SELECT user_id FROM user WHERE user_name = '$userName' AND user_password = '$password'") or die('error in query!' . mysql_error()); 
$sql = "SELECT user_id FROM user WHERE user_name = '$userName' AND user_password = '$password'"; 


echo $result = dbQuery($sql);

    if(dbNumRows($result)==1){
        $row = dbFatchAssoc($result);
        echo '$row[user_id]';
        }

?>

以下のconnect.phpで警告が表示されます

警告:mysql_num_rows()は、パラメーター1がリソースであり、connect.phpでブール値が指定されていることを想定しています。

誰か助けてください、よろしくお願いします

警告テーブル全体を追加します

(!)警告:mysql_num_rows()は、パラメーター1がリソースであると想定しています。ブール値は48行目のC:\ wamp \ www \ tb_ad\connect.phpで指定されています。

#   Time    Memory  Function    Location
1   0.0032  367408  {main}( )   ..\function.php:0
2   0.0130  385640  dbNumRows( )    ..\function.php:15
3   0.0130  385672  mysql_num_rows ( )  ..\connect.php:48
4

2 に答える 2

2

ここに欠けているものが 2 つあります。1) パラメータのサニタイズと 2) エラーチェック。

アプリをPDOに変換せずに(実際に行う必要があります)、次のことを試してください。

$sql = sprintf("SELECT user_id FROM user WHERE user_name = '%s' AND user_password = '%s'",
    mysql_real_escape_string($_POST['txtUserName']),
    mysql_real_escape_string($_POST['txtPassword']));
$result = mysql_query($sql);
if ($result === false) {
    throw new Exception(mysql_error());
}

あなたもチェックしているはずです

  • リクエスト方法がPOST
  • txtUserNameとのtxtPassword項目が設定されている場合$_POST

開発のために、これをスクリプトの先頭に配置することもお勧めします(または、できればこれらを に設定しますphp.ini

ini_set('display_errors', 'On');
error_reporting(E_ALL);

また、プレーンテキストのパスワードを保存することは教科書的に悪いことです。ソフトウェア アプリケーションのセキュリティについてもう少し読むことをお勧めします。これが出発点です - https://www.owasp.org/index.php/Category:OWASP_Top_Ten_Project

于 2012-05-09T05:07:18.090 に答える
1

echo $result = dbQuery($sql);クエリの実行が成功しなかった場合、この行は FALSE を返します。

したがって、次のようなものを追加する必要があります:

if (!$result)
{
    //handle the error
}
于 2012-05-09T05:12:09.703 に答える