Я пытаюсь создать раскрывающийся список, где он имеет от 10 до 90, я хочу, чтобы каждое значение стояло за номера между ними (так что 10 будет содержать 11, 12, 13, 14 и т. Д. И т. Д.). Поэтому, если пользователь нажимает на 10, он будет отображать любые записи в базе данных, которые варьируются от 10 до 19, а не только записи с «10» в нем.
Можно ли добавить несколько значений в тег опции? Вот что я сделал до сих пор.
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>
Спасибо заранее, кто может помочь 🙂
Простой ответ: вы не можете хранить несколько значений в одном значении тега параметра.
Простейшим и безопасным решением было бы сохранить одно значение в значении параметра (например, 10
), а затем рассматривать это как диапазон от значения, установленного до следующего кратного 10:
'AND col >= '.$value.' AND col < '.$value+10
Второе решение – установить значение как диапазон 10-19
а затем на стороне сервера:
list($min,$max) = explode('-',$value); ... 'AND col >= '.$min.' AND col <= '.$max ...
Другим решением было бы хранить JSON-кодирование массива, содержащего значения, которые вы хотите инкапсулировать в один параметр, а затем декодировать значение на стороне сервера:
'AND col IN ('.implode(',',json_decode($value)).')'
Я лично избегал бы подхода JSON, так как это слишком много для этой проблемы.
Я предполагаю, что вы извлекаете эти целые числа из исходного кода PHP. В этом случае просто сохраните эту логику где-нибудь в вашей database
, php file
или каком-то config file
, чтобы сохранить эту логику на стороне сервера. Невозможно сохранить несколько значений в одном варианте, это идея опциона. Или вам придется хранить его как строку json_encode
, но я не уверен, что это то, что вы хотите.
Также было бы безопаснее поставить это на серверную сторону, я не уверен, что вы создаете, но безопасность всегда является предварительной.
Подробнее о кодировке json
Значение <option>
может быть любой строкой; это зависит от вашего кода на стороне сервера, чтобы правильно интерпретировать эту строку.
Вместо того, чтобы всегда использовать оператор LIKE
строкового соответствия в вашем SQL, вам нужно выбрать подходящие условия для каждого из ваших столбцов.
Например, установите для вашего значения диапазон, заданный min и max: <option value="11-20">foo</option>
а затем используйте <=
и >=
в вашем SQL (остерегайтесь «ошибок забора «!)
list($min,$max) = explode('-', $_POST['trayheight']); $sql .= 'And trayheight >= ' . intval($min) . ' And trayheight <= ' . intval($max);