0

ログインページを作成しようとしていますが、データが送信されないという問題があります。誰かが私を助けることができますか?

  $myusername = stripslashes($username);
    $mypassword = stripslashes($password);
    $myusername = mysqli_real_escape_string($myusername);
    $mypassword = mysqli_real_escape_string($mypassword);

    $sql="SELECT * FROM login_admin WHERE user_name='$myusername' and user_pass=SHA1('$mypassword')";
    $result=mysql_query($dbC, $sql);
    // Mysql_num_row is counting table row
    $count=mysql_num_rows($result);
    // If result matched $myusername and $mypassword, table row must be 1 row
    if($count==1){
        // Register $myusername, $mypassword and redirect to file "admin.php"
        session_register("admin");
        session_register("password");
        $_SESSION['name']= $myusername;
        header("location:admin.php");
    }
    else {

        $msg = "$username $password $myusername $mypassword $sql $result Wrong Username or Password. Please retry";
        header("location:login.php?msg=$msg");
    }

そして、私が得る出力は次のとおりです。test test123 SELECT * FROM login_admin WHERE user_name = \'\' and user_pass = SHA1(\'\')間違ったユーザー名またはパスワード。再試行してください

4

2 に答える 2

0

mysqli_real_escape_stringの最初の引数として$link識別子を指定する必要があるため、これらの行は次のようになります。

$myusername = mysqli_real_escape_string($dbconn,$myusername);
$mypassword = mysqli_real_escape_string($dbconn,$mypassword);

ここで、$ dbconnは、から取得するリンクですmysqli_connect。mysqli_ *関数のセットに切り替える場合は、mysqli_に相当するものを使用する必要があるときに、mysql_queryとmysql_num_rowsも使用します。

(現在はレガシーの)mysql関数を使用するよりも、mysqli(またはPDO)に切り替えることを強くお勧めします。PHP.netは、その理由に関する情報を提供します。

于 2013-02-01T04:06:37.387 に答える
0

準備されたクエリと呼びたい(素晴らしい)ものを使用することを検討してください。
これらは、実行されるステートメントとしてではなく、データとしてデータを扱うという点で優れています。これは、入力が誤って解釈される可能性がないため、エスケープする必要がないことを意味します。

あなたのケースでこれを実装するには:

$sql = "SELECT user_name FROM login_admin WHERE user_name = ? AND user_pass = SHA1(?)";
if ($query = $db->prepare($sql)) { //returns false if incorrect syntax, error, etc.
    $query->bind_param("ss", $user, $pass);
    // ss = string, string
    // mixed bind_param($params, **args);
    $query->execute();
    $query->bind_result($u);
    $query->fetch();
    $query->close();
} else {
    /* error handling */
}
if ($u) {
    /* session setting */
    header("Location: admin.php");
} else {
    header("Location: login.php?e=1");
}

また、ログインシステム用のほとんどすべてを実装するものにコピーアンドペーストすることを書いた、動作する管理コントロールパネルprivate.phpがあります(を参照) 。

また、あなたの本当の質問に答えるために、データベース接続なしでmysqliでエスケープを行うそのような方法はありません。関数の先頭にデータベースを追加します。

mysqli_real_escape_string($db, $string);
于 2013-02-01T04:22:50.217 に答える