用函数的返回值替换@someid(someid)

时间:2015-08-29 07:23:49

标签: php html mysql

我正在从HTML,PHP和MySQL数据库构建社交网络,我无法想象如何使这个PHP代码工作。请记住,我完全不是PHP的专业人士。

我现在正在处理的是一个函数atreplace($text),其中包含preg_replace()函数,用于在帖子标题,注释或其他任何我使用它的地方找到@ mentions,使它们成为可点击的链接。现在这很简单,除了它将处理的字符串中的@mentions是用户ID号而不是用户名。例如,我的社交网络的帖子标题中的字符串将如下所示: “今天和我的朋友去了迪斯尼乐园@ 214432和@ 163728。”但是帖子标题最初说的是:“今天和我的朋友@billysmith和@hi_im_kelly一起去迪士尼乐园。”。

我编写了脚本(不包括,因为它与问题没有关系),它处理后期数据并将其插入MySQL数据库,将@ mentions替换为用户的用户号id。在人们会更改用户名的情况下提及而不是用户名,那么就不必编辑他们提到改变用户名的人的帖子。

问题

当有人正在查看他们的Feed时,使用atreplace()函数回显帖子标题时,当然它会在帖子中回显“@ 214432”和“@ 163728”(来自上面的示例)标题而不是“@billysmith”和“@hi_im_kelly”,我希望,因为一个不同的PHP脚本编辑它并更改了提到的用户名,即用户ID,这是一个数字。

这就是我想要的

我想编写一个类似我下面的函数(get_username($id))。我只包括get_username($id)来展示我想做的事情。我还不太了解如何使用preg_replace()函数。 正如您所看到的,我尝试使用get_username('$1)函数传递$ 1,这是我希望用用户名替换的用户编号ID,但它不起作用。 (我知道我以某种方式使用了1美元的错误)。虽然在get_username()函数中,当我尝试返回$ id时,它确实输出了用户编号id。但是当我在mysql_query()中使用$ id时,它甚至都没有显示出来。

如果您不理解所有这些,首先,我想将包含@ mentions的字符串放入atreplace()函数中。这个函数会找到所有的@ user提及,记住,它们是用户编号id。然后,它会将每个提及放入get_username()函数中。该函数将从mysql数据库中获取用户名,其中id等于atreplace()函数找到的用户编号id,然后它将返回用户名,最后将替换@提...

有人可以告诉我如何更改get_username()功能以使其正常工作吗?或者只是写一个新的。

<?php
function get_username($id){
    $undata = mysql_query("select `username` from `accounts` where `id`='$id';");
    $un = mysql_fetch_assoc($undata);
    return "<a href='#'>@".$un['username']."</a>";
}

function atreplace($text){
    $replaced = preg_replace('/\@(\w+)/', get_username('$1'), $text);
    return($replaced);
}
?>

2 个答案:

答案 0 :(得分:1)

答案 1 :(得分:0)

如果有人遇到同样的问题,我得到了答案,感谢@VolkerK

我刚将其改为一个功能:

function atreplace($text){
$mesg = preg_replace_callback('/\@(\w+)/', 
    function ($match){
        $matchedit = preg_replace('/\@(\w+)/','$1', $match[0]);
        $und = mysql_query("select `username` from `so_profiles` where `id`='".$matchedit."';");
        $un = mysql_fetch_array($und);
        return "<a>@".$un['username']."</a>";
    }, 
$text);
return($mesg);
}