我有一个PHP脚本,它从HTML表单接收值并组合SQL语句。
我的列名为col1, col2, ... ,col5
声明
... ORDER BY x, y, z, i, j;
的工作原理如下:如果col1
的复选框为checked
,则为x = col1
,其余的则相同。什么不起作用,是当我不检查一些框 - 例如我只想ORDER BY col1和col4,所以我检查它们两个,并且语句产生
ORDERY BY col1, y, z, col4, j
但我也检查col1
的复选框是否为empty
,如果是,则将x
的值更改为,此处我说明的是每当没有选中任何复选框时,我都尝试输入 1=1, NULL, col1
(其余的都是y,z,i,j
)。
所以我需要的是一些聪明的方法来使语句以它应该的方式工作。
当我将x, ..., j
的所有值都更改为1=1
时,只有 1 框才会检查该语句,但是当我选中2时 - 它没有'按顺序排列。
答案 0 :(得分:1)
如果未选中相应的复选框,为什么不完全将列留出?
$sql = "SELECT * FROM table";
$ordercolumns = array();
if (isset($_POST['col1'])) {
$ordercolumns[] = 'x';
}
...
if (isset($_POST['col5')) {
$ordercolumns[] = 'j';
}
if (sizeof($ordercolumns) > 0) {
$sql .= ' ORDER BY ' . implode(',', $ordercolumns);
}