2013-02-27 271 views
0

我對php比較陌生,我試圖編寫一個非常簡單的登錄腳本。我已經獲得了基本的功能,但我無法登錄到系統。我的登錄腳本在下面,我的註冊腳本也在下面。php登錄身份驗證失敗

checklogin.php

include_once 'inc/db.inc.php'; 

$username = mysql_real_escape_string($_POST['username']); 
$password = mysql_real_escape_string(md5($_POST['password'])); 


try { 
$sql="SELECT id, username, password FROM users WHERE username='$username' and password='$password'"; 
$result = $pdo->query($sql); 
$count=mysql_num_rows($result); 
// If result matched $username and $password, table row must be 1 row 
if($count == 1){ 

    // Register $username, $password and redirect to file "index.php" 
    session_register("username"); 
    session_register("password"); 
    header("Location: index.php"); 
} 
else { 
header("Location: login.php?invalid=1"); 
} 
} 

catch (PDOException $e) { 
    echo $e; 
} 

ob_end_flush(); 

?> 

checkreg.php

include_once 'inc/db.inc.php'; 

//This makes sure they did not leave any fields blank 
if (!$_POST['username'] | !$_POST['password'] | !$_POST['passwordconf']) { 
    die('You did not complete all of the required fields'); 
} 

if ($_POST['password'] != $_POST['passwordconf']) { 
    die('Your passwords did not match. '); 
} 

$_POST['password'] = md5($_POST['password']); 
if (!get_magic_quotes_gpc()) { 
    $_POST['password'] = addslashes($_POST['password']); 
    $_POST['username'] = addslashes($_POST['username']); 
     } 
$username = $_POST['username']; 
$password = $_POST['password']; 

try { 
// now we insert it into the database 
$sql = "INSERT INTO users(username,password) VALUES ('$username','$password')"; 
$result = $pdo->exec($sql); 
header("Location: index.php"); 

} catch (PDOException $e){ 
echo $e; 
} 
?> 

我知道該登記寫入數據庫,但每次我嘗試我收到我的證書無效標誌有效的登錄。任何你能做的事情都會很棒。謝謝。

+0

似乎不像你阻止人們註冊相同的用戶名/密碼組合。你在桌上碰巧有不止一次相同的組合?這會阻止$ count從1,並導致你所看到的。 – Gyhth 2013-02-27 19:10:17

+0

您是否嘗試在登錄後嘗試回顯用戶名和密碼以查看它們是否與數據庫匹配? – James 2013-02-27 19:11:42

回答

0

您的問題可能與session_register()有關,具體取決於您使用的PHP版本。嘗試把

session_start(); 

checklogin.php的頂部,然後利用

... 
    $_SESSION['username'] = $username; 
    $_SESSION['password'] = $password; 
    ... 

代替了session_register()

+0

'code'session_start(); $ username = mysql_real_escape_string($ _ POST ['username']); $ password = mysql_real_escape_string(md5($ _ POST ['password'])); try { \t $ sql =「SELECT id,username,password FROM pinters WHERE username ='$ username'and password ='$ password'」; \t $ result = $ pdo-> query($ sql); \t $ count = mysql_num_rows($ result); ($ count = 0){ \t \t $ _SESSION [「username」] = $ username; \t \t $ _SESSION [「password」] =「validated」; \t \t header(「Location:index.php」); \t} \t else { \t echo $ username; \t echo $ password; \t // header(「Location:login.php?invalid = 1」); \t} } – user2116751 2013-02-27 19:38:38

+0

仍然無法驗證 – user2116751 2013-02-27 19:39:16

+0

只是爲了試試'echo $ _SESSION [「username」]「。如果沒有顯示任何內容,POST數據只是沒有得到您的checklogin.php,這可能是您的登錄表單中的錯字 – 2013-02-27 19:47:19

0

首先,你應該清楚一些東西出來:

1.

if (!$_POST['username'] | !$_POST['password'] | !$_POST['passwordconf']) { 
die('You did not complete all of the required fields');} 

應該& &,而不是|。

  1. 在你的代碼中無處檢查用戶名是否存在,所以我猜你有多個用戶使用相同的用戶名。在插入你的checkreg.php之前,你應該先檢查用戶名是否存在。

  2. 在checklogin.php變化,如果($計數== 1)

    到如果($計數> 0)

如果這沒有幫助,你可以給我更多的像數據庫中的數據信息(數據這是在你的數據庫現在)

0
<?php 
// Use of session_register() is deprecated 
$barney = "A big purple dinosaur."; 
session_register("barney"); 

// Use of $_SESSION is preferred, as of PHP 4.1.0 
$_SESSION["zim"] = "An invader from another planet."; 

// The old way was to use $HTTP_SESSION_VARS 
$HTTP_SESSION_VARS["spongebob"] = "He's got square pants."; 
?> 

警告:

此功能已被棄用的PHP 5.3.0和去除Ø f PHP 5.4.0。

0

幾件事情嘗試:

1)了session_register函數調用已取消。 http://php.net/manual/en/function.session-register.php。如果可能的話,你真的應該使用$ _SESSION。

事情是這樣的:

$_SESSION["username"] = $username; 
$_SESSION["password"] = "validated"; // md5 is variable so you can't easily check for it on next page render 

2)當值的測試,你不想$ _ POST,你要到下一個頁面呈現上使用$ _SESSION一次。事情是這樣的:

if ("validated" == $_SESSION["password"]) { 
    // You're logged in... 
} 

3)注意,對於要填充$ _SESSION數組必須調用session_start();使用前一次且僅有一次。 (http://www.php.net/manual/en/function.session-start.php更多。)

4)我知道這是示例代碼,但SQL注入攻擊可能。需要逃避這些變量。請輸入用戶名和密碼,然後點擊「確定」。

+0

做出了你們建議的更改,但我仍然遇到問題。而不是做重定向到無效登錄,我現在回顯用戶名和密碼。但沒有出現。 – user2116751 2013-02-27 19:29:23

+0

感覺應該有第三塊代碼丟失。什麼是沒有檢查,看看你是否已經通過查看$ _SESSION變量登錄,然後啓動查找checklogin.php中的密碼。 – 2013-02-28 17:42:09