当用户开始在搜索字段中输入时,我希望能够创建如下链接。让我们说他输入字母a
:
<a href="http://google.com">#<strong>a</strong>rig<strong>a</strong>to</a>
PHP:
// sets up database conection to variable $dbh
require_once '../includes/bootstrap.php';
if ($_SERVER['REQUEST_METHOD'] == 'GET') {
$tag = (!empty($_GET['tag'])) ? "%$_GET[tag]%" : false ;
if ($tag) {
$stmt = $dbh->prepare('SELECT `tag` FROM `tags` WHERE `tag` LIKE ?');
$result = array();
$stmt->bindParam(1, $tag, PDO::PARAM_STR);
$stmt->execute();
// store result
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
$result[] = $row['tag'];
}
$tags = '';
// create links for results
foreach ($result as $value) {
$row = "<li><a href='http://google.com'>" . str_replace($tag, '<strong>' . $tag . '</strong>', $value) . '</a></li>';
$tags .= $row;
}
echo $tags;
}
}
用户在字母$tags
中输入时a
的结果:
<li><a href="http://google.com">#arigato</a></li>
<li><a href="http://google.com">#arizona</a></li>
<li><a href="http://google.com">#cantalupi</a></li>
<li><a href="http://google.com">#clearwater</a></li>
<li><a href="http://google.com">#florida</a></li>
<li><a href="http://google.com">#happy</a></li>
<li><a href="http://google.com">#mamadas</a></li>
<li><a href="http://google.com">#miriam</a></li>
<li><a href="http://google.com">#nissan</a></li>
<li><a href="http://google.com">#sauce</a></li>
<li><a href="http://google.com">#sentra</a></li>
<li><a href="http://google.com">#usa</a></li>
<li><a href="http://google.com">#vegas</a></li>
<li><a href="http://google.com">#was</a></li>
<li><a href="http://google.com">#watches</a></li>
由于某种原因,它没有根据需要添加<strong>
标记。
答案 0 :(得分:2)
我认为这是因为这一行:
$tag = (!empty($_GET['tag'])) ? "%$_GET[tag]%" : false ;
此变量用于MySQL语句,但稍后它也用于str_replace()
,问题是它试图找到%$_GET[tag]%
进行替换,而不是$_GET
中的值{ {1}}变量。
请尝试使用此代码:
// sets up database conection to variable $dbh
require_once '../includes/bootstrap.php';
if ($_SERVER['REQUEST_METHOD'] == 'GET') {
$tagStr = $_GET['tag'];
$tag = (!empty($_GET['tag'])) ? "%$_GET[tag]%" : false ;
if ($tag) {
$stmt = $dbh->prepare('SELECT `tag` FROM `tags` WHERE `tag` LIKE ?');
$result = array();
$stmt->bindParam(1, $tag, PDO::PARAM_STR);
$stmt->execute();
// store result
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
$result[] = $row['tag'];
}
$tags = '';
// create links for results
foreach ($result as $value) {
$row = "<li><a href='http://google.com'>" . str_replace($tagStr, '<strong>' . $tagStr . '</strong>', $value) . '</a></li>';
$tags .= $row;
}
echo $tags;
}
}