【问题标题】:How highlight sql results that are like the keyword如何突出显示类似关键字的sql结果
【发布时间】:2014-12-07 00:21:43
【问题描述】:

我在 google 和这个网站上看到过很多关于同一主题的帖子,但我一个都不懂。 (我对php还不是很熟练)

我有下面的代码来输出保存在数据库中的总统信息。结果在表格中。但我想突出显示此表中的关键字。因此,例如,如果您搜索“ad”,您会在“adams”中突出显示“ad”。

-Name-       -Birth-      -years president-    -died-    
Adams J Q     1767              4                80

正如我之前所说,我不是很熟练,所以我希望有人能告诉我该怎么做。 谢谢!

代码:

 extract($_POST, EXTR_SKIP);                                                                                        
    pdo()->prepare($qry);                                                                                               // wat is de query
    pdo()->bindParam(':zoekTerm', "%$zoekTerm%", PDO::PARAM_STR);                                                       // vul parameter in; let op het '' en "" verschil
    pdo()->execute();                                                                                                   // uitvoeren van de query met params


    function getData($qry, Array $bindParameters)                                                                       // haal data uit de query
    {
        pdo()->prepare($qry);
        foreach($bindParameters as $k => &$v) {
            pdo()->bindParam($k, $v, PDO::PARAM_STR);
        }
        pdo()->execute();
        return pdo()->fetchAll();                                                                                       // dus een array (associatief)
    }
                                                                                                                        //print the data from an array

    function prData(Array $data) {

        foreach($data as $k => $v) {
            //print_r($v);
            echo implode( ', ', $v);
        }

    }

    function prDataOp1Regel(Array $data) {
        foreach($data as $r) {

            $d = array();        
            foreach($r as $v) {
                $d[] = $v;          
            }
            print implode('</td><td>', $d); tr();   
        }
    }
    function prDataKeys(Array $data) {      
        foreach($data as  $v) {
            $r = array();                   
            foreach($v as $k => $dummy) {
                $lk = strtolower($k);
                // even iets geks. Omdat het kan.
                if($lk === "gebjaar") $lk = "Geboorte jaar" ;
                $r[] =  Ucfirst($lk);
            } 

            echo    implode ('</th><th>', $r); //nl();
            break;

        }
    }


    $qry = "
    SELECT 
        presnaam AS 'Naam President' 
        ,Gebjaar
        ,Jaarpres AS 'Aantal jaren president' 
        ,Sterfleeftijd
        ,Partij
        ,Staatgeboren AS 'Geboren in'   
    FROM president 
    WHERE presnaam 
    LIKE :zoekTerm 
    "; 

    $d = getData($qry, array(':zoekTerm' => "%$zoekTerm%")); 

    echo '<table id="outputtable"><tr>';
    echo '<th>';
    prDataKeys($d);
    echo '</th>';
    echo '<tr>';
    echo '<td>';
    prDataOp1Regel($d);
    echo '</td>';
    echo '</td>';
    echo '</tr></table>';

【问题讨论】:

  • 我没有详细查看您的代码,但我注意到与问题无关的一件事是您使用了:if (preg_match(X,Y)) { ... }如果 (!preg_match(X,Y)) { ... } 。相反,您应该使用: if (preg_match(X,Y)) { ... } else { ... } 。它使用的资源更少,更新后出错的可能性更小。
  • 与其发布完整的代码并期望人们通过它,您能否将其缩减为与您的问题相关的部分?这将使人们更容易帮助您,并且您会收到更快的响应
  • 谢谢两位,我会改的。
  • 回声内爆('', $r);应该是 echo ' '.implode(' ', $r).'';并且 '' 和 '' 应该用于行值。

标签: php sql database highlight


【解决方案1】:

您可以使用 preg_replace 或 str_replace 将正在搜索的字符串替换为您可以使用 css 格式化的一些 html。

例如,如果搜索的是“Ad ”。

编辑:

在您的函数 prDataOp1Regel 中,您可以在以下行执行字符串替换:

$d[] = $v;

这行会变成:

$d[] = str_replace ( $searchStr , "<span class='match'>{$searchStr}</span>" , $v);

但是,您需要更新函数定义以将搜索字符串作为参数:

function prDataOp1Regel(Array $data, $searchStr) {

此外,您不应该对每一行和每一列都进行搜索和替换,而应该只对正在搜索的列进行搜索和替换。如果 $data 数组是一个关联数组,其中列名是列中每个值的键,您可以更改代码,使其类似于:

foreach($r as $columnName => $v) {
    if ($columnName == 'Naam President') {
        $d[] = str_replace ( $searchStr , "<span class='match'>{$searchStr}</span>" , $v);
    } else {
        $d[] = $v;
    }
}

【讨论】:

  • 感谢您的回复!你的答案是我在谷歌上找到的,但我不知道在哪里/在哪里确切地改变它。这段代码不是我写的,所以有些部分我还不清楚。
  • 非常感谢!你太棒了
猜你喜欢
  • 2014-03-07
  • 1970-01-01
  • 2012-02-16
  • 2010-09-16
  • 1970-01-01
  • 1970-01-01
  • 2017-10-18
  • 2012-02-10
  • 2017-10-04
相关资源
最近更新 更多