2012-04-22 11 views
1

私はこの問題に困惑しています。非常に簡単なログイン画面。パスワードが一致すると、スクリプトは完全に動作し、main.phpにジャンプします。 unameまたはpswdが間違っていると、スクリプトはELSE節に落ちず、badlogin.phpに行きません。スクリプトは白い空白の画面でハングします。PHPスクリプトでIF文(ログインテスト)にELSE句が入力されない

助けがあれば助かります。 「($ RST =は、mysql_fetch_array($クエリ))しながら、」本当のことを証明することはありません、とwhileループが完全にスキップされるいかなる結果がクエリから返されていない場合があります

<?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') ; 
} 

} 

?> 
+0

を、あなたはまだそれことを証明しました* elseブロックを入力する必要がありますか? –

+0

'header( 'Location:...')'を呼んだ後に、必ず 'exit;'を使ってください。 – rid

+0

また、意味的に(少なくとも私にとっては)より意味のある「die(ヘッダー(..));」です。 – jli

答えて

1

編集:あなたは「do while」に変更するか、条件付きで修正することができます。

1

valid_usernamevalid_passwordの引用符を使用する必要があります。今、あなたはそれらを定数として使用しています。また、ループが不要でペアが一致するかどうかを確認するにはifを使用しています。すでにクエリーで確認しています。 私はあなたの問題は、あなたが2番目の比較を行うときにエスケープされた値とdbからの値を比較しているかもしれないと思う。 WiseguyとVDHが正しい場合、クエリがfalseを返すときにはwhileを入力することはありません。とにかく、この簡単なバージョンは、これらすべての問題に対処する必要があります。ここでは

<?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') ; 
} 
?> 
+0

私は何を言っているのか分かります。それは今働いています。どうもありがとう!これは単なる学校プロジェクトなので、プレーンテキストのパスワードです。 .... – user1349089

+0

知っておいて、私もそれについてコメントするつもりだった! – bfavaretto

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;  
} 
?> 
関連する問題