我正在尝试在PHP/MySQL中创建搜索函数。它适用于某些产品,但不适用于其他产品。我不明白为什么会这样。
我正在使用此表中的字段"Product naam"answers"Merk":http://piclair.com/data/4192d.jpg
search函数确实适用于像"cohiba"或"punch"这样的searchquery。但它不适用于像"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
嗯。在尝试创建错误消息时,我破坏了search函数本身。同样,它不适用于"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);
您的表(如果是完整的表)中没有merk = 'sigarillos' OR mark = 'aansteker'
的记录,因此查询永远不会为这些搜索返回行。也许你也打算搜索"productnaam"。
此外,请记住使用mysql_real_escape_string()
针对SQL注入过滤$invoer
:
$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);