1

私はこれに困惑しています。非常にシンプルなログイン画面。パスワードが一致すると、スクリプトは完全に機能し、main.php にジャンプします。uname または pswd が間違っている場合、スクリプトは ELSE 句に落ちず、badlogin.php に移動しません。スクリプトは、空白の白い画面でハングします。

どんな助けでも素晴らしいでしょう。

<?php
include("dbconnect.php");
$u_name = mysql_real_escape_string($_POST['uname']);
$p_word = mysql_real_escape_string($_POST['pword']);
# *** querying all records ***
$query = mysql_query("SELECT * FROM notes_users WHERE valid_password = '$p_word' && valid_username = '$u_name'");
while($rst = mysql_fetch_array($query)) {

if (($rst[valid_username] == $u_name) AND ($rst[valid_password] == $p_word)) {
    session_start();
    $_SESSION['login'] = "1";
    header('Location: main.php') ;
} else {
    session_start();
    $_SESSION['login'] = '';
    header('Location: badlogin.php') ;
}

}

?>
4

3 に答える 3

1

クエリから結果が返されない場合、「while($ rst = mysql_fetch_array($ query))」が真になることはなく、whileループは完全にスキップされます。

編集:「dowhile」に変更するか、while条件を修正することができます。

于 2012-04-22T04:14:13.033 に答える
1

valid_usernameとの周りに引用符が必要valid_passwordです。現在、それらを定数として使用しています。また、ループは必要ありませんif。ペアが一致するかどうかを確認するには、クエリですでに確認しています。2回目の比較を行うときに、データベースの値をエスケープされた値と比較していることが問題である可能性があります。WiseguyとVDHは正しいです。whileクエリが返されるときに、を入力することはありませんfalse。とにかく、この単純なバージョンはこれらすべての問題に対処する必要があります。

<?php
session_start();
include("dbconnect.php");
$u_name = mysql_real_escape_string($_POST['uname']);
$p_word = mysql_real_escape_string($_POST['pword']);
# *** querying all records ***
$query = mysql_query("SELECT * FROM notes_users WHERE valid_password = '$p_word' AND valid_username = '$u_name'");
if(mysql_num_rows($query) > 0) {
    $_SESSION['login'] = "1";
    header('Location: main.php') ;
} else {
    $_SESSION['login'] = '';
    header('Location: badlogin.php') ;
}
?>
于 2012-04-22T04:17:04.267 に答える
0

ここにいくつかの変更があります。一致を期待しているだけの場合は、結果をループしないでください。

<?php
//Session start at the top
session_start();
include("dbconnect.php");

$u_name = mysql_real_escape_string($_POST['uname']);
$p_word = mysql_real_escape_string($_POST['pword']);

# *** querying all records ***
//Some changes, use a LIMIT clause unless your expecting multiple users
//And as your only checking for row existence there no need to return *
//And never have plain txt passwords in db, use at least sha1 and not md5
$query = mysql_query('SELECT 1 
                      FROM notes_users 
                      WHERE valid_password ="'.sha1($p_word).'" && valid_username = '.$u_name.'" LIMIT 1');

//assoc
$rst = mysql_fetch_assoc($query);

//User found
if(mysql_num_rows($rst)==1){
    $_SESSION['login'] = true;
    header('Location: ./main.php');
    die;
}else{
//User not found    
    $_SESSION['login'] = false;
    header('Location: ./badlogin.php');
    die;    
}
?>
于 2012-04-22T04:19:33.707 に答える