2013-03-28 92 views
0

我需要从我的postgreSQL数据库中使用诸如SELECT title FROM books WHERE ownedBy = [users facebook ID]的查询来填充书名的下拉列表,然后使用用户的选择显示该书的其他信息。该页面是一个Facebook应用程序,这是我如何获得Facebook的ID。从postgresql数据库填充php下拉框

这是迄今为止的代码部分,主要是从我发现的类似问题的各种回答中创建的。

<form action="updateform.php" method="post"> 
<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> 
<input type="hidden" name="userid" id="userid" value="<?php echo htmlspecialchars($user_id); ?>"> 
//other form elements here 
</form> 

更新:我没有关闭的隐藏字段,这样似乎解决它是显示不出来的错误。下拉列表不填充,但我没有收到服务器日志中的任何错误。

如果任何人都可以帮我拿到下拉框部分的工作,那现在会很棒,一旦这部分工作,我就会努力找出其他问题。

+0

SQL肯定会返回传回的user_id的行吗? – d1ll1nger 2013-03-28 11:00:38

+0

@DaleBetts当我直接在数据库上运行'SELECT title FROM books WHERE ownedby = [my facebook id];'时,它确实会返回值,但我不知道如何测试PHP是否成功检索它们。编辑:它目前在下拉框中显示正确的行数,但没有文字) – TheMarron 2013-03-28 11:47:11

回答

2

你应该写

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

而且,在你的选择中显示的名称必须指定。

echo '<option value="'.htmlspecialchars($row['title']).'">'.htmlspecialchars($row['title']).'</option>'; 
+0

这似乎阻止了错误。现在下拉框只给我2个空白选项。 – TheMarron 2013-03-28 12:16:48

+0

@ TheMarron查看更新。您必须指定选项的显示文字。 – jaudette 2013-03-28 17:33:43

0

在您的查询'$ user_id'为空。首先仔细检查'$ user_id'的值。那么它会工作。

+0

$ user_id先前在代码'user_id = $ facebook-> getUser();' – TheMarron 2013-03-28 10:40:41

+0

'中被分配了一个值,如果$ user_id已经被分配了,那么这个值不在查询中。或者在关闭'$ sql'的括号后尝试并隐藏按钮没有正确关闭。所以先做,然后尝试。希望这会对你有所帮助。 – Jitendra 2013-03-28 10:52:21