我用PHP编写了一个相当简单的搜索引擎,我遇到了一个问题......该引擎只能用于一行SQL。在PHP连接的表中,有两行。一个名为" The Painful Truth"和另一个" Darkness Rising"。如果你输入"黑暗"或者"上升"进入搜索栏后,它会回来" Darkness Rising"正如所料。但是,如果您输入"","痛苦"或"真相"进入栏后,它将返回零结果。(PS"痛苦的真相"是表中的第一个条目)我试图通过列出表中的歌曲名称,搜索和爆炸歌曲名称后的数组。他们都像应该工作一样排队,但唉,他们没有。
下面的代码采用输入并删除字符和空格
$lower = strtolower($_POST["text"]);
$characterRemover = preg_replace('/[^ \w]+/', '', $lower);
$search = str_replace(' ' , '' , $characterRemover);
echo "<strong>". $search . "</strong><br>";
下面的代码从数据库中获取数据,展开字符串并尝试查找匹配项。
while($row = $result->fetch_assoc()) {
$Slower = strtolower($row["song_name"]);
echo "Song Name: " . $Slower . "<br>";
$song_name = explode(" " , $Slower);
// list array
$arrlength = count($song_name);
for($x = 0; $x < $arrlength; $x++) {
echo $song_name[$x];
echo "<br>";
}
if (in_array($search, $song_name) !== false) {
$song_result = $row["song_name"];
} else {
$song_result = "0 results buddy";
}
}
答案 0 :(得分:1)
这里发生的事情是循环正在为每一行运行,而变量$song_result
正在被覆盖。尝试使用标记$found
来获取歌曲。
$found = false;
while(!$found && ($row = $result->fetch_assoc())) {
$Slower = strtolower($row["song_name"]);
echo "Song Name: " . $Slower . "<br>";
$song_name = explode(" " , $Slower);
// list array
$arrlength = count($song_name);
for($x = 0; $x < $arrlength; $x++) {
echo $song_name[$x];
echo "<br>";
}
if (in_array($search, $song_name) !== false) {
$song_result = $row["song_name"];
$found = true;
} else {
$song_result = "0 results buddy";
}
}
如果要捕获每首歌曲,请使用数组或连接字符串:
$songs = [];
while($row = $result->fetch_assoc()) {
$Slower = strtolower($row["song_name"]);
echo "Song Name: " . $Slower . "<br>";
$song_name = explode(" " , $Slower);
// list array
$arrlength = count($song_name);
for($x = 0; $x < $arrlength; $x++) {
echo $song_name[$x];
echo "<br>";
}
if (in_array($search, $song_name) !== false) {
$songs[] = $row["song_name"];
}
}
if (count($songs)) {
$song_result = implode('<br>', $songs);
} else {
$song_result = "0 results buddy";
}
注意:您应该遵循JimL的建议,并通过WHERE子句请求过滤数据库查询的信息。然后只显示查询的结果。 ;)
答案 1 :(得分:0)
<?php
//Kindly make sure you have create a connection and select a db. this is a sample code to search from mysql db using data supplied
$msg=$_POST['search'];
if(isset($msg)){
$search=explode(' ',$msg);
$len=count($search);
$query="select * from news where ";
for($m=0;$m<$len;$m++){
$query.=" post like '%{$search[$m]}%' || ";
}
$query.=" post like '%{$msg}%' order by upload_date desc";
if($get=mysqli_query($connect,$query)){
$contentSearch=array();
$i=0;
while($row=mysqli_fetch_assoc($get)){
contentSearch[$i]=$row;
$i++;
}
echo"List of Search Items<br>";
print_r($contentSearch);
}
}