1

コードに問題がありmysqli_fetch_array()ます。なぜそれが機能しないのかを理解するために、変数を何度も交換して変更しました。基本的に、データベースにアクセスし、特定の基準に適合する行数を見つけて値を返すために必要です。mysqli_fetch_array()関数を機能させるために何ができるかについての洞察はありますか?

ありがとう。

<html>
<?php
$uname = "";
$pword = "";
$errorMessage = "";

function quote_smart($handle, $value) {
    if (get_magic_quotes_gpc()) {
        $value = stripslashes($value);
    }

    if (!is_numeric($value)) {
        $value = "'" . mysqli_real_escape_string($handle, $value) . "'";
    }

    return $value;
}

if ($_SERVER['REQUEST_METHOD'] == 'POST'){
$uname = $_POST['username'];
$pword = $_POST['password'];

$uname = htmlspecialchars($uname);
$pword = htmlspecialchars($pword);

$con = mysqli_connect("127.0.0.1", "root", "");
$db = mysqli_select_db($con, "users");

if ($db) {

    $uname = quote_smart($con, $uname);
    $pword = quote_smart($con, $pword);

    $SQL = "SELECT * FROM users WHERE L1 = $uname AND L2 = md5($pword)";
    $result = mysqli_query($con, $SQL);
    $num_rows = mysqli_fetch_array($result,MYSQLI_NUM);

    if ($result) {
        if ($num_rows > 0) {
            session_start();
            $_SESSION['login'] = "1";
            header ("Location: home.php");
        }
        else {
            session_start();
            $_SESSION['login'] = "";
            header ("Location: regpage.php");
        }   
    }
    else {
        $errorMessage = "Error logging on";
    }

mysqli_close($con);

}

else {
    $errorMessage = "Error logging on";
}

}
?>
</html>

私が問題を抱えている主なコードは次のとおりです。

   $num_rows = mysqli_fetch_array($result,MYSQLI_NUM);

実行するたびに、次のエラーメッセージが表示されます。

警告:mysqli_fetch_array()は、パラメーター1がmysqli_resultであると想定しており、ブール値が指定されています

4

3 に答える 3

0

試す

$SQL = "SELECT * FROM users WHERE L1 = '".$uname."' AND L2 = '".md5($pword)."'";
$result = mysqli_query($con, $SQL)or die(mysqli_error($connection));
$num_rows = mysqli_num_rows($result);

mysqli_errorを使用し、引数として接続を渡します

$connection = mysqli_connect("localhost", "root", "", "stackoverflow");
$result = mysqli_query($connection, $SQL)or die(mysqli_error($connection));

テストされたコード

<?php
    $uname = "";
    $pword = "";
    $errorMessage = "";

    function quote_smart($handle, $value)
    {
        if (get_magic_quotes_gpc())
        {
            $value = stripslashes($value);
        }

        if (!is_numeric($value))
        {
            $value = "'" . mysqli_real_escape_string($handle, $value) . "'";
        }
        return $value;
    }

    if (isset($_REQUEST['submit']))
    {
        $uname = $_POST['username'];
        $pword = $_POST['password'];

        $uname = htmlspecialchars($uname);
        $pword = htmlspecialchars($pword);

        $con = mysqli_connect("localhost", "root", "","stackoverflow");

        if ($con)
        {
            $uname = quote_smart($con, $uname);
            $pword = quote_smart($con, $pword);

            $SQL = "SELECT * FROM users WHERE username = ".$uname." AND password = ".$pword."";

            $result = mysqli_query($con, $SQL);
            $num_rows = mysqli_fetch_array($result,MYSQLI_NUM);

            if ($result)
            {
                if ($num_rows > 0)
                {
                    session_start();
                    $_SESSION['login'] = "1";
                    header ("Location: home.php");
                    exit;
                }
                else
                {
                    session_start();
                    $_SESSION['login'] = "";
                    header ("Location: regpage.php");
                    exit;
                }   
            }
            else
            {
                $errorMessage = "Error logging on";
            }
            mysqli_close($con);
        }
        else
        {
            $errorMessage = "Error logging on";
        }
    }
?>
于 2013-02-28T04:55:32.870 に答える
0

$num_rows = mysqli_fetch_array($result,MYSQLI_NUM);これにより、行数ではなくデータの配列が生成されます

行数を取得するにはmysqli_num_rows($result)

また

$num_rows = count(mysqli_fetch_array($result,MYSQLI_NUM));

于 2013-02-28T04:55:37.927 に答える
0

md5()php関数であり、mysql関数ではありません。あなたの場合、それはmysql関数のように使用しています。クエリを次のように置き換えてください。

$SQL = "SELECT * FROM users WHERE L1 = $uname AND L2 = '".md5($pword)."' ";
于 2013-02-28T05:02:37.487 に答える