0

当我尝试使用“选择所有选项”作为 sql 查询中的值时,我在发送和接收数据时遇到问题。这种方法是正确的还是我做错了什么?我也在尝试“*”、“ALL”、“%”和“?”....

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");

这仍然不能解决我的问题。你可以在我的评论中读到它。

4

3 回答 3

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”。

好运。

于 2012-06-23T14:36:28.267 回答
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";

请记住保护自己免受 SQL 注入

于 2012-06-23T14:28:37.360 回答
-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)

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

于 2012-06-23T14:28:10.713 回答