PHP + HTML:
我有三个列表框,其中的内容(单击时)被放入sql SELECT字符串中的变量中。
这样的事情:
SELECT * FROM table where field1= '" & variable1 & "' AND field2 = '" & Variable2 &"' AND field3 = '" & Variable3 & "'"
如果单击所有列表框,这很有效但是如果我只点击列表框中的2或1没有任何反应,我会得到一张空白表。
我用复选框试了一下,得到了同样的东西。 问题是我将把列表的数量扩展到12但这会产生同样的问题。
所有这一切都很新,所以任何建议都非常感激。 亲切的问候 吉姆
答案 0 :(得分:1)
如果未选中复选框,则不会将其提交给服务器!你的PHP代码可能依赖于它而不应该。
答案 1 :(得分:1)
您可以将此查询与变量名一起使用。
$query = "SELECT * FROM TABLENAME WHERE field1 LIKE '".$variable1."' AND field2 LIKE '".$variable2."' AND field3 LIKE '".$variable3."'";
答案 2 :(得分:1)
在将变量添加到sql之前,只需检查变量是否存在 你的代码应该是那样的
if(isset($variable1)){
$sql .= " AND field1 = '$variable1'";
}
答案 3 :(得分:0)
仅发布已选中的复选框。所以它需要略有不同的appraoch。您可以像这样实现它 - 将隐藏的输入与可能未选中的复选框同名。我认为它的工作原理是,如果未选中复选框,隐藏的输入仍然成功并发送到服务器,但如果选中该复选框,它将覆盖之前的隐藏输入。这样您就不必跟踪发布数据中的哪些值来自复选框。
<form>
<input type='hidden' id='testName' value='0' name='carga1'>
<input type='checkbox' id='testNameHidden' value='1' name='carga1'>
</form>
在提交表单之前,请根据检查的条件禁用隐藏字段。
<script>
if(document.getElementById("testName").checked){
document.getElementById('testNameHidden').disabled = true;
}
</script>
我个人认为这是最简单的方法。
答案 4 :(得分:0)
我建议构建一个SQL条件数组,而只添加一个条件,如果选择了相应列表框中的某些内容。这将导致类似这样的事情:
$conds = array(1);
for ($i = 1; $i <= 3; $i++)
if (isset($_POST['Variable' . $i]))
$conds[] = "field" . $i . " = '" . $_POST['Variable' . $i] . "'";
$query = "SELECT * FROM table WHERE " . implode(" AND ", $conds);
当然,我不知道变量的确切标识符,因此,将其作为方向。
修改:根据评论中Doge的建议略微更改了代码。
答案 5 :(得分:0)
列表框应该将第一个条目设为空,以便使用不必选择任何内容。您的PHP代码应该使用
$fld1 = isset($_POST['field1']) ? $_POST['field1'] : "";
然后构建你的sql语句。
$sql = "SELECT * FROM table ";
$where ="";
if( $fld1 != "" ) $whr .= 'field1 = '.$fld1;
if( $fld2 != "" {
if( $whr != "" ) $whr += " AND ";
$whr .= 'field2='.$fld2;
}