当我尝试在sql查询中使用“select all options”作为值时,我遇到了发送和接收数据的问题。这种方法是正确的还是我做错了什么?我还试着“*”,“全部”,“%”和“?”....
PHP:
SQL = select table1 where name='$selected_options1' and instructor_name='$selected_options2'
$selected_options1=$_POST['selected_name'];
$selected_options2=$_POST['selected_instructor_name'];
HTML:
<INPUT TYPE=checkbox NAME='selected_name' VALUE='Mat'>Mat
<INPUT TYPE=checkbox NAME='selected_name' VALUE='Ann'>Ann
<INPUT TYPE=checkbox NAME='selected_name' VALUE='Peter'>Peter
<INPUT TYPE=checkbox NAME='selected_name' VALUE='Tom'>Tom
<INPUT TYPE=checkbox NAME='selected_name' VALUE='*'>All names
<INPUT TYPE=checkbox NAME='selected_name' VALUE='Ron'>Ron
<INPUT TYPE=checkbox NAME='selected_name' VALUE='Tim'>Tim
<INPUT TYPE=checkbox NAME='selected_name' VALUE='Greg'>Greg
<INPUT TYPE=checkbox NAME='selected_name' VALUE='Bob'>Bob
<INPUT TYPE=checkbox NAME='selected_name' VALUE='*'>All instructors
现在我的查询如下:
("SELECT * FROM `table1` WHERE instruktor in ('$instruktor1', '$instruktor2', '$instruktor3', '$instruktor4', '$instruktor5', '$instruktor6', '$instruktor7', '$instruktor8', '$instruktor9', '$instruktor10', '$instruktor11', '$instruktor12') AND (instruktor_poczatkowy='$instruktor_poczatkowy1' OR instruktor_poczatkowy='$instruktor_poczatkowy2
OR instruktor_poczatkowy='$instruktor_poczatkowy3 OR instruktor_poczatkowy='$instruktor_poczatkowy4 OR instruktor_poczatkowy='$instruktor_poczatkowy5
OR instruktor_poczatkowy='$instruktor_poczatkowy6 OR instruktor_poczatkowy='$instruktor_poczatkowy7 OR instruktor_poczatkowy='$instruktor_poczatkowy8
OR instruktor_poczatkowy='$instruktor_poczatkowy9 OR instruktor_poczatkowy='$instruktor_poczatkowy10 OR instruktor_poczatkowy='$instruktor_poczatkowy11)
AND (klub='$klub1' OR klub='$klub2') order by nazwisko");
仍然无法解决我的问题。你可以在我的评论中阅读它。
答案 0 :(得分:0)
SELECT column WHERE name='*'
只会选择字面*
的名称。您需要完全放弃条件以选择所有内容。
SELECT column FROM table
您还可以使用1
(true)作为选择所有内容的条件(SELECT column FROM table WHERE 1
)。
PHP中的逻辑将是这样的:
if( $selected_options1 == '*' ) {
$condition1 = '1';
}
else {
$condition1 = "name = '$selected_options1'";
}
if( $selected_options2 == '*' ) {
$condition2 = '1';
}
else {
$condition2 = "instructor_name = '$selected_options2'";
}
$query = "SELECT column1, column2, etc FROM table1 WHERE $condition1 AND $condition2";
答案 1 :(得分:0)
复选框应该是:
<form action="checkbox-form.php" method="post">
Which buildings do you want access to?<br />
<input type="checkbox" name="formDoor[]" value="A" />Acorn Building<br />
<input type="checkbox" name="formDoor[]" value="B" />Brown Hall<br />
<input type="checkbox" name="formDoor[]" value="C" />Carnegie Complex<br />
<input type="checkbox" name="formDoor[]" value="D" />Drake Commons<br />
<input type="checkbox" name="formDoor[]" value="E" />Elliot House
<input type="submit" name="formSubmit" value="Submit" />
</form>
你将如何获得多元化......
<?php
$aDoor = $_POST['formDoor'];
if(empty($aDoor))
{
echo("You didn't select any buildings.");
}
else
{
$N = count($aDoor);
echo("You selected $N door(s): ");
for($i=0; $i < $N; $i++)
{
echo($aDoor[$i] . " ");
}
}
?>
查询应如下所示:
$SQL="select * from table1 where name in (name1,name2,name3)";
只需创建一个名称字符串(以逗号分隔),并从for循环中替换“name1,name2,name3”。
祝你好运。答案 2 :(得分:-1)
鉴于查询:
select table1 where name='$selected_options1' and instructor_name='$selected_options2',
没有值可以放入$ selected_options2,这意味着它应该接受所有内容。在这种情况下,你应该省略where子句的那一部分,因此它变为:
select table1 where name='$selected_options1'
通常你会这样做,从语句的select部分开始,并根据需要添加where条件。
更重要的是,您设计了表单以便获得多个值,并且您无法简单地插入单个值,对吧?有两种方法可以使用这种约束来查询sql。要么像:
where x=a or x=b or x=c
或
where x in (a,b,c)
有时可以考虑选择哪种格式的性能,但它们在语义上是等效的。在任何一种情况下,您都不能简单地使用硬编码字符串并插入单个值。