2016-01-01 286 views
-3

因此,幾天前我無法創建登錄名,該線程中的一個人建議我使用準備語句來代替。PDO登錄不起作用?

因此,我開始使用PDO查找準備好的語句,並設法使用它創建了註冊腳本。但是,我的登錄每次都會將我重定向到index.php。

file1.php:

<?php 
$username=$_POST['username']; 
$password=$_POST['password']; 
$db = new PDO('mysql:host=localhost;dbname=ismsite', 'db_username', 'db_password'); //this works 
$result = $db->prepare("SELECT * FROM users WHERE username=:username AND password=:password"); 
$result->bindParam(':username', $username); 
$result->bindParam(':password', $password); 
$result->execute(); 
$row = $result->fetch(PDO::FETCH_NUM); 
if($row > 0) { 
    session_start(); 
      $_SESSION['userid'] = $row['user_id']; // Initializing Session 
      $_SESSION['voornaam'] = $row['Voornaam']; // Initializing Session 
      $_SESSION['achternaam'] = $row['Achternaam']; 
      $_SESSION['adres'] = $row['adres']; 
      $_SESSION['email'] = $row['email']; 
      $_SESSION['username'] = $row['username']; 
      $_SESSION['password'] = $row['password']; 
} 
header("location: profile.php"); 
exit(); 
?> 

在profile.php我有代碼檢查是否與USER_ID的會話存在一個小一點。如果沒有,你會恢復到index.php。這表明我的userid會話沒有被設置,而我正在設置它。無論是選擇插入不工作或我有一個愚蠢的錯誤。

任何人都可以幫忙嗎?

+0

因爲你在那個條件塊啓動會話它的失敗。 –

+0

Okey我已經修復了我自己。我必須將FETCH_NUM更改爲FETCH_ASSOC – Ellisan

+0

首先刪除重定向,var_dump返回'$ row'中的內容並從那裏開始工作。我會建議'if($ row)',因爲如果成功(和'FETCH_NUM'返回一個索引數組 - 從你如何使用'$ row'之後它將會是一個數組,我想你想要'FETCH_ASSOC'作爲你的獲取模式。 – MatsLindh

回答

0

看起來像我做使用FETCH_NUM,而不是使用FETCH_ASSOC的錯誤:

$row = $result->fetch(PDO::FETCH_ASSOC); 

曾經是

$row = $result->fetch(PDO::FETCH_NUM);