Php 从数据库中的结果返回下拉列表

Php 从数据库中的结果返回下拉列表,php,database,postgresql,Php,Database,Postgresql,我正在使用以下代码从数据库检索数据: $conn=pg_connect(“主机=**********端口=5432 dbname=*******用户=*******密码=*************”; $result=pg_query($conn,“按价格从电话订单中选择第1列、第2列、第3列、第4列”); 回声“; 回声“ 专栏1 专栏2 第3栏 价格 第4栏”; while($a=pg_fetch_row($result)){ 回声“; 回声“; 对于($j=0;$j'((int)$\u

我正在使用以下代码从数据库检索数据:

$conn=pg_connect(“主机=**********端口=5432
dbname=*******用户=*******密码=*************”;
$result=pg_query($conn,“按价格从电话订单中选择第1列、第2列、第3列、第4列”);
回声“;
回声“
专栏1
专栏2
第3栏
价格
第4栏”;
while($a=pg_fetch_row($result)){
回声“;
回声“;
对于($j=0;$j
我在同一页上还有一个基本表单:

<form name="form2"action="" method="GET">
<select name="highlow">
    <option value="All">All</option>
    <option value="higher">higher</option>
    <option value="less">less</option>
</select>
Price:<input type="text" name="price"/>
<input type="submit" name="submit" value="Submit" />
</form>

全部的
较高的
较少的
价格:
当从下拉菜单中选择all时,我希望显示所有结果,higher=价格高于表单文本字段中指定价格的所有结果,对于价格低于指定价格的所有结果也是如此

我在如何实现这一点上遇到了一些麻烦,不管怎样,是否可以使用带有SQL查询的IF语句来实现它,或者其他方式,我对PHP和SQL非常陌生


任何帮助都将非常感谢。

尝试以下方法:

$query = 'SELECT Column1, Column2, Column3, Price, Column4 FROM phones ';
if($_GET['submit']) { // name attribute of your submit button
    // we'll get here only if the submit button is used
    if($_GET['highlow'] === 'higher') {
        $query .= 'WHERE Price > ' . ((int) $_GET['price']);
    } else if($_GET['highlow'] === 'less') {
        $query .= 'WHERE Price < ' . ((int) $_GET['price']);
    }
}

$query .= ' ORDER BY Price';

$result = pg_query ($conn, $query);
$query='从手机中选择第1列、第2列、第3列、第4列、价格';
如果($_GET['submit']){//submit按钮的name属性
//只有使用提交按钮,我们才能到达这里
如果($_GET['highlow']=='higher'){
$query.='WHERE Price>'((int)$\u GET['Price']);
}如果($_GET['highlow']='less'){
$query.='WHERE Price<'((int)$\u GET['Price']);
}
}
$query.='按价格订购';
$result=pg_查询($conn,$query);
当然,您应该使用准备好的语句来防止SQL注入


免责声明:这是一份快速制作的草稿,不会赢得选美比赛等;)

完全同意Joshua的观点,您应该使用预先准备好的语句来防止SQL注入,如果您在while循环之前执行以下命令,还可以提出一个建议(代码改进)

$numFields=pg_num_字段($result)

因为结果集的字段数总是相同的,并且在现有代码中,每次while和for循环都要获取字段数


可能会对您有所帮助。

我也同意joshua和Himanshu Sharma的观点,但您也可以在循环内用php编写逻辑。但坦率地说,在循环内放置if(条件)是无效的。下面是代码

while ($a = pg_fetch_row($result)) {
echo "<tr>";
echo "<td> <form> <input type='checkbox'> </form> </td>";
for ($j = 0; $j < pg_num_fields($result); $j++) {
if($j==4)
{if($_GET['highlow'] === 'higher')
  if($_GET[price]<=$a[$j])
  echo "<td>" . $a[$j] . "</td>";
  else
  if($_GET[price]>=$a[$j])
  echo "<td>" . $a[$j] . "</td>";
}}}
while($a=pg\u fetch\u row($result)){
回声“;
回声“;
对于($j=0;$j
单击“提交”按钮时如何调用此查询?对不起,这是我的错hassle@user2968617编辑了答案-我建议您参加php初学者教程Holy doodley,您的代码格式非常奇怪
while ($a = pg_fetch_row($result)) {
echo "<tr>";
echo "<td> <form> <input type='checkbox'> </form> </td>";
for ($j = 0; $j < pg_num_fields($result); $j++) {
if($j==4)
{if($_GET['highlow'] === 'higher')
  if($_GET[price]<=$a[$j])
  echo "<td>" . $a[$j] . "</td>";
  else
  if($_GET[price]>=$a[$j])
  echo "<td>" . $a[$j] . "</td>";
}}}