我正在从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);
}
?>
答案 0 :(得分:1)
关于mysql_* being deprecated并使用prepared statements和preg_replace_callback:
@detail_route
答案 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);
}