1

10〜90のドロップダウンボックスを作成しようとしています。各値がその間の数値を表すようにします(したがって、10は11、12、13、14などを保持します)。したがって、ユーザーが10をクリックすると、「10」が含まれるエントリだけでなく、データベース内の10〜19の範囲のエントリが表示されます。

オプションタグ内に複数の値を追加することは可能ですか?これが私がこれまでに試みたことです。

HTML:

<body>


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

         <label for="trayheight">Height: </label>
                <select name="trayheight">
                    <option value="">All</option>
                    <option value="10">10</option>
                    <option value="[20:21:22:23:24:25:26:27:28:29]">20</option>
                    <option value="30">30</option>
                    <option value="40">40</option>
                    <option value="50">50</option>
                    <option value="60">60</option>
                    <option value="70">70</option>
                    <option value="80">10</option>
                    <option value="90">90</option>
                </select><br />

         <label for="trayrange">Trayrange: </label>
                <select name="trayrange">
                    <option value="">All</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><br />

        <label for ="traytype">Traytype: </label> 
                <select name="traytype">
                    <option value="">All</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">Hinge pack</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="">All</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>

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']); 
            $width   = mysql_real_escape_string($_POST['width']);
            $depth   = mysql_real_escape_string($_POST['depth']);

            $varHeight= mysql_real_escape_string($_POST['trayheight']);
            $varRange = mysql_real_escape_string($_POST['trayrange']);
            $varType  = mysql_real_escape_string($_POST['traytype']);
            $varShape = mysql_real_escape_string($_POST['trayshape']);
            $varImage = mysql_real_escape_string($_POST['imagename']);

            $sql = "SELECT * FROM delyn WHERE 
                        description LIKE '%".$descrip."%'  
                    AND trayheight LIKE '%".$varHeight."%'
                    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 /> <img src="   '. $row['imagename'] . '" width="180" length="100">';
                        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

1

簡単な答え:1つのオプションタグ値に複数の値を格納することはできません。

最も簡単で安全な解決策は、オプション値(たとえば10)に1つの値を格納し、これを設定された値から次の10の倍数までの範囲として扱うことです。

'AND col >= '.$value.' AND col < '.$value+10

2番目の解決策は、値を次のような範囲に設定してから10-19、サーバー側に設定することです。

list($min,$max) = explode('-',$value);
... 'AND col >= '.$min.' AND col <= '.$max ...

もう1つの解決策は、カプセル化する値を含む配列のJSONエンコーディングを1つのオプションに格納してから、サーバー側で値をデコードすることです。

'AND col IN ('.implode(',',json_decode($value)).')'

この種の問題にはやり過ぎなので、私は個人的にJSONアプローチを避けます。

于 2012-10-11T13:34:32.483 に答える
0

PHPソースコードからこの整数を取得していると想定しています。その場合は、このロジックをサーバー側に保持するために、このロジックをのどこかに格納するか、databaseある種php fileのを格納してください。config file1つのオプションに複数の値を格納することはできません。これがオプションの考え方です。または、文字列として保存する必要がありますがjson_encode、それが必要かどうかはわかりません。

これをサーバー側に配置する方が安全です。何を作成しているかはわかりませんが、安全性は常に前提条件です。

jsonエンコーディングの詳細

于 2012-10-11T13:16:56.627 に答える
0

anの値は<option>任意の文字列にすることができます。その文字列を適切に解釈するのはサーバー側のコード次第です。

SQLで常に文字列一致演算子を使用するのではなく、LIKE各列に適切な条件を選択する必要があります。

たとえば、値をminとmaxで指定された範囲に設定します。<option value="11-20">foo</option>次に、SQLでとを使用<=>=ます(「フェンスポストエラー」に注意してください)。

list($min,$max) = explode('-', $_POST['trayheight']);
$sql .= 'And trayheight >= ' . intval($min) . ' And trayheight <= ' . intval($max);
于 2012-10-11T13:20:51.693 に答える