0

食肉包装データベースを検索するマルチフォーム検索ボックスを作成しています。検索は、ユーザーが特定の場合にのみ機能します。ユーザーがドロップダウン ボックスから特定のオプションを選択しなくてもデータベースを検索できるようにして、検索の数を制限できるようにしたいと考えています。

「Any」などのオプションをドロップダウン ボックスに追加し、ユーザーが選択した場合に SQL クエリでそれを無視することはできますか? では、テキスト フォーム内の結果と一致する結果のみを検索しますか?

HTMLとPHPは次のとおりです。

 <body>

  <form action="form3.php" method="post"> 
    <label for ="description">Description:</label>
    <input type="text" name="descrip" /><br />

    <label for ="trayheight">Trayheight:</label>
    <input type="text" name="height" /> <br /> 

    <label for ="traywidth">Traywidth:</label>
    <input type="text" name="width" /> <br />

    <label for ="traydepth">Traydepth:</label>
    <input type="text" name="depth" /> <br />

         <label for="trayrange">Trayrange: </label>
                <select name="trayrange">
                    <option value="Other">Any</option>

                    <option value="BBQ">BBQ</option>

                    <option value="Dessert">Dessert</option>

                    <option value="Display">Display</option>

                    <option value="Meat">Meat</option>  

                    <option value="Microwave">Microwave</option>

                    <option value="Party">Party</option>

                    <option value="Salad/Wet Pasta">Salad/Wet Pasta</option>

                    <option value="Snacks">Snacks</option>

                    <option value="Standard">Standard</option>

                </select>

        <label for ="traytype">Traytype: </label> 
            <select name="traytype">
                    <option value="Other">Any</option>

            <option value="Open">Open</option>

            <option value="Cavitised">Cavitised</option>

                    <option value="Lid">Lid</option>

                    <option value="Tray">Tray</option>

                    <option value="Coallition">Coallition</option>

                    <option value="Bowl">Bowl</option>

                    <option value="Hinge pack">Open</option>

                    <option value="Pot">Pot</option>

                    <option value="Base & Lid">Base and Lid</option>

                    <option value="Rectangular">Rectangular</option>

                    <option value="Specalist">Specialist</option>
                </select><br />

        <label for="trayshape">Trayshape: </label>
            <select name="trayshape">
                    <option value="Other">Any</option>

            <option value="Rectangular">Rectangular</option>

                <option value="Oval">Oval</option>

                <option value="Square">Square</option>

                    <option value="Insert">Insert</option>

                    <option value="Round">Round</option>

                    <option value="Open">Open</option>
        </select><br />
        <input type="submit" value="Submit" /> 
    </form> 

        </body>

(おそらく、Any オプションを使用すると、コードが検索用のドロップボックスを無視するようになります)

PHP:

      <body>

    <?php
         $con = mysql_connect ("localhost", "root", "");
         mysql_select_db ("delyn_db", $con);

    if (!$con)
        { 
        die ("Could not connect: " . mysql_error());
        }

            $descrip = mysql_real_escape_string($_POST['descrip']); 
            $height = mysql_real_escape_string($_POST['height']);
            $width = mysql_real_escape_string($_POST['width']);
            $depth = mysql_real_escape_string($_POST['depth']);

            $varRange = $_POST['trayrange'];
            $varType = $_POST['traytype'];
            $varShape = $_POST['trayshape'];

    $sql = "SELECT * FROM delyn WHERE description LIKE '%".$descrip."%' AND trayheight
                    LIKE '%".$height."%'AND traywidth LIKE '%".$width."%' AND traydepth LIKE
                    '%".$depth."%' AND trayrange LIKE '%".$varRange."%' AND 
                    traytype LIKE '%".$varType."%' AND trayshape LIKE '%".$varShape."%' ";


    $r_query = mysql_query($sql);

    while ($row = mysql_fetch_array($r_query))
            { 
            echo '<br /> Tool Code:   '.$row['toolcode'];
            echo '<br /> Description: '.$row['description']; 
            echo '<br /> Tray range:  '.$row['trayrange']; 
            echo '<br /> Tray type:   '.$row['traytype'];
                echo '<br /> Tray size:   '.$row['traysize']; 
            echo '<br /> Tray shape:  '.$row['trayshape'] . '<br />' . 
                            '<br />'; ;  
                    }

        if (mysql_num_rows($r_query) <= 0){
            echo 'No results match your search, please try again';
               }
        ?>
      </body>

誰かがそれを助けることができれば、前もって感謝します:)

4

3 に答える 3

0

「Any」オプションを使用する場合は、(クエリを生成しているため) クエリにフィルタを含めない方がよいという想定は正しいです。

もう 1 つのオプションは、複数選択コントロールを使用することです。選択の長さがゼロの場合は、フィルターを生成しすぎないようにします。

LIKE キーワードを多用すると、クエリが実行されるテーブルが大きくなると、パフォーマンスの問題が発生することに注意してください。

于 2012-10-09T12:15:16.417 に答える
0

次のように、オプションのパラメーターを使用できます。「すべて」の選択の値をアスタリスクなどに設定し、次のように SQL をコーディングします。

"SELECT * FROM delyn 
WHERE description LIKE '%".$descrip."%' 
AND ((.$height.   = '*') OR (trayheight LIKE '%".$height."%'))
AND ((.$width.    = '*') OR (traywidth LIKE '%".$width."%')) 
AND ((.$depth.    = '*') OR (traydepth LIKE %".$depth."%')) 
AND ((.$varRange. = '*') OR (trayrange LIKE '%".$varRange."%')) 
AND ((.$varType.  = '*') OR (traytype LIKE '%".$varType."%')) 
AND ((.$varShape. = '*') OR (trayshape LIKE '%".$varShape."%'))";

この例では、最初の選択 - 説明に値が必要であると想定しています。ユーザーは、残りの選択を「すべて」に設定したままにすることができます。

于 2012-10-09T12:19:22.300 に答える
0

$sql を別の方法で構築できます。

$varRange="";
if ($_POST['trayrange'] != "*") {
$varRange="and trayrange like %".$_POST['trayrange']."%";
}

次に連結する

$sql="select"...$varRange...;
于 2012-10-09T12:27:13.693 に答える