我使用以下代码从数据库中检索数据:
$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都是新手。
任何帮助都会非常感谢。
答案 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>";
}}}