Парсинг формы

Alexos

Новичок
Парсинг формы

Есть некая форма..

нужно выдрать из неё нэйм и валуй хидден поля и подставить вместо них другие значения и вывести модифицированную форму целиком..

Что-то для меня эта задачка кажется сложноватой из-за того, что атрибуты в input могут стоять в разной последовательности..
 

Alexos

Новичок
а откуда она берется?
да не важно.. читается из файла например..

я могу предложить только такое решение:
1) читаем файл формы
2) выдераем блок <input c hidden-ом> с помощью preg_match и записываем его в переменную $hidden_pole
3) с помощью preg_replace меняем значение в нэйм и перезаписываем переменную $hidden_pole
4) с помощью preg_replace меняем значение в валуй и снова перезаписываем переменную $hidden_pole
5) и наконец меняем в форме старое хидден поле на новое $hidden_pole опять таки с помощью preg_replace

вот так..
что-то длинновато получается.. может можно как то по короче?
 

Фанат

oncle terrible
Команда форума
можно
вместо <input c hidden-ом> положить В ФАЙЛ нечто вроде {HIDDEN}
а дальше
1) читаем файл формы
2) заменяем {HIDDEN} с помощью str_replace на $hidden_pole
 

гоша

Guest
или:

найти </form> и вставить перед ним что нужно.
 

Alexos

Новичок
2Фанат
в принципе можно и так упростить.. подумаю как лучше..
всем спасибо.
 

Alexos

Новичок
я думаю, что упростить можно еще и не так.
да можно в принципе..
но не знаю правда как это будет смотреться в рамках борьбы за универсальность :)

ЗЫ
горожу классы.. изъ**ываюсь тут..
я вот думаю.. может ну его.. и назад к структурному програмированию.. :)
 

Alexos

Новичок
не понял, какая связь?!
если честно, то я пока и сам не совсем понимаю какая..
ООП дело хорошее, но сложное.. требует комплексного подхода к проблеме.. и пока в голове ещё не устакнилось.
ладно забей, буду дальше копаться.
 

Фанат

oncle terrible
Команда форума
про ООП я понимаю.
И ты должен хорошо понимать, что твоя первая программа с использованием ооп будет куда хуже, чем процедурная.
И что это не повод бросать.

я не понял, при чем тут такая странная работа с формой.
 

Alexos

Новичок
ну если хочешь всё с насала, то..

я просто пытаюсь написать для тренировки простенький класс, который бы брал форму из файла-шаблона, обрабатывал бы её и записывал бы введённые данные.

Каким образом построить класс и организовать шаблон формы - Вот над этим и парюсь..
и так чтоб класс этот был более менее универсальным и при использовании другого шаблона тоже работал.

Какие вопросы возникают по ходу:
1) сабмит: по какому признаку? предлагаю использовать переданные в хидден-поле переменные.
2) обработка: может в форме оставлять какие то атрибуты, которые бы указывали на мах кол-во вводимых символов, проверку валидности (предусмотреть возможность указывать основные типы, такие как URL, EMAIL, DATA и можно ещё чего-нить придумать), разрешение на запись если поле не заполнено.
3) запись: ну допустим получу я массив пост и что мне с ним делать? класс не будет универсальным если я начну производить запись именно для конкретной формы.. Возможно ли передать в метод класса функцию записи данных? если да, то как это делается..
4) хорошо бы предусмотреть аплоад файлов на сервак (ну это уж совсем мечта запредельная!)

Вот собственно мои сумбурные мысли..
Не бейте сильно, если это тупость полная - просто программу с использованием ООП, я решил написать впервые..
 

Фанат

oncle terrible
Команда форума
опять :)
за что бить-то? при чем здесь ооп? ты про ооп в своем пране не написал не слова. А если бы это все писалось на процедурном - ты бы все сделал не соменваясь? :)

В меня заклрадывается подозрение, что в твоем предсталении как-то неразрывно связаны формы и ООП. К примеру, что формы нельзя обрабатывать без ооп.

я бы на твоем месте не изучал две вещи сразу, а написал бы обработчик форм процедурный, а потом уже, зная, что делать, переводил на ооп.

теперь по твоим вопросам.
1. проверяй $_SERVER['REQUEST_METHOD']
и никаких хихидденов не надо лишних.

2. СТОП.
Это как ты себе представляешь?
по получении сабмита ты читаешь заново свою форму, из нее эти параметры, и проверяешь валидность?
Тебе не кажется, что на форму это будет мало похоже?

-~{}~ 09.02.04 22:14:

Возможно ли передать в метод класса функцию записи данных?
может быть, стоит передать только данные для функции?
а метод класса - это и будет функция записи.
тебе не кажется это более рациональным?

Вообще, судя по такому подходу, у тебя и с процедурным пока не сильно получается...
Не стоит это расценивать, как оскорбление. Лучше, как повод учиться.

4. Твоя запредельная задача очень подробно описана в статье в разделе "статьи".

Думаю, тебе не стоит писать класс.
напиши-ка пока скрипт.
 

Demiurg

Guest
Alexos
Не надо хвататься за что то можное, толдько потому, что сосед тебе подсказал. ООП это в первую очередь проектирование а не программирование, а без солидного опыта программирования сложно представить себе пректировщика. К тому же php на сегдняшний день давольно слабый ОО-язык.
 

Alexos

Новичок
я бы на твоем месте не изучал две вещи сразу, а написал бы обработчик форм процедурный, а потом уже, зная, что делать, переводил на ооп.
может тебе это покажется странным, но с процедурным кодом у меня всё ок.. я уже около года юзаю вот такой алгоритм http://phpclub.ru/talk/showthread.php?s=&threadid=30705&highlight=%EE%E1%F0%E0%E1%EE%F2%EA%E0+%F4%EE%F0%EC%FB+%ED%E0+%EF%F0%E8%EC%E5%F0%E5

Бл-и-и-и-ин! Забыл совсем тебе сказать, что речь идёт о парсинге формы (шаблона),
а то у нас получается разговор глухого со слепым.
и в этот шаблон я предлагал вставлять... (короче см. пункт 2)

И кстати, $_SERVER['REQUEST_METHOD'] здесь не пойдёт.. по одной простой причине, что могут быть и другие формы.. поэтому я и говорю что надо юзать нидден-поле :)

-~{}~ 09.02.04 22:32:

2 Demiurg
я хочу научиться проектировать.. меня задолбал процедурный код, а точнее эта каша html с програмным кодом. Мои проекты разростаются и эта каша становится просто невыносимой!
 

Alexos

Новичок
может и путаю, но мне всё таки кажется что нет..
используя ООП можно создавать разные объекты в пределах одной страницы, это очень может пригодиться, а используя шаблоны на базе процедурного кода нет..
 

Фанат

oncle terrible
Команда форума
теперь по сути.

$_SERVER['REQUEST_METHOD'] здесь не пойдёт
обработка форм, переданных методом GET, ничем не отличается от обработки ссылок, так что здесь тебе отлавливать факт сабмита не нужно.
процедурным кодом у меня всё ок..
Не стоит со мной спорить.
Если ты думаешь, что для каждой формы надо писать свою функцию записи в базу, то ты ничего не понимаешь в процедурном программировании.
повторяю, это не оскорбление, а повод учиться.
очень хорошо, что ты год работаешь по этому примеру.
Но при чем здесь процедурное программирование?
Или ты называешь процедурным - отсутствие шаблонов? Но это, понимаешь, какая штука - никакого отношения к программированию не имеет...

-~{}~ 09.02.04 22:49:

но мне всё таки кажется что нет
неправильно кажется :)
ты путаешь, и очень сильно.
азные объекты в пределах одной страницы
это весьма и весьма странное заявление.
оно может быть понято двояко.
1. в одном скрипте можно создать несколько объектов. но оно настолько банально, что нисколько не стоит упоминания.
2. ты имеешь в виду страницу в браузере у клиента - вот это уже ошибка посерьезнее.
или ты имеешь в виду что-то еще?

на базе процедурного кода нет..
Запомни раз и на всегда.
в ООП нет ничего такого, что нельзя было бы сделать процедурным, и наоборот.
Это всего лишь разные подходы к написанию программ.
 

Alexos

Новичок
я не ставлю перед собой задачи с тобой спорить. я хочу у тебя научиться. так что ты пойми меня правильно и не воспринимай это как спор. Если ты говоришь, что это чушь, ок пусть это чушь..
Но мне нужно как бы так выразиться:
str_replace ($wrong, $right, $subject);

:)
 

Demiurg

Guest
>используя ООП можно создавать разные объекты в пределах
>одной страницы, это очень может пригодиться, а используя
>шаблоны на базе процедурного кода нет..

ооп нужен совсем для других целей. В объектных моделях эти самые объекты взаимодействуют между собой и связаны крепкими узами. В веб-приложениях скрипт должен просто сгенерить html и отдать его, на этом его работа закачивается. В шаблонном подходе тоже используются идеии оопа, но это никак не значит, что ты должен использовать классы.
 
Сверху