#php #html #mysql
#php #HTML #mysql
Вопрос:
я пытаюсь отобразить все результаты поиска, но что бы я ни делал, он по-прежнему показывает мне только один, а также я хочу сделать ссылку из каждого результата на продукт. Есть предложения? Спасибо
Мой search_engine.php код
include("storescripts/init.php"); //connect to DB
$button = $_GET ['submit'];
$search = $_GET ['search'];
if ($search === 'Search Products'){
echo "Please enter a value!";
} else {
if(strlen($search)<=1) echo "Search term too short";
else {
echo "<br />You searched for <b>$search</b> <hr size='1'></br>";
$search_exploded = explode (" ", $search);
foreach($search_exploded as $search_each) {
if($search_each)
$construct .="product_name LIKE '%$search_each%' OR brand LIKE '%$search_each%' OR category LIKE '%$search_each%'";
}
$constructs ="SELECT * FROM products WHERE $construct LIMIT 100 ";
$run = mysql_query($constructs);
$foundnum = mysql_num_rows($run);
if ($foundnum==0) echo "Sorry, there are no matching result for <b>$search</b>.<br /> Please check your spelling";
else {
echo "$foundnum results found !<p>";
$getquery = mysql_query("SELECT * FROM products WHERE $construct LIMIT 100 ");
while($runrows = mysql_fetch_assoc($getquery)) {
$product_name = $runrows ['product_name'];
$brand = $runrows ['brand'];
$category = $runrows ['category'];
}
echo "
<a href=#>$product_name</a> amp;nbsp;
$brand amp;nbsp; $category<p> ";
}
}
и мой код формы
<form action="product_search.php" method="GET">
<input type="text" onclick="this.value='';" value="Search Products" name="search" size="18" maxlength="60"/>
<input type="submit" style=" background-color:orange; font-size:17px; border-radius:10px;" value="Go!" name="submit"/>
</form>
Комментарии:
1. Вам не нужно запускать запрос дважды.
2. Вы также можете переключиться на mysqli. В вашем коде был очень очевидный эксплойт CSS, не говоря уже о том, что выглядит как несколько возможностей для SQL-инъекции.
Ответ №1:
Вам необходимо изменить следующее
while($runrows = mysql_fetch_assoc($getquery))
{
$product_name = $runrows ['product_name'];
$brand = $runrows ['brand'];
$category = $runrows ['category'];
}
echo "
<a href=#>$product_name</a> amp;nbsp;
$brand amp;nbsp; $category<p> ";
Для
while($runrows = mysql_fetch_assoc($getquery))
{
$product_name = $runrows ['product_name'];
$brand = $runrows ['brand'];
$category = $runrows ['category'];
echo "
<a href=#>$product_name</a> amp;nbsp;
$brand amp;nbsp; $category<p> ";
}
Вы отображали данные вне цикла, и, следовательно, после завершения цикла были показаны последние данные.
Ответ №2:
Переместите строку, которая отображает результаты внутри вашего цикла while.
while($runrows = mysql_fetch_assoc($getquery))
{
$product_name = $runrows ['product_name'];
$brand = $runrows ['brand'];
$category = $runrows ['category'];
echo "
<a href=#>$product_name</a> amp;nbsp;
$brand amp;nbsp; $category<p> ";
}