русский
Germany.ruForen → Архив Досок→ Webdesign und Hosting

PHP. Приемы программирования.

286  1 2 alle
Vijon постоялец31.01.06 00:05
NEW 31.01.06 00:05 
Zuletzt geändert 31.01.06 00:14 (Vijon)
Следующий вопрос может быть сформулирован не только для PHP, но и для ряда других серверных скриптов.
Я описываю код лишь в общих чертах, и если что-либо будет неясно, охотно внесу уточнения.
Имеется некая HTML-таблица, содержимое которой нужно отредактировать и запомнить:
В ответ на:

[table]
[tr]
[td][input type=text][/td]
[td][input type=text][/td]
[td][input type=checkbox value=SomeValue][/td]
[/tr]
[tr]
[td][input type=text][/td]
[td][input type=text][/td]
[td][input type=checkbox value=SomeValue][/td]
[/tr]
...........................
[/table]

Вариант 1.
Таблица строится в виде:
В ответ на:

[form method=post action=thisURL]
[table]
[tr]
[td][input type=text name=0-field0][/td]
[td][input type=text name=0-field1][/td]
[td][input type=checkbox name=0-field2 value=SomeValue][/td]
[/tr]
[tr]
[td][input type=text name=1-field0][/td]
[td][input type=text name=1-field1][/td]
[td][input type=checkbox name=1-field2 value=SomeValue][/td]
[/tr]
...........................
[/table]
[/form]

а на сервере выполняется примерно следующий код:
В ответ на:

$fields=SomeFunction($tablename,0); //Функция, возвращающая хэш с характеристиками полей заданной таблицы.
for ($i=0; $i<$rowscount; $i++)
{
//Строится SQL-запрос со значениями: $_POST[$i.└-⌠.$fields[0][⌠name■]], $_POST[$i.└-⌠.$fields[1][⌠name■]]...
}

Вариант 2.
Содержимое таблицы конвертируется в XML (или таблица связана с XML-островом):
В ответ на:

[root]
[tablename]
[field0]value00[/field0]
[field1]value01[/field1]
[field2]value02[/field2]
[/tablename]
[tablename]
[field0]value10[/field0]
[field1]value11[/field1]
[field2]value12[/field2]
[/tablename]
......
[/root]

и посылается на сервер, где из XML генерируются соответствующие SQL-запросы.
Вариант 3.
Каждая строка таблицы запоминается индивидуально, с использованием вариантов 1 или 2.
В ответ на:

[table]
[tr]
[td][input type=text][/td]
[td][input type=text][/td]
[td][input type=checkbox value=SomeValue][/td]
[td][input type=button value=Save onclick=SomeHandler()][/td]
[/tr]
[tr]
[td][input type=text][/td]
[td][input type=text][/td]
[td][input type=checkbox value=SomeValue][/td]
[td][input type=button value=Save onclick=SomeHandler()][/td]
[/tr]
...........................
[/table]

Ява-скрипт функция SomeHandler() посылает на сервер содержимое нужной строки таблицы.
А какие именно варианты используют уважаемые коллеги (разумеется, выбирать из вышеперечисленных необязательно )?
I find my way through night and day'cause I know I just can't stayhere in heaven
#1 
Murr коренной житель31.01.06 01:06
Murr
NEW 31.01.06 01:06 
in Antwort Vijon 31.01.06 00:05
Одно из чудес одного из проектов:
1. запрашивается сколько будет компонентов
2. строится форма с десятком полей на каждый компонент
3. юзверь заполняет форму, форма _упаковывается_ и отсылается
4. на сервере - распаковывается и процессится...
На простой вопрос - почему не запрашиваете по-компонентно (в проекте есть отдельная офрма для добавления компонента) в цикле безлимитно? - ответа получить не удалось...
Что до меня - страница всегда содержит одну форму, а форма всегда содержит несколько скрытых полей, полностью идентифицирующих ситуацию....
ЗюЫю редактировать содержимое таблицы - можно, но термин обозначает совершенно не то, об чем ты спрашиваешь.
ЗюЗюЫю какая сволочь поменяла уставновки на "перекодировку на лету"?
#2 
voxel3d Wind of madness31.01.06 01:58
voxel3d
NEW 31.01.06 01:58 
in Antwort Vijon 31.01.06 00:05, Zuletzt geändert 31.01.06 02:04 (voxel3d)
Избегаю необходимости иметь редактируемый грид. Вместо inplace редактирования грида выбираю строку и открываю форму на редактирование записи (полей строки). Если ответить на вопрос, то использовал бы разновидность 3 варианта -- на onblur дёргал бы обработчик и добавлял бы в _специальную_, изначально пустую форму, данный элемент с его именем и изменённым значением, и, соответственно, сабмитил бы эту форму.
Dropbox - средство синхронизации и бэкапа файлов.
#3 
Vijon постоялец31.01.06 10:17
NEW 31.01.06 10:17 
in Antwort voxel3d 31.01.06 01:58
Я прекрасно Вас понимаю, но представьте себе, что за сессию пользователь должен внести в таблицу несколько сот изменений, причем, каждое изменение заключается в установке чекбокса.
После каждого клика на чекбоксе перегружать страницу? Как я тоскую по АСП.НЕТ...
I find my way through night and day'cause I know I just can't stayhere in heaven
#4 
voxel3d Wind of madness31.01.06 14:22
voxel3d
NEW 31.01.06 14:22 
in Antwort Vijon 31.01.06 10:17
А как в Asp.Net происходит обработка данных?
Dropbox - средство синхронизации и бэкапа файлов.
#5 
Vijon постоялец31.01.06 15:02
NEW 31.01.06 15:02 
in Antwort voxel3d 31.01.06 14:22
Насколько я помню, эта тема уже затрагивалась. В .НЕТ поддерживается постоянная связь между клиентом и сервером. События обрабатываются на сервере при сохраняемом состоянии страницы. То есть, можно сказать, что функционирование интернет-приложения сходно с аналогичным локальным. При наличии "быстрого" интернета получается и удобно для программиста/пользователя, и достаточно приемлемо по скорости.
I find my way through night and day'cause I know I just can't stayhere in heaven
#6 
voxel3d Wind of madness31.01.06 15:14
voxel3d
31.01.06 15:14 
in Antwort Vijon 31.01.06 15:02, Zuletzt geändert 31.01.06 15:15 (voxel3d)
Я сижу пытаюсь, что-то вразумительное найти в интернете на тему обработки событий в Asp.Net...
> События обрабатываются на сервере при сохраняемом состоянии страницы. То есть, можно сказать, что функционирование интернет-приложения сходно с аналогичным локальным.
Т.е. на пальцах: добавляем эвент onclick на строку грида, генерится html код, который на onclick делает сабмит, при этом все POST, GET параметры сохраняются, исполняется код-обработчик на сервере, клиенту отсылается страница с восстановленными значениями полей? Я правильно понял механизм? Т.е. удобство в этой обвязке?
Dropbox - средство синхронизации и бэкапа файлов.
#7 
Murr коренной житель31.01.06 15:50
Murr
NEW 31.01.06 15:50 
in Antwort Vijon 31.01.06 15:02
События обрабатываются на сервере при сохраняемом состоянии страницы.
------
Not a true. Only looks like this.
#8 
Murr коренной житель31.01.06 15:51
Murr
NEW 31.01.06 15:51 
in Antwort voxel3d 31.01.06 15:14
Т.е. удобство в этой обвязке?
------
Yes.
#9 
Vijon постоялец31.01.06 18:57
NEW 31.01.06 18:57 
in Antwort voxel3d 31.01.06 15:14
В ответ на:
при этом все POST, GET параметры сохраняются

Также, сохраняются значения атрибутов тех элементов, у которых runat=server.
I find my way through night and day'cause I know I just can't stayhere in heaven
#10 
toptop постоялец31.01.06 19:33
NEW 31.01.06 19:33 
in Antwort voxel3d 31.01.06 15:14, Zuletzt geändert 31.01.06 19:35 (toptop)
В ответ на:
Я сижу пытаюсь, что-то вразумительное найти в интернете на тему обработки событий в Асп.Нет...

Вот тут есть действующий пример, правда для ASP.NET 1.0 http://www.dotnetjunkies.com/quickstart/aspplus/doc/webserverctrls.aspx#handling
Это пример со встроенным кодом в ASPX странице, а есть еще возможность разделить код и дизайн, т.е. тэги HTML и ASPX в одном файле, а код со всеми эвентами и отдельном файле, который впоследствии компилируется в DLL.
#11 
toptop постоялец31.01.06 19:46
NEW 31.01.06 19:46 
in Antwort Vijon 31.01.06 15:02
В ответ на:
В .НЕТ поддерживается постоянная связь между клиентом и сервером.

.NET как WEB приложение НЕ поддерживает постоянной связи между клиентом и сервером. В нем можно реализовать сохранение состояния контрола между Request-ами при помощи hidden, но разрыв соединения происходит также как и в других Web приложениях.
#12 
voxel3d Wind of madness31.01.06 21:59
voxel3d
NEW 31.01.06 21:59 
in Antwort toptop 31.01.06 19:33
В данных примерах мне непонятна роль яваскрипта, я посмотрел примеры controls3, controls4, там при просмотре html-sorce code виден подключаемый яваскрипт, я посмотрел его... после обфускатора, нифига непонятно... Ч╦ это может быть?
Существует ли в природе компиляторы, которыe генерят html и соответствующую обвязку с серверными скриптaми (PHP, Perl) для обработки событий, так, как это сделано в Asp .Net? Короче, есть что-то, что не Asp с его привязкой к виндовсу (про экстеншн к апачу прочитал уже), что работает с подобной моделью обработки событий для распростран╦нных серверных скриптовых языков?
Dropbox - средство синхронизации и бэкапа файлов.
#13 
Murr коренной житель31.01.06 22:57
Murr
NEW 31.01.06 22:57 
in Antwort voxel3d 31.01.06 21:59
А смысл? Есть .NET для винды и есть MONO для других платформ.
#14 
voxel3d Wind of madness31.01.06 23:14
voxel3d
NEW 31.01.06 23:14 
in Antwort Murr 31.01.06 22:57
Угу, и есть Юникс-хостинг без поддержки mono у тех, с кем я работаю.
Dropbox - средство синхронизации и бэкапа файлов.
#15 
Murr коренной житель31.01.06 23:40
Murr
NEW 31.01.06 23:40 
in Antwort voxel3d 31.01.06 23:14
Хммм... Ну тогда у тебя два варианта... нет, три...
1. посмотреть то, что я тебе советовал, но найдешь ли ты шаблоны под Перл или РНР - не знаю, не интересовался
2. писать что-то самому... хммм... помнится, под ASP я это сделал за три месяца вместе с немаленьким проектом
3. хммм... этот вариант тебе подойдет через год...
#16 
Murr коренной житель31.01.06 23:42
Murr
NEW 31.01.06 23:42 
in Antwort voxel3d 31.01.06 23:14
З.Ы. если будешь писать сам - пользуй изначально какой-нибудь веб-сервер - кучу времени съэкономишь...
#17 
voxel3d Wind of madness01.02.06 01:11
voxel3d
NEW 01.02.06 01:11 
in Antwort Murr 31.01.06 23:40
> 1. посмотреть то, что я тебе советовал, но найдешь ли ты шаблоны под Перл или РНР - не знаю, не интересовался
Я смотрел RapTier, оно мне совсем не подходит. RapTier делает прослойку между приложением и БД, а так же морды ко всему этому, в том числе и на ASP.Net, но все его возможности генерации под веб основываются, насколько я понял, на возможнстях самого ASP.Net, т.е. перекладывает генерацию серверных скриптов на плечи последнего.
> З.Ы. если будешь писать сам - пользуй изначально какой-нибудь веб-сервер - кучу времени съэкономишь...
Нет, я не собираюсь писать экстеншн для вебсервера. Я начал на C++ неспешно писать шаблоны для генерации серверных скриптов, т.е. мне по барабану, какой вебсервер будет в конечном итоге использоваться.

Идиотов и фриков перевоспитать невозможно!
Dropbox - средство синхронизации и бэкапа файлов.
#18 
Murr коренной житель01.02.06 01:38
Murr
NEW 01.02.06 01:38 
in Antwort voxel3d 01.02.06 01:11
Послушай старого Кота, съевшего свои зубы на делании кода.
РапТиер - действительно кака, но не потому что он базируется .Net и пользует .Net для доступа - доступ легко эмулируется через доступ к Схемы базы. B jн не завязан исключительно на .Net - можно продуцировать что угодно. Но там довольно много других проблем, которые не видны, пока не вносятся изменения в шаблоны.
Зря. Веб-сервер сделал бы за тебя 80-90% организационной работы - все, что связано с организаций генерации выходного документа. Кроме этого могу сказать, что для генерации стоит иметь схему базы отдельно от самой базы и так же стоит пользоваться чем-то весьма-весьма стандартным для продуцирования выхода.
#19 
toptop постоялец01.02.06 20:14
NEW 01.02.06 20:14 
in Antwort voxel3d 31.01.06 21:59
В ответ на:
В данных примерах мне непонятна роль яваскрипта, я посмотрел примеры controls3, controls4, там при просмотре html-sorce code виден подключаемый яваскрипт, я посмотрел его... после обфускатора, нифига непонятно... Ч╦ это может быть?

Это каки, которые ничего общего для понимания работы ASP.NET не имеют. Остальное же работает так.
Сначала то, что стоит в body
В ответ на:
Please enter your name: <asp:textbox id="Name" runat=server/>
<asp:button text="Enter" Onclick="EnterBtn_Click" runat=server/>
<p>
<asp:label id="Message" runat=server/>

Элементы, заключенные в asp-тэги обрабатываются .net -ским процессом и конвертируются в обычный HTML, возвращаемый браузеру.
Таким образом, клиент получает
В ответ на:
Please enter your name: <input name="Name" type="text" id="Name" />
<input type="submit" name="_ctl1" value="Enter" />
<p>
<span id="Message"></span>

Теперь, что делает script. Там кстати, есть варианты на VB, на C# и на JScript.
В ответ на:
<script language="JScript" runat="server">
function EnterBtn_Click(Src : Object, E : EventArgs) : void {
Message.Text = "Hi " + Name.Text + ", welcome to ASP.NET!";
}
</script>

Это как раз и есть программа на одном из .NET языков. В отправленной клиенту странице нет никаких следов от этой функции. Там подключены другие javascript, которые пришли предположительно из include, но они не имеют значения для .NET. Этот код компилируется на сервере. При нажатии на кнопку форма submit-тится на сервер, а перед возвратом браузеру свойство Text у Label устанавливается в текст и клиент получает
В ответ на:
<span id="Message">Hi voxel3d, welcome to ASP.NET!</span>

Таким образом, на сервере находится компилированная программа, обрабатывающая события, которая написана и вкраплена в aspx-страницу.
#20 
1 2 alle