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

时间:2013-11-08 13:59:48

标签: php database postgresql

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

  $conn = pg_connect("host=********* port=5432
  dbname=******* user=******* password=*********");
  $result = pg_query ($conn, "SELECT Column1, Column2, Column3, Price, Column4 FROM phones ORDER BY Price");
  echo "<table border='1'>";
  echo "<tr>  
            <th></th>
            <th>Column1</th>
            <th>Column2</th>
            <th>Column3</th>
            <th>Price</th>
            <th>Column4</th> </tr>";
  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++) {
      echo "<td>" . $a[$j] . "</td>";
    }
    echo "</tr>\n";
  }
echo "</table>\n";

我在同一页面上也有一个基本表格:

<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>

当从下拉菜单中选择所有内容时,我希望显示所有结果,更高=所有结果的价格高于表格文本字段中指定的价格,同样低于指定价格但低于指定价格。

我在如何实现这个方面遇到了一些麻烦,无论如何使用带有SQL查询的IF语句来实现它或其他方式,我对PHP和SQL都是新手。

任何帮助都会非常感谢。

3 个答案:

答案 0 :(得分:1)

尝试这样的事情:

$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);

当然,您应该使用预准备语句来防止SQL注入。

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

答案 1 :(得分:1)

完全同意Joshua,如果你在while循环之前移动以下行,你应该使用准备好的语句来防止SQL注入和另外一个建议(代码改进)

$ numFields = pg_num_fields($ result);

因为结果集和现有代码的字段数总是相同的,所以每次while和For循环都会获取。

可以帮到你。

答案 2 :(得分:1)

我也同意约书亚和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>";
}}}