我尝试使用@username检查帖子是否提及其他用户。我想用一个指向用户个人资料的链接替换它。
这就是我所得到的......我没有任何错误,但是用户名只是在没有链接的情况下以文本形式出现。我觉得$ getUsers / $ gU并没有将结果返回给$ checkString,但我看不出有什么不对。
function post()
{
global $me;
if($_POST['message'])
{
$getUsers = mysql_query("SELECT user_id, user_name FROM users");
while($gU = mysql_fetch_array($getUsers))
{
$checkString = strpos($_POST['message'], "@".$gU['user_name']."");
if($checkString !== false)
{
$replaceFrom = "@".$gU['user_name']."";
$replaceTo = "<a href=\'/user.php?id=".$gU['user_id']."\'>".$gU['user_name']."</a>";
$checked = str_replace($replaceFrom, $replaceTo, $_POST['message']);
}
else
{
$checked = $_POST['message'];
}
}
mysql_query("INSERT INTO test_table VALUES ('', '".$me['user_id']."', '".$_POST['topic']."', '".$checked."', UNIX_TIMESTAMP())");
index();
}
else {
echo "
<form action='?action=insert' method='post'>
<input type=text name=topic maxlength=40>
<br><textarea name=message cols=80 rows=9></textarea>
<br><input type='submit' STYLE='color: black; background-color: white;' value='Submit' class='btn'>
</form>
";
}
}
答案 0 :(得分:0)
mysql_query("INSERT INTO test_table VALUES ('', '".$me['user_id']."', '".$_POST['topic']."', '".$_POST['message']."', UNIX_TIMESTAMP())");
应该是
mysql_query("INSERT INTO test_table VALUES ('', '".$me['user_id']."', '".$_POST['topic']."', '".$checked."', UNIX_TIMESTAMP())");
由于您的用户表最终会增长,我建议您通过搜索@(\ w +)来编译一组潜在的用户名,准备一个查找该用户名的语句,迭代结果并替换每个返回的行的所有实例与链接。
答案 1 :(得分:0)
我认为您可以通过排除MySQL部分来简化您的问题。根据我的理解,您正试图用HTML锚标记替换用户提及。
您可以使用preg_replace_callback()
检查系统中是否存在任何已标记的用户,而不是遍历所有可用用户。
请查看下面的示例代码。为简化起见,我创建了两个函数。如果用户存在,parseTag()
将注入HTML锚链接,否则将保留原始标记。 getUserId()
将返回系统中存在的用户ID:
<?php
function parseTag($tagInfo){
list($fullTag, $username) = $tagInfo;
$uid = getUserId($username);
if ($uid) {
return "<a href='/url/to/user/{$uid}'>{$fullTag}</a>";
}
return $fullTag;
}
function getUserId($username){
$userList = [null, 'john', 'mary'];
return array_search($username, $userList);
}
$comment = "Hello @john, @doe does not exists";
$htmlComment = preg_replace_callback("/@([\w]+)/", "parseTag", $comment);
echo $htmlComment;
输出:
Hello <a href='/url/to/user/1'>@john</a>, @doe does not exists