2013-04-23 42 views
1

您好,我正在嘗試在我製作的CMS中創建多個用戶。我把他們所有的數據放在一張表中,並且正在使用mysql_num_rows檢查記錄是否匹配,然後使用session_register()來設置會話。我已將其更改爲PDO命令。

我希望能夠在用戶使用CMS時跟蹤用戶,以便每個更改的記錄都可以附加它們的usrID。因此,在稍後的日期,我可以看到誰進行了更新,並最終使用它來顯示關於作者的信息等。

因此,例如,當他們使用表單更新或添加新記錄時,隱藏輸入的會話標識echo'd進入它將從他們的用戶記錄,當他們登錄

是做到這一點的最好方法?在此登錄代碼中正確寫入語法?

$con = new PDO(DB_DSN, DB_USERNAME, DB_PASSWORD); 
$sql="SELECT * FROM $tbl_name WHERE the_username='$the_username' and the_password='$the_password'"; 

$result = $con->prepare($sql); 
$result->execute(); 
$number_of_rows = $result->fetchColumn(); 

if($number_of_rows==1){ 
    $info = $result->fetch(PDO::FETCH_ASSOC); 
    $_SESSION['username'] = $info['the_username']; 
    $_SESSION['id'] = $info['id']; 
    header('Location: admin.php'); 
}else{ 
echo "Wrong username or password, please refresh and <a href=\"login.php\">try again.</a>"; 
} 

這可能是更好嗎?

if($number_of_rows==1 && $info = $result->fetch(PDO::FETCH_ASSOC)){MAKE SESSION} 

回答

1

您對PDO功能的使用很不一致,並且會導致一些錯誤。

首先,您不能兩次獲取相同的數據。而且,事實上,你根本不需要這樣的雙重獲取。

另外,出於某種原因,您沒有使用準備好的語句,這是使用PDO的唯一原因。所以,正確的代碼將

$sql="SELECT * FROM $tbl_name WHERE the_username=? and the_password=?"; 
$result = $con->prepare($sql); 
$result->execute(array($the_username,$the_password)); 
# $number_of_rows = $result->fetchColumn(); <- don't need that 
$info = $result->fetch(); 
if($info){ 
    $_SESSION['username'] = $info['the_username']; 
    $_SESSION['id'] = $info['id']; 
    header('Location: admin.php'); 
}else{ 
    echo "Wrong username or password, please refresh and <a href=\"login.php\">try again.</a>"; 
} 
+0

優秀這是太棒了謝謝你,我會試試這個。我現在可以看到哪裏出了問題。 – 2013-04-23 11:18:33

+0

回顯後檢查它顯示它仍然沒有設置$ _SESSION。我不知道爲什麼不,但我認爲這是一個服務器問題,因爲所有瀏覽器上的舊_mysql _ * _代碼都會發生同樣的情況。一切都在所有字符之前發送。 – 2013-04-23 11:32:04

0

是的代碼和邏輯工作正常。但不要使用session_register(),它們在新版本的PHP中不推薦使用。

+0

你好,所以我嘗試登錄電子像這樣和它不工作,沒有任何錯誤,它得到的其他克勞斯。連接信息都是正確的。有任何想法嗎? – 2013-04-23 10:37:38

+0

堅持我想我知道它是什麼 – 2013-04-23 10:38:29

+0

是的,我仍然有如果(!session_is_registered(name))類型的東西在標題中,我想這必須更改爲PDO以及 – 2013-04-23 10:40:11