【发布时间】:2016-01-25 16:36:29
【问题描述】:
我需要进行 动态 SQL 查询,该查询从 DB 中返回几列,具体取决于复选框 html 表单中检查的数据。在这段代码中,它只返回被检查的最后一列数据,不是全部。我只能考虑检查所有与 IF 子句的组合,但由于实际上我有比 3 更多的复选框,我想知道是否有人可以提出一些动态解决方案。
<?php
// Connecting to a Postgresql DB
...
// Values sent from HTML form
$checked = $_POST["check_list"];
$submit = $_POST["submit"];
?>
<form action="" method="POST">
Choose:
<input type="checkbox" name="check_list[]" value="5"> 5h
<input type="checkbox" name="check_list[]" value="6"> 6h
<input type="checkbox" name="check_list[]" value="7"> 7h
<br><br>
<input type="submit" name="submit">
</form>
<?php
// Checking if something is checked
// If it is do something
if(isset($submit)){
if(empty($checked)){
echo "Please choose something";
} else {
foreach($checked as $selected){
// Adding 0 in front of one dimensional numbers because of DB column name
if ($selected < 10){
$selected = "0$selected";
}
$db_colum_name = "a_b$selected";
$query = "SELECT table1. name,
table1. latitude / CAST(10 AS FLOAT(6)) AS lat,
table1. longitude / CAST(10 AS FLOAT(6)) AS lng,
EXTRACT(YEAR FROM table2. date) AS year,
table2. $db_colum_name AS $selected
FROM table1
JOIN table2
ON table1.id=table2.id
WHERE
name = 'New York'
AND
EXTRACT(YEAR FROM table2. date) = '2000'
ORDER BY date DESC";
$result = pg_query($dbcon, $query) or die("Your error: {$query} <br>");
}
// Printing data
...
// Closing DB connection
pg_close ($dbcon);
}
}
?>
编辑:
某种架构:
表 1
标识 |姓名 |纬度 |经度 |
5 |纽约| 40.7 | -74.00 |
表 2
标识 |日期 | a_b05 | a_b06 | a_b07 |
5 |2000-03-02 | 100 | 105 | 200 |
【问题讨论】:
-
为此处涉及的表共享您的 SQL 数据库架构?我可以告诉你你的问题是每个 foreach 都会覆盖你的结果变量。您应该设计 SQL 语句,以便每个 foreach 添加到它,然后在迭代后执行查询。
标签: php sql postgresql select checkbox