2016-02-26 74 views
0

我正在嘗試使用PDO更新數據庫中的表。目前我正在提交表單,除了白屏以外什麼都沒有,我啓用了所有的錯誤報告選項,但仍然只是一個白色的屏幕..我一直在盯着代碼,感覺像一輩子,仍然可以解決不了問題。一個正確的方向推動將不勝感激...謝謝無法更新表PDO更新

require('includes/config.php'); 

//if not logged in redirect to login page 
if(!$user->is_logged_in()){ header('Location: login.php'); } 

$signedin = $_SESSION['username']; 

$sql = "UPDATE member SET firstname = :firstname, 
      lastname = :lastname, 
      username = :username, 
      email = :email, 
      age = :age,  
      country = :country 
      where username = $signedin"; 
$stmt = $db->prepare($sql);         
$stmt->bindParam(':firstname', $_POST['firstname'], PDO::PARAM_STR);  
$stmt->bindParam(':lastname', $_POST['$lastname'], PDO::PARAM_STR);  
$stmt->bindParam(':username', $_POST['username'], PDO::PARAM_STR); 
// use PARAM_STR although a number 
$stmt->bindParam(':email', $_POST['email'], PDO::PARAM_STR); 
$stmt->bindParam(':age', $_POST['age'], PDO::PARAM_STR); 
$stmt->bindParam(':country', $_POST['country'], PDO::PARAM_INT); 
$stmt= $db->execute($sql); 
?> 
+1

您應該檢查錯誤日誌而不是盯着白頁。 – chris85

回答

2

的​​功能不需要$sql(你只要在prepare()

$stmt->execute(); 

接下來,你應該所有的數據傳遞到您準備好的聲明,否則你擊敗的目的(這是最大的安全性)。所以我們刪除

$sql = "UPDATE member SET firstname = :firstname, 
      lastname = :lastname, 
      username = :username, 
      email = :email, 
      age = :age,  
      country = :country 
      where username = :username"; 
//snip 
$stmt->bindParam(':username', $_SESSION['username'], PDO::PARAM_STR); 
+0

@ chris85所以是。更新 – Machavity

1

您需要在您的where clause報價。

$sql = "UPDATE member SET firstname = :firstname, 
     lastname = :lastname, 
     username = :username, 
     email = :email, 
     age = :age,  
     country = :country 
     where username = '$signedin'"; 

此外,最好由id更新,因爲它是唯一的。

+0

如果用戶名唯一,用戶名更新沒有任何問題。 – andrewsi

+0

僅當用戶名是唯一的時:p –