| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > PHP: Общие вопросы > функция возвращает пустые значения |
| Автор: Gold Dragon 8.7.2008, 07:56 | ||
есть функция
не могу понять ошибку. переменная $gd_sess и $error просто нулевые. Уже всю голову сломал и не знаю почему так. До return все переменные имеют значения, проверял Помогите разобраться |
| Автор: Feldmarschall 8.7.2008, 08:07 |
| С какой стати ты решил, что эта функция должна что-то возвращать, кроме кучи хтмл-а? Где проверочный код, чтобы мы тоже могли увидеть, что "все пустое", а это тебе не померещилось? Вообще, конечно, мешанина чудовищная. какие-то сессии вперемешку с HTML, все это засунуто в функцию... |
| Автор: MoLeX 8.7.2008, 08:19 | ||
| Gold Dragon, return возращает в твой основной скрипт ответ в виде хтмл кода (в твоем случае). как понял ты хочешь чтобы он еще и возратил значение переменных $gd_sess и $error. для этого надо так
|
| Автор: Feldmarschall 8.7.2008, 08:28 |
а что ж ты тогда нам голову морочишь, что она не возвращает тебе $error? Это НЕНОРМАЛЬНО. Когда частью шаблона являются функции и сессии. |
| Автор: Gold Dragon 8.7.2008, 08:38 | ||
| да нет там сессий! Там переменные. И шаблон у меня постоен по этому принципу конструкция типа
отлично работает с переменными. Вот во всём сайте всё отлично, а тут не хочет вот зайдите сюда http://befocus.qqq/index.php?pages=r2 там внизу есть ".... 15 минут...." А эти модули практически одинаковые... |
| Автор: Feldmarschall 8.7.2008, 08:43 |
| Ты сам пробовал читать, что пишешь? Ладно, оставим в стороне твою кашу, речь не о ней. Что у тебя твоя функция не возвращает, и почему должна? |
| Автор: MoLeX 8.7.2008, 08:54 | ||
|
| Автор: Gold Dragon 8.7.2008, 08:56 |
| Feldmarschall, а может попроще с наездами? а теперь по сути... часть функций это часть шаблона. Функция возвращает HTML-код. При этом получает несколько переменных. В данном случае при начальной загрузке станицы ошибки ($info['error']) нет. Если отправить форму без каких-то данных. то переменная вернётся с описанием ошибки и эта переменная вставляется в код. Проблема в том что я не понимаю почему переменная до оператора return существует, а возвращается нулевая. Я дал ссылку на аналогичную страницу.. там это (как на всём сайте) работает ps что касается чудовещной мешанины. Это один вариантов шаблонов. Если мне не изменяет память то все скины этого форума постоены именно по этому принципу Добавлено через 1 минуту и 57 секунд MoLeX, я знаю что она работает, но именно на этой странице нет.. Вот и хочу понять что может быть |
| Автор: Feldmarschall 8.7.2008, 09:03 | ||||
в приведенном коде нет и следа обработки форм. к чему это предложение?
За 10 сообщений ты так ни разу и не написал, что имеется в виду под "возвращает" это заметно, что отлично. по этому топику особенно =) |
| Автор: Gold Dragon 8.7.2008, 09:11 | ||||
поэтому и спрашиваю. |
| Автор: Feldmarschall 8.7.2008, 09:21 |
| У тебя кривая и неочевидная система шаблонизации. И все проблемы - из-за неё. А еще потому, что ты очвечаешь на какие-то другие вопросы, а не на те, которые я задаю. А я задаю их не просто так, а чтобы ты сам хотя бы попытался понять, что твой , такой замечательный, код делает. |
| Автор: Mal Hack 8.7.2008, 09:31 |
| Gold Dragon, привет Тамбову =) Скажи, какие условия обеспечивают: т.е. в чем выражается это "тут"? |
| Автор: Gold Dragon 8.7.2008, 09:35 | ||
| ну значит у нас подмена понятий и различия в терминологи. хорошо, попробую ещё раз повторить эта функция возвращает какой-то HTML-код. Не возвращает переменные которые я ей передаю. А именно $error = '', а $gd_sess = 0. Первая переменная передаётся этой функции, вторая берётся из конфигурации, т.е. простая глобальная переменная. Почему должна возвращать?.. Потому что - возвращается весь код - правильно вставляются, а следственно возвращаются другие переменные ($gd_site) - в самой функции переменные существуют (ссылку на пример я дал. Если нажать на "ВХОД", то можно увидеть что переменная в функции существует. вся система постоена по принципу
потом из этих скинов составляется весь документ. Как я уже упоминал, форум IPB постоен именно по такому принципу, только с использованием классов. А у меня всё попроще и использую только функции. Может ты просто с такой не сталкивался? Но по мне очень удобная и гибкая система Добавлено через 5 минут и 9 секунд Mal Hack, и тебе привет.. всё некогда было смотри две станицы http://befocus.ru/index.php?pages=r1 и http://befocus.ru/index.php?pages=r2 нажми на "ВХОД" на первой странице переменная почему-то нулевая (её содержимое можешь увидеть в верху страницы, я в функции поставил print_r($errror) ) на второй странице всё работает.. Просто даже не знаю где копать.. Ведь в этой функции используется три переменные, а две нулевые |
| Автор: Mal Hack 8.7.2008, 09:49 |
| Тебе надо копать там, где у тебя эта функция вызывается, т.к. там содержимое $_POST теряется или переопределяется. |
| Автор: Feldmarschall 8.7.2008, 09:53 | ||
| Я прекрасно знаю, что такое хередок, можно мне не объяснять =) Форум IPB давно от такой системы отказался. Поскольку это не шаблон, а винегрет в своем худшем виде. Вместо простого и наглядного файла шаблона мы имеем пхп код, в котором лежат функции, в которых лежит хередок. Игла в яйце, яйцо в утке, утка в зайце, заяц в офиге... А теперь мы попробуем со всей этой фигней взлететь, ага. По поводу твоего кода. Я написал, в самом начале:
Не "можно кнопку нажать". Не "не возвращаются" (я, наконец-то, понял, что ты имеешь в виду, постоянно повторяя это слово). А код. Простой код, который иллюстрирует твою проблему. И который можно воспроизвести. Почему бы не сократить HTML до одной строчки? Кто тебе мешает это сделать? Почему нельзя последовательно упрощать код, чтобы в конечном итоге добраться до источника проблем, как это делают все программисты, в процессе отладки? Где, в конце, концов, вывод этого print_r($error)? и почему она должна что-то содержать? |
| Автор: Gold Dragon 8.7.2008, 10:01 | ||||||
уже говорил
Добавлено через 4 минуты и 46 секунд Feldmarschall, да ёмоё.. ну ты читай что ли....
|
| Автор: Mal Hack 8.7.2008, 10:10 |
| global маленькими напиши. Добавлено через 38 секунд Но с точки зрения технологии это не совсем верно... |
| Автор: Gold Dragon 8.7.2008, 10:12 | ||
вот что на странице сейчас. Бумаю видно что и где должно выводиться и проверяться на наличие
http://befocus.ru/index.php?pages=r1 |
| Автор: Feldmarschall 8.7.2008, 10:18 | ||||
| Gold Dragon, на странице "этого" быть не может. Поскольку "это" - только определение функции. А вызова здесь нету. В коде мы видим
на странице -
у тебя есть идеи, как 2 br превратились в 4? |
| Автор: Gold Dragon 8.7.2008, 10:19 | ||
Feldmarschall, уже много раз давай ссылку на результат Насчёт всего кода согласен. Но оставил его только потому что он именно так на сервере, вдруг где-то именно в самом коде синтаксис глючит.. просто уже не вижу. Пытался полность переписать вручную и заново, тоже самое.. а насчёт иголки--яйца--утки... Мне нравится так Добавлено через 6 минут а вот это уже интересно... почему-то не обратил на это внимание... |
| Автор: Mal Hack 8.7.2008, 10:25 |
| передавать конечно. |
| Автор: Gold Dragon 8.7.2008, 10:29 |
| действительно, функция скорее всего вызывается два раза. Буду смотреть.. Feldmarschall, и нечего было так кричать Mal Hack, в чём плюсы передачи? |
| Автор: Feldmarschall 8.7.2008, 10:31 |
в котором ничего, из того, что ты описывал словами, не было. именно в этом. в кривом шаблоне. Это неудивительно. Ты слишком большое внимание уделял собеседникам, объясняя им, какие они некультурные. Где уж тут за своим кодом смотреть. Тем более, что код вообще ничего не выводил. Может, ты что-то и правил на своем befocus.qqq, но на страницах, на которые ты исправно посылал своих собеседников, не выводилось ни-че-го. |
| Автор: Gold Dragon 8.7.2008, 10:51 |
| Feldmarschall, ну конечно, я вот весь такой из себя.. и всё у меня кривое, и всё не как надо и правильно, и всё через одно место сделано.. Предлагаю меня расстрелять В общем, вопрос закрыт. Проблема оказалось банальной, в условиях была логическая ошибка и функция использовалась несколько раз. А шаблон уж не такой и кривой оказался |
| Автор: skyboy 8.7.2008, 12:48 |
кривой не шаблон сам по себе. подход к системе шаблонизации выбран один из самых неудобных для отладки, рефакторинга и даже - использования. впрочем, тебе с этим жить. |
| Автор: Gold Dragon 8.7.2008, 13:00 |
| skyboy, есть несколько причин по которым я этим пользуюсь. Ну первая и наверное самая главная - я просто привык и мне очень с ним удобно работать. Вторая - используя этот подход удобнее менять вид страниц, т.е. можно сделать все страницы сайта абсолютно разными вплодь до изменения стилей и расположения элементов при меньших затратах Кстати, есть же тема "Шаблонизатор", решение что лучше так и не приняли |
| Автор: skyboy 8.7.2008, 15:33 |
там, насколько мне помнится, речь шла о HTML с PHP вставками, блочный шаблонизатор и XML/XSLT все они дают фору варианту с heredoс. а) попробуй сделать шаблон внутри шаблона: либо переменную придется инициализировать содержимым целиком(значит, занимать память), либо придется разрывать heredoc'овское echo, что не улучшит читабельность ни на йоту б) попробуй вызвать PHP функцию в шаблоне; опять же: либо придется дополнительно инициировать переменные, либо разрывать вывод в) попробуй сделать вывод однотипной информации по данным в массиве: придется разрывать вывод, чтоб можно было echo вынести в РНР-шный цикл или я чего не понимаю? |
| Автор: Gold Dragon 8.7.2008, 15:38 |
| не по теме конечно пошло... разрывов у меня нет.. я просто даю функции массив, а там просто в HTML-тексте уже идут простые вставки типа {$info['name']} и всё очень читаемо |
| Автор: Mal Hack 8.7.2008, 15:46 |
Использование глобальных переменных чревато их возможным изменением где-ть.. |