PHP: BBCode с выбором SQL? - PullRequest
       41

PHP: BBCode с выбором SQL?

1 голос
/ 10 мая 2010

Я хотел бы закодировать bbcode с выбором SQL. По сути, я хочу, чтобы пользователь мог вводить [user]Anotheruser[/user] в текстовое поле, которое затем преобразуется во внешнем интерфейсе в URL, который выглядит следующим образом: http://mydomain.com/user/[userid]/anotheruser. Таким образом, чтобы получить идентификатор пользователя, мне нужно включить SQL-выбор, и, кроме того, если есть еще, чтобы узнать другого пользователя, на самом деле существует. Могу ли я сделать это с preg_replace, как обычно используется для создания bbcode, или мне нужно сделать что-то более сложное?

Ответы [ 3 ]

0 голосов
/ 10 мая 2010

Вам следует избегать инъекций со стороны POST, точно так же, как вы должны делать это везде.

Эта ситуация ничем не отличается.

0 голосов
/ 10 мая 2010

preg_match тег первым, получите имя пользователя, выполните запрос (будьте осторожны и сделайте этот шаг безопасным!) И замените всю совпавшую строку новой ссылкой:

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 );
    }
}
0 голосов
/ 10 мая 2010

pre_replace должно работать, будьте осторожны. Убедитесь, что вы исправили все дыры ... особенно следите за SQL-инъекцией.

...