1

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

4

3 回答 3

0

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 );
    }
}
于 2010-05-10T10:12:15.973 回答
0

pre_replace 应该可以工作,但要小心。确保修补任何漏洞...特别注意 sql 注入。

于 2010-05-10T09:33:07.767 回答
0

您应该避免在 POST 端进行注射,就像您在其他任何地方都应该做的那样。

这种情况根本没有什么不同。

于 2010-05-10T09:49:58.350 回答