|
|
|
| Пользователь в тексте использует BB код: [video]111[/video], где 111 - это id-видео в БД, в БД хранится код вызова плеера с соответствующим видео, т.е. <iframe>данные для видео</iframe>,
необходимо при выводе из БД текста пользователя заменить:
Пример видео находится ниже [video]111[/video]
на
Пример видео находится ниже [тут запрос к БД по id 111 и вывод html-кода из БД].
тэгов [video] может быть несколько
Понимаю, что надо действовать через preg_replace, но как не знаю :)) | |
|
|
|
|
|
|
|
для: segafrompiter
(11.01.2015 в 13:11)
| | preg_replace_callback()
в качестве callback-функции использовать свою, которая обратится к БД, вытащит из нее код вставки и отдаст preg-механизму.
можно также применить preg_replace() с модификатором e в шаблоне, но это вариант для твердых духом кодеров, поскольку там читабельности никакой, и напороть - раз плюнуть. Хотя, наверняка можно добиться, чтобы работало чуть быстрее. :)) | |
|
|
|
|
|
|
|
для: Trianon
(11.01.2015 в 14:58)
| | videos -таблица, где id_video-INT, video_videocode - TEXT, содержит html-код плеера
$message-сообщение из БД, TEXT, содержит к примеру - Заранее спасибо! Мое выступление на соревнованиях - [video id=1] [/video]
function video_replace($matches)
{
$res_select_video = mysql_query("SELECT * FROM videos where id_video=".$matches[0]."");
while ($row_select_video = mysql_fetch_array($res_select_video, MYSQL_BOTH))
{
$video_videocode=$row_select_video['video_videocode'];
}
return "".$video_videocode."";
}
$pattern = "#\[video id\=(.*?)\]([^\] \?]+?)\[/video\]#si";
$str = preg_replace_callback($pattern, 'video_replace', $message);
echo($str);
|
не выводит ничего, ни ошибок, ни кода плеера
Получилось так-
function video_replace($matches)
{
$res_select_video = mysql_query("SELECT * FROM videos where id_video=".$matches[1]);
while ($row_select_video = mysql_fetch_array($res_select_video, MYSQL_BOTH))
{
$video_videocode=$row_select_video['video_videocode'];
}
return "<br clear='all'><center>".$video_videocode."</center>";
}
$pattern = "#\[video id=(.*?)\]#si";
$str = preg_replace_callback($pattern, 'video_replace', $message);
echo($str);
|
| |
|
|
|
|
|
|
|
для: segafrompiter
(11.01.2015 в 15:54)
| | > $res_select_video = mysql_query("SELECT * FROM videos where id_video=".$matches[0]."");
> $pattern = "#\[video id\=(.*?)\]([^\] \?]+?)\[/video\]#si";
>не выводит ничего, ни ошибок, ни кода плеера
потому что по этому образцу построенный селект-запрос будет
SELECT * FROM videos where id_video=[video id=1] [/video]
|
Было бы удивительно, если б он что-то вернул.
Вообще-то результат исполнения запроса проверять стоит перед тем как далее использовать.
>Получилось так-
Эдак вы инъекций себе натолкаете полное лукошко.
Вы вроде попроще конструкцию изначально затевали? Такую?
<? // \[video\]([0-9]+)\[/video\]
$pattern = "#\\[video\\]([0-9]+)\\[/video\\]#i";
|
В любом случае $matches[1] стоит гасить от разного рода sql-inъекций int-ом хотя бы.
<?
mysql_query("SELECT * FROM videos WHERE id_video=".int($matches[1]) );
|
| |
|
|
|
|
|
|
|
для: Trianon
(11.01.2015 в 17:27)
| | Спасибо за совет :) Но пока это внутреннее тестовое :) Снаружи будет все 2 раза перепроверяться :) | |
|
|
|