2

正しいクエリSELECT * FROM mbgeust WHERE user_name = '{$name}' AND user_pass = SHA1('{$pass}')が結果を返すことを確認しましたが、「Showing rows 0 - 0 ( total 1, Query takes 0.0005 sec)」というメッセージがmysql_num_rows($mysql)返され、クエリが1行を返すという事実にもかかわらず、行0 - 1ではないため、0が返されますここに私のコード全体があります

<?php
    session_start();
    include './inc/sql.php';
    if(!isset($_SESSION['loggedin'])){
        if(isset($_POST['submit'])){
            $name = mysql_real_escape_string($_POST['username']);
            $pass = mysql_real_escape_string($_POST['password']);
            sql_start();
            $mysql = mysql_query("SELECT * FROM mbgeust WHERE user_name = '{$name}' AND user_pass = SHA1('{$pass}')")
                or die ("Error: ". mysql_error(). " with query ". $mysql);
            if(mysql_num_rows($mysql) == 1){
                $_SESSION['loggedin'] = TRUE;
                $_SESSION['name'] = $name;
                header('refresh:3; URL = /');
                die('You are now logged in!');
            }
            else{
                header('refresh:3; URL = /');
                die ('Password was probably incorrect!');
            }
            sql_stop();
            }
        echo "<form action='./' method='POST'>
        Username: <br/>
        <input type='text' name='username' /><br/>
        Password: <br/>
        <input type='password' name='password' /><br/>
        <input type='submit' name='submit' value='Login'/>
        </form>";
    }
    else {
        include 'main.php';
    }
?>

およびsql.php

<?php
    function sql_start(){
        global $con;
        $con = mysql_connect("mackinnonsbakery.co.uk.mysql","mackinnonsbaker","UE9ux3cZ")
            or die('Could not connect: ' . mysql_error());
        mysql_select_db("mackinnonsbaker", $con)
            or die('Could not connect: ' . mysql_error());
    }

    function sql_stop(){
        global $con;
        mysql_close($con);
    }
?>
4

2 に答える 2

1

mysql_real_escape_stringの前に呼び出しsql_start()ているため、アクティブなデータベース接続がありません $name$passおそらく に設定されていfalseます。エラー ログを確認すると、警告が表示されます。

于 2012-07-01T11:19:18.970 に答える
0

私はmysqliに切り替え、sql_start/sql_stopを変更して、ページの最初と最後に含まれるファイルを分離しました。mysqliに移動せずにこれを修正する方法を誰かが知っている場合は、この継ぎ目を並べ替えました。ここで他の人を助けるので、答えを提供してください。現在私のコードです:

<?php
    session_start();
    include './inc/sql_start.php';
    if(!isset($_SESSION['loggedin'])){
        if(isset($_POST['submit'])){
            $name = $mysqli->real_escape_string($_POST['username']);
            $pass = $mysqli->real_escape_string($_POST['password']);
            $query = "SELECT * FROM mbgeust WHERE user_name = '{$name}' AND user_pass = SHA1('{$pass}')";
            if ($stmt = $mysqli->prepare($query)) {
                $stmt->execute();
                $stmt->store_result();
                if($stmt->num_rows == 1){
                    $_SESSION['loggedin'] = TRUE;
                    $_SESSION['name'] = $name;
                    header('refresh:3; URL = /');
                    die('You are now logged in!');
                }
                else{
                    header('refresh:3; URL = /');
                    die ('Password was probably incorrect!');
                }
                $stmt->close();
            }
        }
        echo "<form action='./' method='POST'>
        Username: <br/>
        <input type='text' name='username' /><br/>
        Password: <br/>
        <input type='password' name='password' /><br/>
        <input type='submit' name='submit' value='Login'/>
        </form>";
    }
    else {
        include 'main.php';
    }
    include './inc/sql_stop.php';
?>

sql_start.php

<?php
    $mysqli = new mysqli("mackinnonsbakery.co.uk.mysql", "mackinnonsbaker", "UE9ux3cZ", "mackinnonsbaker");
    if (mysqli_connect_errno()) {
        printf("Connect failed: %s\n", mysqli_connect_error());
        exit();
    }
?>

sql_stop.php

<?php
    $mysqli->close();
?>

誰かが本当の解決策を持っている場合は、もう一度投稿してください

于 2012-07-01T11:10:49.033 に答える