2013-03-27 78 views
0

編輯:CODE改變,問題被更新爲最新錯誤。動態下拉用PHP從PostgreSQL數據庫

我需要使用查詢(如SELECT title FROM books WHERE ownedBy = [users facebook ID])從我的postgreSQL數據庫填充書名的下拉列表,然後使用用戶的選擇來顯示該書上的其餘信息。該頁面是一個Facebook應用程序,這是我如何獲得Facebook的ID。

這是代碼relavent部分,到目前爲止,大部分來自於類似的問題我已經找到答案,不同的創建。

<form action="updateform.php" method="post"> 
    <input type="hidden" name="userid" id="userid" value="<?php echo htmlspecialchars($user_id); ?>" 
    <select name="booktitle" id="booktitle"> 
    <option>Select book</option> 
    <?php 
    $db = pg_connect("host=ec2-54-243-190-226.compute-1.amazonaws.com port=5432 dbname=d6fh4g6l0l6gvb user=zmqygfamcyvhsb password=1Apld4ivMXSK8JZ_8yL7FwIuuz sslmode=require options='--client_encoding=UTF8'") or die('Could not connect: ' . pg_last_error()); 
    $sql = pg_query("SELECT title FROM books WHERE ownedby='$user_id'"; 
    while ($row = pg_fetch_assoc($sql)) { 
    echo '<option value="'.htmlspecialchars($row['title']).'"></option>';} 
    pg_close($db); 
    ?> 
    </select> 
//other form elements here 
</form> 

目前,沒有下拉框,顯示和服務器日誌說:pg_query() expects parameter 1 to be resource, string given in /app/www/update.php on line 275和pg_fetch_assoc

如果有人可以幫助我把下拉框部分的工作同樣的錯誤,那將是巨大的現在,一旦這部分工作,我就會努力將其餘部分弄清楚。

回答

0

你也沒能逃脫在275線的報價應該是

$sql = pg_query("SELECT title FROM books WHERE ownedby=\"$user_id\""); 

$sql = pg_query('SELECT title FROM books WHERE ownedby="'.$user_id.'"'); 
1

轉義的引號內引用

$sql = pg_query("SELECT title FROM books WHERE ownedby=("$user_id")"); 

應該爲

$sql = pg_query("SELECT title FROM books WHERE ownedby='$user_id'"); 

或者

$sql = pg_query("SELECT title FROM books WHERE ownedby=\"$user_id\""); 
1

試試這個:

<form action="updateform.php" method="post"> 
<select name="bookTitle"> 
    <?php 
     $db = pg_connect("host=ec2-54-243-190-226.compute-1.amazonaws.com port=5432 dbname=d6fh4g6l0l6gvb user=zmqygfamcyvhsb password=[removed] sslmode=require options='--client_encoding=UTF8'") or die('Could not connect: ' . pg_last_error()); 
     $sql = pg_query(sprintf("SELECT title FROM books WHERE ownedby=%d", $user_id)); 
     while ($row = pg_fetch_assoc($sql)) { 
      echo '<option value="'.htmlspecialchars($row['title']).'"></option>'; 
     } 
     pg_close($db); 
    ?> 
</select> 

的使用注意事項的 '迴響',而不是關閉PHP標籤。

此外,你應該使用一個ID,而不是期權價值:)

問候標題, 菲爾

+0

嘗試,現在,我會拿起從另一個解決辦法,我已經找到閉幕PHP標記,我沒有發現他們相當混亂! – TheMarron 2013-03-27 17:29:55

+0

使用該代碼我不會再遇到500錯誤,但我也沒有得到一個下拉框。 – TheMarron 2013-03-27 17:38:00

+0

你有鏈接到你的直播網站,我可以看看? – Modul8 2013-03-27 17:41:14

1

$sql = pg_query("SELECT title FROM books WHERE ownedby=("$user_id")"); 

包含因爲雙錯誤報價$ USER_ID關閉字符串之前「SELECT .... 一個快速的解決辦法是改變‘$ user_ID的’以‘$ user_ID的’,並刪除了括號()

通常,將變量直接放入SQL查詢中並不是一種好的做法,因爲您的代碼易受SQL注入的影響。考慮使用準備,綁定和執行語句。