简单搜索引擎仅适用于一个SQL行

时间:2017-01-05 20:38:25

标签: php arrays search mysqli

我用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";
       }
   }


这里是我搜索&#34;&#34; 时的样子

boo-hoo it didn't work

2 个答案:

答案 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);
}
}