无法突出描述php mysql

时间:2017-07-10 17:25:18

标签: php mysql arrays string

我正在开展迷你项目,其中描述中的文字在网页上突出显示。关键字由用户动态输入到数据库中。

在向网页显示数据时,会从数据库中选择说明和关键字,并突出显示与关键字匹配的说明中的字词。

数据库图片:

表名信息

information table

表名关键字

keywords table

这是代码

    <?php
    $link = new mysqli('localhost','root','','example');
    if($link->connect_error){
        die("Connection Failed".$link->connect_error);
    }

?>

<!DOCTYPE html>
<html>
<head>
<style>
.highlight{
    color:green;
    background:yellow;
}
</style>
</head>
<body>
<?php
        //select keywords
        $sql = "SELECT keywords FROM keywords";
        if($res = $link->query($sql)){
            while($row = $res->fetch_assoc()){
                $keyword[] =array(
                    'name'=>$row['keywords'],
                ); 
            }
        }
        else
        {
            echo "Error".$link->error;
        }

        //get the description
        $Query = "SELECT * FROM information";
        if($result = $link->query($Query)){
            while($rows = $result->fetch_assoc()){
                echo $rows['description']."<br><br><br>";
            }
        }
        else
        {
            echo "error".$link->error;
        }

?>

</body>
</html>

这是我的输出外观 here is the my output look like

现在这里是如何显示

Now here is how it show be looking

注意我知道我的代码很容易被sql注入,但这不是大学或在线的实验

谢谢提前

2 个答案:

答案 0 :(得分:0)

要获取关键字数组,您需要创建一个空数组,然后推送数组以输入值,而不是每次循环时创建一个空数组,这将覆盖前一个数组。

 //select keywords
    $keywords=[];

    $sql = "SELECT keywords FROM keywords";
    if($res = $link->query($sql)){
        while($row = $res->fetch_assoc()){
            keywords[]=$row['keywords'];
        }
    }
    else
    {
        echo "Error".$link->error;
    }

要格式化它,现在你有一个关键字数组,相当困难,因为str_replace对数组不友好,但我认为这应该有效。

 //get the description
    $Query = "SELECT * FROM information";
    if($result = $link->query($Query)){
        while($rows = $result->fetch_assoc()){
            foreach($keywords as $i){
                str_ireplace($i, "<span class='highlight'>$i</span>",  $rows['description']);
            }
        }
    }
    else
    {
        echo "error".$link->error;
    }

现在,我没有测试这段代码,所以如果它没有按预期工作就不要杀了我:P

EDITED:关键字搜索现在不区分大小写了,我这样做是为了搜索文本中的关键字而不是整行的数组。

编辑2:请注意,使用此代码,突出显示的单词的情况将始终为小写,无论如何。如果您愿意,可以更改突出显示样式以解决此问题。 即。

.highlight{
    background-color: yellow;
    text-transform: uppercase;
}

已编辑3:性能增强,将array_push();替换为作业。

答案 1 :(得分:0)

我在谷歌上搜索,发现了一个类似于你的问题 - highlight multiple keywords in search。我编辑了接受的答案以适合您的代码。

function highlight($text, $keywords) {
    $re = '~\\b(' . implode('|', $keywords) . ')\\b~';
    return preg_replace($re, "<span class='highlight'>$0</span>", $text);
}

$Query = "SELECT * FROM information";
if($result = $link->query($Query)){
    while($rows = $result->fetch_assoc()){
        $highlighted = highlight($rows['description'], $keywords);
        echo $highlighted . "<br><br><br>";
    }
}