Php 如何突出显示与关键字类似的sql结果
我在谷歌和这个网站上看到过很多关于同一主题的帖子,但我一篇都不懂。我还不是很精通php 我有下面的代码来输出保存在数据库中的总统信息。结果在表格中。但是我想突出显示这个表中的关键字。例如,如果你搜索'ad',你会在'adams'中突出显示'ad'Php 如何突出显示与关键字类似的sql结果,php,sql,database,highlight,Php,Sql,Database,Highlight,我在谷歌和这个网站上看到过很多关于同一主题的帖子,但我一篇都不懂。我还不是很精通php 我有下面的代码来输出保存在数据库中的总统信息。结果在表格中。但是我想突出显示这个表中的关键字。例如,如果你搜索'ad',你会在'adams'中突出显示'ad' -Name- -Birth- -years president- -died- Adams J Q 1767 4 80 正如我之前所说,我不是很熟练,
-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>';
您可以使用preg_replace或str_replace将正在搜索的字符串替换为可以使用css格式化的html 例如,如果搜索的是Ad,则Adams将替换为类似Adams或Adams的内容 编辑: 在函数prDataOp1Regel中,可以在以下行执行字符串替换:
$d[] = $v;
这条线将变成:
$d[] = str_replace ( $searchStr , "<span class='match'>{$searchStr}</span>" , $v);
此外,您不应该对每一行和每一列执行搜索和替换,而应该只对正在搜索的列执行搜索和替换。如果$data数组是关联数组,其中列名是列中每个值的键,则可以更改代码,使其类似于:
foreach($r as $columnName => $v) {
if ($columnName == 'Naam President') {
$d[] = str_replace ( $searchStr , "<span class='match'>{$searchStr}</span>" , $v);
} else {
$d[] = $v;
}
}
我没有详细查看您的代码,但我注意到一件事,这与问题无关,就是您使用了:if preg_matchX,Y{…}if!preg_matchX,Y{…}。相反,您应该使用:if preg_matchX,Y{…}else{…}。它使用的资源更少,更新后出错的可能性也更小。与其发布完整的代码并期望人们阅读,不如将其缩减到与您的问题相关的部分?这将使人们更容易帮助你们,你们会得到更快的响应。你们两个,我来改变它;应该是echo。内爆,$r。;和应用于行值。感谢您的回复!你的答案是我在谷歌上找到的,但我不知道到底该怎么改。我没有写这段代码,所以有些部分我还不清楚。非常感谢!你真棒
foreach($r as $columnName => $v) {
if ($columnName == 'Naam President') {
$d[] = str_replace ( $searchStr , "<span class='match'>{$searchStr}</span>" , $v);
} else {
$d[] = $v;
}
}