2013-03-27 59 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注入的影响。考虑使用准备,绑定和执行语句。