2012-04-01 52 views
2

我想知道PHP中用於更新PostgreSQL數據庫中的行的語法。我創建了一個登錄頁面,用於檢查數據庫中的用戶名和密碼,然後轉到顯示該用戶名的數據庫中所有用戶信息的頁面。我試圖允許用戶更改某些列,如密碼,名稱等。因此,我添加了另一個頁面,其中包含要更改的每個列的字段。使用PHP更新PostgreSQL中的行

這是我對查詢代碼:

if(array_key_exists('save',$_POST)) 
{ 
$firstname=$_POST['ifirstname']; 
$lastname=$_POST['ilastname']; 
$email=$_POST['iemail']; 
$password=$_POST['ipassword']; 

    $conn_string='host=#### port=#### dbname=###### user=####### password=######'; 
    $dbconn=pg_connect($conn_string) or die('Connection failed'); 

$query="UPDATE project.customer SET FirstName='$firstname', 
LastName='$lastname',Email='$email',Password='$password') 
    WHERE UserName=$1"; 

    $result=pg_query($dbconn,$query); 
    $row_count= pg_num_rows($result); 
      pg_free_result($result); 
     pg_close($dbconn); 
    } 

這是場:

<div id="header">UPDATE USER INFO</div> 
    <form id="testform" name="testform" method="post" action="" > 
     <p> <label for="ifirstname">First Name:</label> 
      <input name="ifirstname" type="text" id="ifirstname"/> 
     </p> 
     <p> <label for="ilastname">Last Name:</label> 
      <input name="ilastname" type="text" id="ilastname"/> 
     </p> 
     <p> <label for="iemail">E-Mail:</label> 
      <input name="iemail" type="text" id="iemail"/> 
     </p> 
     <p> 
      <label for="ipassword">Password:</label> 
      <input name="ipassword" type="password" id="ipassword"/> 
     </p> 
     <p> 
      <label for="iconfpass">Confirm Password:</label> 
      <input name="iconfpass" type="password" id="iconfpass"/> 
     </p> 
     <p> 
      <input type="submit" name="save" value="Register"/> 
     </p> 
    </form> 
+0

'$ 1'是什麼樣的變量? – hjpotter92 2012-04-01 18:06:26

+0

你需要確保你逃脫你的絃樂。我無法強調足夠重要的是防止SQL注入攻擊。你可以使用PHP的'addslashses()'或[PDO參數化查詢](http://php.net/manual/en/pdo.prepared-statements.php)。 – slashingweapon 2012-04-01 18:22:11

+0

爲什麼不使用pg_query_params()來避免SQL注入? addslashes()不是100%安全的,只有當您支持多個數據庫品牌時,PDO纔有用。 – 2012-04-01 18:52:26

回答

1

我想那一定是這樣的。出於安全原因更改數據時還要讓用戶編寫舊密碼。也不要忘記使用查詢,以避免SQL注入攻擊

$query="UPDATE project.customer 
     SET (FirstName,LastName,Email,Password) = 
     ('$firstname','$lastname','$email','$password') 
     WHERE UserName= '$1' and Password = '$oldpassword'"; 
+0

謝謝你,這只是一個格式錯誤 – gestalt 2012-04-01 18:22:14

0

爲什麼不直接使用標準的SQL語法之前過濾你的數據?

Update project.customer Set 
    "FirstName" = '$firstname', 
    ... 
Where ... 

Postgres的主要區別在於你通常會引用列名。