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

SELECT column WHERE name='*'文字通り である名前のみを選択します*。すべてを選択するには、条件を完全にドロップする必要があります。

SELECT column FROM table

(true) を条件として使用1して、すべてを選択することもできます ( 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 に答える
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 に答える
-1

クエリを考えると:

select table1 where name='$selected_options1' and instructor_name='$selected_options2',

$selected_options2 に入力できる値はありません。つまり、すべてを受け入れる必要があります。その場合、where 句のその部分を除外する必要があるため、次のようになります。

select table1 where name='$selected_options1'

通常、ステートメントの select 部分から始めて、必要に応じて where 条件を追加することで、これを行います。

さらに重要なことは、複数の値を取得できるようにフォームを設計しており、単一の値を単純に挿入することはできませんよね? この種の制約を使用して sql をクエリするには、2 つの方法があります。次のようなもの:

where x=a or x=b or x=c

また

where x in (a,b,c)

どの形式を選択するかについてパフォーマンス上の考慮事項がある場合がありますが、意味的には同等です。いずれの場合も、ハードコードされた文字列を単純に使用して単一の値を挿入することはできません。

于 2012-06-23T14:28:10.713 に答える