[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Создание BB кодов
UnWind
Здравствуйте Дамы и Господа, в общем проблема такая, как сделать следующее:
1.Есть регулярное выражение вывода из строки ID расположенных в таком формате [ID] 1 [/ID];
2.Есть SQL запрос, который берёт из базы ну к примеру users имя пользователя;
3.Нужно сделать регулярное выражение которое заменяет [ID] 1 [/ID] на имя пользователя в формате «ID:1 – Вася; ID:2 – Петя»;

Как это можно было бы осуществить ? Заранее благодарю за ответ!
P.S.:> 1 и 2 пункты уже сделал, а вот третий - не могу понять как осуществить, циклом, циклом в цикле или еще что то. В общем помогите пожалуйста, перый раз в практике с этим столкнулся sad.gif



Спустя 59 минут, 26 секунд (9.12.2010 - 10:23) Slays написал(а):

Спустя 8 минут, 32 секунды (9.12.2010 - 10:32) kirik написал(а):
Тут зарыта медвежья услуга
$arr = array(
1 => 'Vasya',
2 => 'Petr'
);
$txt = '[id]1[/id] let\'s go to get high!';

preg_match('#\[id\]\s?(\d+?)\s?\[/id\]#ie', $txt, $o);
echo str_replace($o[0], $arr[$o[1]], $txt) . "\n";
// or
echo preg_replace('#\[id\]\s?(\d+?)\s?\[/id\]#ie', '$arr[\\1]', $txt);

Спустя 15 минут, 4 секунды (9.12.2010 - 10:47) UnWind написал(а):
kirik
Благодарю!)

Спустя 8 минут, 35 секунд (9.12.2010 - 10:55) kirik написал(а):
UnWind
>> (\d+?) тут вопросительный знак не нужен.

Спустя 2 минуты, 56 секунд (9.12.2010 - 10:58) UnWind написал(а):
kirik
Хм а почему вот этот код

$arr = array(
1 => 'Vasya',
2 => 'Petr'
);
$txt = '[id]1[/id] шайтан мордатый, а [id]2[/id] нефиговый кодер!';

preg_match('#\[id\]\s?(\d+)\s?\[/id\]#ie', $txt, $o);
echo str_replace($o[0], $arr[$o[1]], $txt) . "\n";
// or
echo preg_replace('#\[id\]\s?(\d+)\s?\[/id\]#ie', '$arr[\\1]', $txt);

Выводит
Цитата
Vasya шайтан мордатый, а [id]2[/id] нефиговый кодер! Vasya шайтан мордатый, а Petr нефиговый кодер!

И вообще для чего нужен сдесь str_Replace ???

Спустя 20 минут, 52 секунды (9.12.2010 - 11:19) kovaldm написал(а):
kirik
Вот тебе и медвежья услуга.)))

Спустя 7 минут, 23 секунды (9.12.2010 - 11:26) kirik написал(а):
Цитата (kovaldm @ 9.12.2010 - 03:19)
Вот тебе и медвежья услуга.)))

И не говори smile.gif

Цитата (UnWind @ 9.12.2010 - 02:58)
И вообще для чего нужен сдесь str_Replace ???

Там же серым по белому написано // or. Тоесть или этот код, или этот.
Тот который с str_replace работает сейчас только с одним значением. Второй же - работает с множественными совпадениями.

Спустя 2 часа, 39 минут, 22 секунды (9.12.2010 - 14:06) UnWind написал(а):
kirik
Хорошо, спасибо за объяснения)
Честно говоря в английском полный 0.
А вот вопрос как сделать еще такую фишку, у меня же по идее там если вписан id - то он вставляется в sql запрос, а далее уже только вывод на экран идет, вот я сейчас много вариантов перепробывал с циклами и так далее - у меня получается, что выводиться 1 id из базы, далее идет просто повтор замен одного и того же сколько записей в базе.
А по идее должно быть так:
Скрипт находит первый BBCode, после чего выбирает id, вставляет в запрос, BB код заменяется на изображение внизу подписанное именем, находиться следующий BBCode и так далее.
А если я исполню preg_replace к примеру, он сразу же заменит все значения, а регулярное выражение которое парсит из BB кодов id'шники тупо вставят массив в SQL запрос. Меня вот больше интересует как вот это сделать. Если можете, помогите пожалуйста)
Заранее благодарю!)

Спустя 38 минут, 1 секунда (9.12.2010 - 14:44) twin написал(а):
Цитата
Честно говоря в английском полный 0.

а причем тут английский Это же логическое "или" smile.gif

По тз ничего не ясно, лучше примерчик. Что есть и что должно получиться.
Подозреваю, что без стека тут не обойтись.

Спустя 2 часа, 10 минут, 16 секунд (9.12.2010 - 16:54) UnWind написал(а):
twin
Ну в общем я не помню, что такое OR)
Помню что было в операторе LIKE в SQL для объединения запроса как оператор или ставился OR, и все, больше не от куда не помню.
А в PHP логический оператор или - || )))

В общем - мне показывать уже нечего, так как я код удалил со психу :(
Но объясню понятней.
Что есть BB код ? - какие то метки которые в последствие формируются в теги html.
У меня BB код ориентирован на вставку изображения в контент с красивой рамочкой, названием и при клике на него с вылетом в popup окне и его описанием.
Соотвественно что бы все это произошло, эти все описания должны где то браться, для этого я создал таблицу в базе данных ps_manager (Print Screen Manager).
Поля таблицы: id, user_id, title, label, description, url.
Идем далее - соотвественно поле user_id - кто добавил изображение, title - название изображения, label - метки, description - описание изображения.
Когда пользовать вставляет BB код, значение id заключенное между метками, отправляется в SQL запрос при помощи переменной $PSid

[PS] id скриншота который он хочет вставить [/PS]

id скриншота попадает в SQL запрос
SELECT r.id, r.title, r.label, r.url r.description,r.user_id f.login
FROM users f
JOIN ps_manager r ON r.id
WHERE r.user_id LIKE f.id AND r.id LIKE q'".$PSid."';
COMMIT;

Далее, по идее вся информация из базы данных вставляется в html код, ну пусть хотя бы такой в качестве примера:

<img src="'.$PS['url'].'" alt="'.$PS['title'].'" title="'.mysql_escape_string($PS['description']).'">

И все, далее соотвественно все по такому же принцыпу и соотвественно в самом тексте пользователя таких BB кодов может быть море, по этому я и не понимаю как это сделать, а учиться к сожалению времени нет((( 16 числа проект сдавать, а у меня все сделанно кроме этого BB кода, а он по сути обязателен.
Я просто в регулярных выражениях так сказать 0, использую их очень и очень редко, в основном все делаю при помощи SQL запросов или готовых классов/функций и так далее.
А вот тут в общем пригодилось и я как бы в лужу сел. :(
Заранее благодарю если сможете помоч!

Спустя 12 минут, 35 секунд (9.12.2010 - 17:07) twin написал(а):
UnWind
Цитата
А в PHP логический оператор или - || )))

А разве никогда не видел конструкцию
or die();
Открою тайну, or - это тоже самое, с чуть меньшим приоритетом.

По существу - kirik написал верный код, ты просто не смог применить правильно. Сейчас не могу, чуть позже напишу как надо, если не опередят (на что в тайне надеюсь) :)

Спустя 4 минуты, 22 секунды (9.12.2010 - 17:11) UnWind написал(а):
twin
А вот такую конструкцию встречал, но редко ей пользуюсь.
У меня код PHP вообще минималестичен, в основном делает все Oracle.
Хм. or die в общем прекращает выполнение программы если функция/условие выполнено не верно на сколько я помню.
Хорошо) Буду с нетерпением ждать твоего кода, как раз давно честно говоря хотел посмотреть. как только начал читать твой веб учебник.
И еще, можешь дать свой номер icq or skype smile.gif
было бы интерестно побеседовать на досуге)

P.S.:> Все уже нашел, у меня семи знак, запросил авторизацию. smile.gif

Спустя 33 минуты, 23 секунды (9.12.2010 - 17:44) twin написал(а):
Цитата
or die в общем прекращает выполнение программы если функция/условие выполнено не верно на сколько я помню.

Не если, а или. Выполняется функция, или die.
Я не дома, позже отвечу.

Спустя 6 минут, 33 секунды (9.12.2010 - 17:51) UnWind написал(а):
twin
Не правильно выразился)
Да я уже спать собираюсь ложиться, на работе загоняли.
В общем - завтра буду в сети в аське.
Если успеешь сделать код - оставь его плиз в теме, завтра в аську тебе постучу)
Давай, хорошо отдохнуть после рабочего дня, я спать. Офф smile.gif


Спустя 16 часов, 58 минут, 59 секунд (10.12.2010 - 10:50) twin написал(а):
Вот где медведь то побывал)))
function createScrin($PSid)
{

$res = mysql_query("SELECT r.id, r.title, r.label, r.url r.description,r.user_id f.login
FROM users f
JOIN ps_manager r ON r.id
WHERE r.user_id LIKE f.id
AND r.id LIKE q'"
. (int)$PSid[1] ."'"
);

if(mysql_num_rows($res) > 0)
{
$PS = mysql_fetch_assoc($res);
return '<img src="'. htmlspecialchars($PS['url']).'"'
.' alt="'. htmlspecialchars($PS['title']).'"'
.' title="'. htmlspecialchars($PS['description']).'">';
}
else
return
NULL;

}



$text = "Нужно настроить локальную сеть на этажах 3, 4 на схемах ниже
[PS]1[/PS] [PS]2[/PS] и поставить два маршрутизатора и файервола на 5-6
стых этажах так, как показанно на схемах ниже [PS]3[/PS] [PS]149[/PS]"
;


echo preg_replace_callback("#\[ps\](\d+)\[/ps\]#uis", 'createScrin', $text);

Спустя 4 минуты, 3 секунды (10.12.2010 - 10:54) twin написал(а):
Правда это очень нерационально. Если к экономии ресурса требования не жесткие - сойдет. Если критично, нужно в два прохода. Сначала собрать массив ID, вынуть все одним запросом и потом заменять.

Спустя 11 минут, 30 секунд (10.12.2010 - 11:06) UnWind написал(а):
twin
Спасибо большое! smile.gif


_____________
Искусство программирования - заставить компьютер делать всё то, что Вам делать лень!
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.