Как отобразить более одного результата поиска

#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> ";
}