PHP Searchfunction不适用于某些产品,但适用于其他产品

时间:2012-01-15 13:14:44

标签: php mysql

我正在尝试在PHP / MySQL中创建搜索功能。它适用于某些产品,但不适用于其他产品。我无法弄清楚为什么会这样。

我正在使用此表中的“产品naam”和“Merk”字段:http://piclair.com/data/4192d.jpg

搜索功能适用于搜索查询,如'cohiba'或'punch'。但它不适用于搜索查询,如'sigarillos'或'aansteker'。此外,当没有找到产品时,它不会显示错误消息,我不知道原因。

以下是代码的相关部分:

         <?php 

         $invoer = $_POST['zoekwoord']; 

         ?>         

        <a href="index.php">Home</a> / <a href="zoekresultaten.php" class ="selected"><?php echo $invoer; ?></a>

    <?php
    //verbind met database
        include("login/con1.inc");


    $page=$_GET["page"]; //Get the page number to show 
    If($page == "") 
    {
      $page=1; //If no page number is set, the default page to 1 
    }

    //eerst wordt de query opgehaald om te bepalen hoeveel pagina's nodig zullen zijn.
    $sql = "SELECT '".$invoer."'
            FROM product                    
            ORDER BY productnaam";    // dit is dus de query om de producten op te halen

    $query = mysql_query($sql) or die (mysql_error()."<br>in file ".__FILE__." on line ".__LINE__); // als de query niet uitgevoerd wordt geeft die een foutmelding met bestandsnaam en regelnummer
    $num = mysql_num_rows($query); // Het aantal producten

    $Limit = 6; //Number of results per page 
    $NumberOfPages = ceil($Num/$Limit);

    $sql = mysql_query("SELECT * FROM product WHERE merk='".$invoer."' AND Categorie_Nummer = 1 ORDER BY productnaam LIMIT " . ($page-1)*$Limit . ",$Limit") or die(mysql_error()); 



    if(empty($num)) {
                      echo "<p>Er zijn geen producten gevonden.</p>\n";
             } else {
                      // Laat de producten zien
                      while($product = mysql_fetch_object($sql)) {                            
                      ?>

                      <table border="5" class="productlist" width="400px">
blablablabla

嗯。在尝试创建错误消息时,我打破了搜索功能本身。同样,它不适用于'aansteker'等。此外,错误消息仍无效。

这是我现在的代码:

    <div id="contentbox">
         <?php 

         $invoer = mysql_real_escape_string($invoer);
         $invoer = $_POST['zoekwoord']; 

         ?>         

        <a href="index.php">Home</a> / <a href="zoekresultaten.php" class ="selected"><?php echo $invoer; ?></a>

    <?php
    //verbind met database
        include("login/con1.inc");


    $page=$_GET["page"]; //Get the page number to show 
    If($page == "") 
    {
      $page=1; //If no page number is set, the default page to 1 
    }

    //eerst wordt de query opgehaald om te bepalen hoeveel pagina's nodig zullen zijn.
    $sql = "SELECT productnaam LIKE '".$invoer."' OR merk LIKE '".$invoer."' 
            FROM product                    
            ORDER BY productnaam";    // dit is dus de query om de producten op te halen

    $query = mysql_query($sql) or die (mysql_error()."<br>in file ".__FILE__." on line ".__LINE__); // als de query niet uitgevoerd wordt geeft die een foutmelding met bestandsnaam en regelnummer
    $num = mysql_num_rows($query); // Het aantal producten

    $Limit = 6; //Number of results per page 
    $NumberOfPages = ceil($Num/$Limit);

   $sql = mysql_query("SELECT * FROM product WHERE productnaam LIKE '%$invoer%' OR merk='".$invoer."' AND Categorie_Nummer = 1 ORDER BY productnaam LIMIT " . ($page-1)*$Limit . ",$Limit") or die(mysql_error());
$num = mysql_num_rows($sql);

1 个答案:

答案 0 :(得分:2)

您的表(如果这是完整的表)没有merk = 'sigarillos' OR mark = 'aansteker'的记录,因此查询将永远不会返回这些搜索的行。也许您打算搜索“productnaam”。

另外,请记住使用mysql_real_escape_string()来过滤$invoer以防止SQL注入:

$invoer = mysql_real_escape_string($invoer);

要搜索productnaam,请将您的查询更改为下面的查询。要显示您的错误消息,请在上面的查询之后使用mysql_num_rows() ,而不是之前。

$sql = mysql_query("SELECT * FROM product WHERE productnaam LIKE '%$invoer%' OR merk='".$invoer."' AND Categorie_Nummer = 1 ORDER BY productnaam LIMIT " . ($page-1)*$Limit . ",$Limit") or die(mysql_error());
$num = mysql_num_rows($sql);