2013-06-03 11 views
6

セッションを起動して実行するのに問題があります。私は過去数時間にわたって自分のコードを調べてきたので、何が間違っているのか分かりません。私が経験している問題は、ユーザー名とパスワードを入力するたびに、securedpage.phpを表示する必要があるときにログインページにリダイレクトされるだけです。シンプルなログインセッションphp

ここに私のコードです:

loginproc.phpページ - このページでは、if文を通じて段階的に説明し、他の

<?php 

// Inialize session 
session_start(); 

// Include database connection settings 
include('../../model/database.php'); 

// Retrieve username and password from database according to user's input 
$login = mysql_query("SELECT * FROM user WHERE (username = '" . mysql_real_escape_string($_POST['username']) . "') and (password = '" . mysql_real_escape_string($_POST['password']) . "')"); 

// Check username and password match 
if (mysql_num_rows($login) == 1) { 
// Set username session variable 
$_SESSION['username'] = $_POST['username']; 
// Jump to secured page 
header('Location: securedpage.php'); 
} 
else { 
// Jump to login page 
header('Location: index.php'); 
} 

?> 

securedpage.phpページ

に直進します210
<?php 

// Inialize session 
session_start(); 

// Check, if username session is NOT set then this page will jump to login page 
if (!isset($_SESSION['username'])) { 
header('Location: index.php'); 
} 

?> 
<html> 

<head> 
<title>Secured Page</title> 
</head> 

<body> 

<p>This is secured page with session: <b><?php echo $_SESSION['username']; ?></b> 
<br>You can put your restricted information here.</p> 
<p><a href="logout.php">Logout</a></p> 

</body> 

</html> 

database.phpでページが

<?php 
$dsn = 'mysql:host=localhost;dbname=sports_db'; 
$username = ''; 
$password = ''; 
$options = array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION); 

try { 
    $db = new PDO($dsn, $username, $password, $options); 
} catch (PDOException $e) { 
    $error_message = $e->getMessage(); 
    include 'errors/db_error_connect.php'; 
    exit; 
} 

function display_db_error($error_message) { 
    global $app_path; 
    include 'errors/db_error.php'; 
    exit; 
} 
?> 
+1

がいるかどうかのレコードが 'DB'かからフェッチしていることを確認して見ます与えられたユーザ名とパスワードのためではありません –

+0

あなたは '$ login'に対してvar_dumpを実行できますか? – Cjueden

+0

mysql_num_rows($ login)はどのような価値を返しますか? –

答えて

8
+0

完璧!ありがとう、私は完全に私はPDOとmysql_を組み合わせることはできないことを理解している* – user2446521

+0

@ user2446521理由なしのおかげで..あなたを助けて嬉しい:) – alwaysLearn

0

問題は、おそらくここにある:

if (mysql_num_rows($login) == 1) {

使用トリプル方程式あなたは整数ほとんどの場合1をチェックしたい場合は、しかし、ですログイン/パスが失敗したことを示します。

そして、この:

$_SESSION['username'] = $_POST['username'];

では、有効な応答を取得した場合でも、悪い習慣です。

+1

なぜ、なぜ? – gkalpak

+0

あなたに何を求めているかわからない – user2446521

+0

上記のように、mysql_num_rows($ login)== 0が得られます。これはログイン/パスが失敗することを意味します。 – Sven

0

私はあなたのための提案を持っている:

1)あなたのセッション変数に直接データを与えられたユーザーを保管しないでください。

2)最初に、ユーザーの資格情報がテーブルに存在するかどうかを確認し、対応する行をフェッチし、フェッチされたデータをセッション変数に格納します。あなたは

<?php 

// Inialize session 
session_start(); 

// Include database connection settings 
include('../../model/database.php'); 

// Retrieve username and password from database according to user's input 
$stmt = $db->prepare("SELECT * FROM user WHERE (`username` = :username) and (`password` = :password)"); 

$result = $stmt->execute(array(':username'=>$_POST['username'],':password'=>$_POST['password'])); 
$num_rows = $stmt->rowCount(); 
// Check username and password match 
if ($num_rows > 0) { 
// Set username session variable 
$_SESSION['username'] = $_POST['username']; 
// Jump to secured page 
header('Location: securedpage.php'); 
} 
else { 
// Jump to login page 
header('Location: index.php'); 
} 

?> 

にコードを変更してみてくださいあなたはPDOでクエリを作成し、mysql_* を使用している... PDOとMySQLを混在させることはできません

関連する問題