PHP:带 SQL 选择的 BBCode?

发布于 2024-09-01 02:34:27 字数 291 浏览 3 评论 0原文

我想用 SQL 选择编写 bbcode。基本上,我希望用户能够在文本字段中输入 [user]Anotheruser[/user],然后在前端将其转换为如下所示的 URL:http://mydomain.com/user/[userid]/anotheruser。因此,为了获取用户 ID,我需要包含一个 SQL 选择,另外还需要一个 if else 来找出其他用户是否实际存在。我可以使用通常用于创建 bbcode 的 preg_replace 来完成此操作,还是需要做一些更复杂的事情?

I would like to code a bbcode with SQL selection. Basically I want the user to be able to input [user]Anotheruser[/user] in a text field, which then is converted in the front-end to an URL that looks like this: http://mydomain.com/user/[userid]/anotheruser. So in order to get the userid, I'd need to include an SQL selection, and additionally an if else to find out of the other user actually exists. Can I do this with a preg_replace as usually used for creating bbcode, or do I need to do something more complex?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

2024-09-08 02:34:27

pre_replace 应该可以工作,但要小心。确保修补所有漏洞...尤其要注意 sql 注入。

pre_replace should work, be careful tho. Make sure you patch any holes...watch out for sql injection in particular.

梦萦几度 2024-09-08 02:34:27

您应该避免在 POST 端注入,就像您在其他地方应该做的那样。

这种情况没有什么不同。

You should avoid injections POST-side, just like you should do everywhere else.

This situation is no different at all.

风筝有风,海豚有海 2024-09-08 02:34:27

首先使用 preg_match 标签,获取用户名,执行查询(小心并确保该步骤安全!)并用新的 url 替换整个匹配的字符串:

preg_match_all ( '#\[user\](.*?)\[/user\]#i', $text, $matches, PREG_SET_ORDER );

for ( $i = 0, $j = count( $matches ); $i < $j; $i++ )
{
    $userName = $matches[$i][1];
    $userId   = 0;

    // query example with mysqli
    $stmt = $sql->prepare( 'SELECT uid FROM users WHERE username = ? LIMIT 1' );
    $stmt->bind_param( 's', $userName );
    $stmt->execute();
    $stmt->bind_result( $userId );

    if ( $stmt->fetch() )
    {
        $text = str_replace( $matches[$i][0], "<a href=\"/user/$userId/$userName\" title=\"$userName\">$userName</a>", $text );
    }
}

preg_match the tag first, get the user name, execute the query (be careful and make that step safe!) and replace the whole matched string with the new url:

preg_match_all ( '#\[user\](.*?)\[/user\]#i', $text, $matches, PREG_SET_ORDER );

for ( $i = 0, $j = count( $matches ); $i < $j; $i++ )
{
    $userName = $matches[$i][1];
    $userId   = 0;

    // query example with mysqli
    $stmt = $sql->prepare( 'SELECT uid FROM users WHERE username = ? LIMIT 1' );
    $stmt->bind_param( 's', $userName );
    $stmt->execute();
    $stmt->bind_result( $userId );

    if ( $stmt->fetch() )
    {
        $text = str_replace( $matches[$i][0], "<a href=\"/user/$userId/$userName\" title=\"$userName\">$userName</a>", $text );
    }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文