我正在尝试在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);
答案 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);