在WHERE条件不起作用后选择ALL

时间:2012-06-23 14:23:22

标签: php mysql select where

当我尝试在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");

仍然无法解决我的问题。你可以在我的评论中阅读它。

3 个答案:

答案 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";

请记住protect yourself from SQL injection

答案 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)

有时可以考虑选择哪种格式的性能,但它们在语义上是等效的。在任何一种情况下,您都不能简单地使用硬编码字符串并插入单个值。