0

私は複数フィールド データベースを持っています。一部の変数は一定で、ドロップ メニューを使用して選択され、一部の変数は自由に入力できます。データベースを検索して、選択した用語の組み合わせを含む行の数を見つけたいのですが、ほとんどの場合は機能しますが、選択に2つ以上のドロップメニューを使用すると機能しなくなるようです: フォーム検索:

<form  action="search2.php" method="post">
<p>
Name: <input type="text" name="term1" style="background-color:#FFFF11">
<br />
<br />

Dept.: &nbsp;<input type="text" name="term4" style="background-color:#FFFF11">
<br />
<br />

Month: <select name="term2" style="width:65px;  color: black;background-color:#FFFF11">
<option value="" style="background-color: #FFFF11;">...</option>
<option value="Jan" style="background-color: #FFFF11;" >Jan</option>
<option value="Feb" style="background-color: #FFFF11;">Feb</option>
<option value="Mar" style="background-color: #FFFF11;">Mar</option>
<option value="Apr" style="background-color: #FFFF11;" >Apr</option>
<option value="May" style="background-color: #FFFF11;">May</option>
<option value="Jun" style="background-color: #FFFF11;">Jun</option>
<option value="Jul" style="background-color: #FFFF11;" >Jul</option>
<option value="Aug" style="background-color: #FFFF11;">Aug</option>
<option value="Sep" style="background-color: #FFFF11;">Sep</option>
<option value="Oct" style="background-color: #FFFF11;" >Oct</option>
<option value="Nov" style="background-color: #FFFF11;">Nov</option>
<option value="Dec" style="background-color: #FFFF11;">Dec</option>
</select>
<br />
<br />
Year: &nbsp;&nbsp;<select name="term3" style="width:65px;  color: black;background-color:#FFFF11">
<option value="" style="background-color: #FFFF11;">...</option>
<option value="2010" style="background-color: #FFFF11;" >2010</option>
<option value="2011" style="background-color: #FFFF11;">2011</option>
<option value="2012" style="background-color: #FFFF11;">2012</option>
</select>
<br />
<br />

</p>

&nbsp;&nbsp;<input class="button" type="submit" name="submit" value="Submit">
</form>

検索コード:

<?php

include "db.inc.php";
$term1 = $_POST['term1'];
$term2 = $_POST['term2'];
$term3 = $_POST['term3'];
$term4 = $_POST['term4'];
$sql ="SELECT * FROM fixes WHERE tech  LIKE '%$term1%' AND date LIKE '%$term2%' AND date LIKE '%$term3%' AND dept LIKE '%$term4%'";


$rs_result = mysql_query ($sql);
$num_rows = mysql_num_rows($rs_result);
$query = mysql_query("SELECT * FROM fixes WHERE tech  LIKE '%$term1%' AND date LIKE '%$term2%' AND date LIKE '%$term3%' AND dept LIKE '%$term4%'"); 
$number=mysql_num_rows($query); 
?>

部門にドロップメニューを使用することにした場合、その上で同じフォーマットを使用すると機能しなくなります。おそらく、もっと良い方法がありますか? ありがとう

4

2 に答える 2

0

一般的に言えば、ドロップダウン メニューの数がフォームや対応する SQL クエリに影響を与えることはありません。

上記のコードでテキスト フィールドをドロップダウンに変換する際に考慮すべきことの 1 つは、名前を一意に保つことです (つまり、<select...>...</select>別の用語からコードをコピーした場合は、新しい SELECT の名前を「term4」に変更してください)。 」またはそれが何であれ。

考慮すべきもう 1 つのことは、ドロップダウンに変更する場合、つまり入力値が有限であり、認識可能であることを意味する場合、SQL を;...WHERE dept = '$term4'...の代わりに使用するように変更する必要があります。LIKE可能なすべてのオプションを知っている場合、ワイルドカードや部分一致は必要ないため、これによりクエリが高速化されます。

上でコメントしたように、SQL インジェクションを回避するために、クエリで変数を使用する場合は変数をエスケープすることを忘れないでください。

于 2012-06-04T17:51:07.093 に答える
0

HTML は機能し、SQL は有効です。<select>リストが2 つを超えるとコードが機能しないと述べていますが、コードには2 つしかありません。3 つ目の名前が最初の 2 つの名前と競合している可能性があります (コピー/貼り付けなどを行った場合)。

于 2012-06-04T18:02:21.937 に答える