gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 23:53:03 25 4
gpt4 key购买 nike

我正致力于从 HTML、PHP 和 MySQL 数据库构建一个社交网络,但我不知道如何让这个 PHP 代码工作。请记住,我完全不是 PHP 专家。

我现在正在研究的是一个函数,atreplace($text),其中包含 preg_replace() 函数,用于查找 @ 提及项发布标题、评论或我在其他任何地方使用它,使它们成为可点击的链接。现在这很容易,除了它要处理的字符串中的@mentions 是用户 ID 号而不是用户名。例如,我的社交网络帖子标题中的字符串如下所示:“今天和我的 friend @214432 和@163728 去了迪斯尼乐园。”。但是帖子标题最初是这样说的:“今天和我的 friend @billysmith 和@hi_im_kelly 去了迪斯尼乐园。”。

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

问题

当它使用 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 时,它甚至没有出现。

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

有人可以告诉我如何更改 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);
}
?>

最佳答案

关于 mysql_* being deprecated并使用 prepared statements连同 preg_replace_callback :

$pdo = new PDO('mysql:host=localhost;dbname=testdb;charset=utf8', 'localonly', 'localonly', array(
PDO::ATTR_EMULATE_PREPARES=>false,
PDO::MYSQL_ATTR_DIRECT_QUERY=>false,
PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION
));
...

function atreplace($text, $pdo) {
$stmt = $pdo->prepare('
SELECT
`username`
FROM
`so_profiles`
WHERE
`id`=?
');

$mesg = preg_replace_callback(
'/\@(\w+)/',
function ($match) use($stmt) {
$stmt->execute( array($match[1]) );
$users = $stmt->fetchAll(); // yes, there should be only one....
return empty($users) ? '[unknown user]' : $users[0];
},
$text
);

return $mesg;
}

关于php - 用函数的返回值替换@someid(someid),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32283668/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com