Caman 0 Опубликовано: 9 января 2008 Рассказать Опубликовано: 9 января 2008 Драсьте всем. Возник такой вопрос, при добавлении новой новости, добавляются дополнительные поля, в БД это выглядит примерно так: gorod|Аланья||hotel|Лонисера Мне необходимо вытянуть последнее слово после | ... в данном случае Лонисера Кто в php хорошо разбирается, подскажите нужную функцию. Цитата Ссылка на сообщение Поделиться на других сайтах
Al-x 7 Опубликовано: 9 января 2008 Рассказать Опубликовано: 9 января 2008 Не люблю я эти доп поля, по мне так удобнее новое поле в бд добавить (для базы это тоже плюс), но раз уж так надо - можно сделать end(explode("|", $row['xfields'])); Цитата Ссылка на сообщение Поделиться на других сайтах
Caman 0 Опубликовано: 9 января 2008 Рассказать Опубликовано: 9 января 2008 Автор $db->query("SELECT xfields FROM " . PREFIX . "_post"); while($row = $db->get_row()) { $hotely .= end(explode("|", $row['xfields'])); } echo $hotely; Правильно ли я записал? о_О Цитата Ссылка на сообщение Поделиться на других сайтах
lifestar 18 Опубликовано: 9 января 2008 Рассказать Опубликовано: 9 января 2008 Не люблю я эти доп поляаналогично Caman, всё верно, только все последние значения доп полей всех новостей у вас получатся написаны слитно Цитата Ссылка на сообщение Поделиться на других сайтах
Caman 0 Опубликовано: 9 января 2008 Рассказать Опубликовано: 9 января 2008 Автор $db->query("SELECT xfields FROM " . PREFIX . "_post"); while($row = $db->get_row()) { $hotely .= end(explode("|", $row['xfields'])); echo "".$hotely."<br>"; } значит так =) Цитата Ссылка на сообщение Поделиться на других сайтах
lifestar 18 Опубликовано: 9 января 2008 Рассказать Опубликовано: 9 января 2008 я бы написал так echo $hotely.'<br/>'; :0 дело вкуса Цитата Ссылка на сообщение Поделиться на других сайтах
Caman 0 Опубликовано: 9 января 2008 Рассказать Опубликовано: 9 января 2008 Автор lifestar, Al-x, спасибо вам огромное... я в вас и не сомневался Цитата Ссылка на сообщение Поделиться на других сайтах
celsoft 6 095 Опубликовано: 9 января 2008 Рассказать Опубликовано: 9 января 2008 Вот в таком вот маленьком скрипте на 4 строки, содержится серьезная XSS уязвимость. Цитата Ссылка на сообщение Поделиться на других сайтах
Al-x 7 Опубликовано: 9 января 2008 Рассказать Опубликовано: 9 января 2008 celsoft, а может мы не видели часть кода)) может там вверху где-нить написано $hotely = Цитата Ссылка на сообщение Поделиться на других сайтах
lifestar 18 Опубликовано: 9 января 2008 Рассказать Опубликовано: 9 января 2008 (изменено) celsoft, какая задача ставилась - такое и решение. Вопросы безопасности не затрагивались (тем более я так полагаю, что Caman написал echo исключительно из наглядного соображения) Изменено 9 января 2008 пользователем lifestar Цитата Ссылка на сообщение Поделиться на других сайтах
Caman 0 Опубликовано: 10 января 2008 Рассказать Опубликовано: 10 января 2008 Автор $db->query("SELECT xfields FROM " . PREFIX . "_post"); $hotely .= "<select name=\"pageSelect\">"; while($row = $db->get_row()) { $hotely_end .= end(explode("|", $row['xfields'])); $hotely .= "<option value=\"#\">".$hotely_end."</option>"; } $hotely .= "</select>"; $tpl->set('{hotely}', $hotely); чёт не то, эту функцию я никак не знаю, вот и трудности... а может я просто что-то забыл Цитата Ссылка на сообщение Поделиться на других сайтах
lifestar 18 Опубликовано: 10 января 2008 Рассказать Опубликовано: 10 января 2008 (изменено) $result = $db->query("SELECT xfields FROM " . PREFIX . "_post"); $hotely = '<select name="pageSelect">'; while($row = $db->get_row($result)) { $hotely .= '<option value="#">'.end(explode("|", $row['xfields'])).'</option>'; } $hotely .= "</select>"; $tpl->set('{hotely}', $hotely); Изменено 10 января 2008 пользователем lifestar Цитата Ссылка на сообщение Поделиться на других сайтах
Caman 0 Опубликовано: 10 января 2008 Рассказать Опубликовано: 10 января 2008 (изменено) Автор спасибо огромное! И ещё небольшой вопросик... Иногда поля не заполняют, т.к они необязательные к заполнению... получаются в выпадающем списке пробелы. Как их убрать, наверное через условие? Как лучше реализовать? что-то типа такого? if($row['xfields']) != "") {$xfields = end(explode("|", $row['xfields']));} else {$xfields = "";} $hotely .= '<option value="#">'.$xfields.'</option>'; Изменено 10 января 2008 пользователем Caman Цитата Ссылка на сообщение Поделиться на других сайтах
lifestar 18 Опубликовано: 10 января 2008 Рассказать Опубликовано: 10 января 2008 Ну да, только мне привычнее так: $xfields = ($row['xfields']) != '') ? end(explode('|', $row['xfields'])) : ''; Цитата Ссылка на сообщение Поделиться на других сайтах
celsoft 6 095 Опубликовано: 10 января 2008 Рассказать Опубликовано: 10 января 2008 $xfields = ($row['xfields']) != '') ? end(explode('|', $row['xfields'])) : ''; мне тоже но данный код не будет работать на некоторых версиях PHP 5 и PHP 6.xx, скрипт завершится с ошибкой что функция end должна принимать в качестве параметра только переменную. Цитата Ссылка на сообщение Поделиться на других сайтах
lifestar 18 Опубликовано: 10 января 2008 Рассказать Опубликовано: 10 января 2008 функция end должна принимать в качестве параметра только переменнуюМожет массив? А если так? $xfields = ($row['xfields']) != '') ? @end(explode('|', $row['xfields'])) : ''; Цитата Ссылка на сообщение Поделиться на других сайтах
Caman 0 Опубликовано: 11 января 2008 Рассказать Опубликовано: 11 января 2008 Автор Чего-то не то... делаю так: $result = $db->query("SELECT xfields FROM " . PREFIX . "_post"); $hotely = '<select name="pageSelect">'; while($row = $db->get_row($result)) { $xfields = ($row['xfields']) != '') ? end(explode('|', $row['xfields'])) : ''; $hotely .= '<option value="#">'.$xfields.'</option>'; } $hotely .= "</select>"; index.php вообще пустой становится, даже если вписать $xfields = ($row['xfields']) != '') ? @end(explode('|', $row['xfields'])) : ''; Цитата Ссылка на сообщение Поделиться на других сайтах
lifestar 18 Опубликовано: 11 января 2008 Рассказать Опубликовано: 11 января 2008 index.phpпричём здесь index.php? Попробуй написать по другому... $res = $db->query("SELECT xfields FROM " . PREFIX . "_post"); while($row = $db->get_row($res)) { if ($row['xfields']) != '') { $hotely .= '<option value="#">'.end(explode('|', $row['xfields'])).'</option>'; } } $hotely = '<select name="pageSelect">'.$hotely.'</select>'; а то может действительно на некоторых версиях PHP 5 и PHP 6.xx, скрипт завершится с ошибкой Цитата Ссылка на сообщение Поделиться на других сайтах
Caman 0 Опубликовано: 17 января 2008 Рассказать Опубликовано: 17 января 2008 Автор //navigator по отелям $res = $db->query("SELECT xfields FROM " . PREFIX . "_post"); $hotely = '<option value="#">город/отель</option>'; while($row = $db->get_row($res)) { if ($row['xfields'] != '') { $hotely .= '<option value="#">'.end(explode('|', $row['xfields'])).'</option>'; } } $hotely = '<select name="pageSelect">'.$hotely.'</select>'; // Есть вопрос, т.к я оч.плохо знаю javascript, как сделать, чтобы при выборе нужного пункта из списка, перекидывалось на страницу поиска. <form name=\"fullsearch\" id=\"fullsearch\" action=\"http://nashturist.ru/index.php?do=search\" method=\"post\"> <select name=\"pageSelect\" name=\"story\" id=\"searchinput\" onchange=\"location.href=this.options[selectedIndex].value\">'.$hotely.'</select> </form> Вот так примерно хочу сделать, но как правильно перекинуть на страницу поиска не знаю... метод POST тут... просто так слово не впишешь, как в GET'е Цитата Ссылка на сообщение Поделиться на других сайтах
lifestar 18 Опубликовано: 17 января 2008 Рассказать Опубликовано: 17 января 2008 <form name="fullsearch" id="fullsearch" action="http://nashturist.ru/index.php?do=search" method="post"> <select name="pageSelect" name="story" id="searchinput" onchange="this.form.submit();">'.$hotely.'</select> </form> по моему так. Правда нехорошо это, а если я ошибкся с выбором - ждать перезагрузки страницы? Цитата Ссылка на сообщение Поделиться на других сайтах
Caman 0 Опубликовано: 18 января 2008 Рассказать Опубликовано: 18 января 2008 Автор Вроде всё нормально работает, только не передаётся переменная POST //navigator по отелям $res = $db->query("SELECT xfields FROM " . PREFIX . "_post"); $hotely = '<option value="#">город/отель</option>'; while($row = $db->get_row($res)) { if ($row['xfields'] != '') { $hotely .= '<option value="'.end(explode('|', $row['xfields'])).'">'.end(explode('|', $row['xfields'])).'</option>'; } } $hotely = '<form name="fullsearch" id="fullsearch" action="http://nashturist.ru/index.php?do=search" method="post"> <select name="pageSelect" name="story" id="searchinput" onchange="this.form.submit();">'.$hotely.'</select> </form>'; // Может нужно значения name или id поставить в option? Цитата Ссылка на сообщение Поделиться на других сайтах
lifestar 18 Опубликовано: 18 января 2008 Рассказать Опубликовано: 18 января 2008 только не передаётся переменная POSTкак вы это определили? Может нужно значения name или id поставить в option?точно не нужно Цитата Ссылка на сообщение Поделиться на других сайтах
Caman 0 Опубликовано: 18 января 2008 Рассказать Опубликовано: 18 января 2008 Автор При переходе по ссылке из списка, выводится путая форма поиска, без результатов, вот я и думаю что значение переменной из option не передается POST Цитата Ссылка на сообщение Поделиться на других сайтах
celsoft 6 095 Опубликовано: 18 января 2008 Рассказать Опубликовано: 18 января 2008 name="pageSelect" name="story" противоречие в именах уберите name="pageSelect" Цитата Ссылка на сообщение Поделиться на других сайтах
Рекомендованные сообщения
Присоединяйтесь к обсуждению
Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.