作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我想写一个 sql 来包含我的复选框。
例如在我的数据库中:
专栏:Stato
选项:0,1,2,3
其中:
所以,如果他们都被选中了,你必须把所有的都给我看,否则不要。
如何编写sql?
这是我的复选框:
<div id="radioset">
<input type="checkbox" id="radio1" name="aperto" checked="checked"><label for="radio1">Aperto</label>
<input type="checkbox" id="radio2" name="stampato" checked="checked"><label for="radio2">Stampato</label>
<input type="checkbox" id="radio3" name="bloccato" checked="checked"><label for="radio3">Bloccato</label>
<input type="checkbox" id="radio4" name="favorite" checked="checked"><label for="radio4">♥</label>
</div>
这是我的 PHP sql:
$input=$_POST['input'];
$id=$_POST['id'];
$tipo=$_POST['tipo'];
$numero1=$_POST['numero1'];
$numero2=$_POST['numero2'];
$data1=date('d/m/Y', strtotime($_POST['from']));;
$data2=date('d/m/Y', strtotime($_POST['to']));;
$sql="SELECT [Id Ord] AS [ID], [Tipo Ord] AS [Tipo], [N Ord] AS [Numero], [Data Ord] AS [Data], [Ragione Sociale], [Indirizzo], [TotImp] AS [IMPORTO TOTALE], [TotIva] AS [IMPORTO IVA] FROM [Ordini] WHERE [Id Ord] LIKE '$id' OR [Tipo Ord] LIKE '$tipo' OR [Data Ord] BETWEEN #$data1# AND #$data2#";
$rs = $con->execute($sql);
谢谢!
最佳答案
首先,将您的复选框定义为一个数组(不要使用术语“radio”——单选按钮完全不同!),并更改值以使其与数据库记录相匹配:
<div id="checkboxes">
<input type="checkbox" id="checkbox1" name="options[]" value="0" checked="checked"><label for="checkbox1">Aperto</label>
<input type="checkbox" id="checkbox2" name="options[]" value="1" checked="checked"><label for="checkbox2">Stampato</label>
<input type="checkbox" id="checkbox3" name="options[]" value="2" checked="checked"><label for="checkbox3">Bloccato</label>
<input type="checkbox" id="checkbox4" name="options[]" value="3" checked="checked"><label for="checkbox4">♥</label>
</div>
然后您可以使用 for each 循环遍历它们,如果存在该选项(如果未选中该框,则回传中甚至不存在复选框值)然后添加一些 SQL 以包含该选项搜索中的选项:
$optionsSQL = "";
foreach($_POST["options"] as $index => $option) {
if ($optionsSQL == "") $optionsSQL = "AND Stato IN ("; //if it's the first detected option, add the IN clause to the string
$optionsSQL .= $option.",";
}
//trim the trailing comma and add the closing bracket of the IN clause instead
if ($optionsSQL != "")
{
$optionsSQL = rtrim($optionsSQL, ",");
$optionsSQL .= ")";
}
最后,将 $optionsSQL
字符串附加到您的查询中:
$sql="SELECT [Id Ord] AS [ID], [Tipo Ord] AS [Tipo], [N Ord] AS [Numero], [Data Ord] AS [Data], [Ragione Sociale], [Indirizzo], [TotImp] AS [IMPORTO TOTALE], [TotIva] AS [IMPORTO IVA] FROM [Ordini] WHERE ([Id Ord] LIKE '$id' OR [Tipo Ord] LIKE '$tipo' OR ([Data Ord] BETWEEN #$data1# AND #$data2#))".$optionsSQL;
注意由于这是一个简单的示例,因此我没有在此处采取措施来防止 SQL 注入(inject)。您应该研究如何防范这种情况——恶意用户可能会篡改选项值并尝试提交有问题的数据。在 SQL 语句中使用每个选项值之前,您应该验证它。
关于PHP - 从 html 复选框中选择 sql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40485014/
我是一名优秀的程序员,十分优秀!