Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: создание сложной формы для ввода
 
 автор: YF   (20.12.2012 в 21:45)   письмо автору
644.8 Кб
 
 

Помогите!!!! Как создать форму в виде таблицы для ввода оценок по предмету(который есть в бд), где первая колонка это фамилии учеников из бд, а первая строка таблицы даты за определенный период, на пересечении даты и фамилии выставляется оценка, интересует реализация при помощи mysql и php. и возможно это только при помощи mysql и php. примерно как в файле.

  Ответить  
 
 автор: Lotanaen   (21.12.2012 в 09:53)   письмо автору
 
   для: YF   (20.12.2012 в 21:45)
 

Конечно возможно, а в чем сложности то возникли?

  Ответить  
 
 автор: oradev   (21.12.2012 в 09:56)   письмо автору
 
   для: YF   (20.12.2012 в 21:45)
 

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

  Ответить  
 
 автор: confirm   (21.12.2012 в 10:52)   письмо автору
 
   для: oradev   (21.12.2012 в 09:56)
 

Это почему же так выгоднее?

  Ответить  
 
 автор: oradev   (21.12.2012 в 11:24)   письмо автору
 
   для: confirm   (21.12.2012 в 10:52)
 

Как почему ?

Придется решать вопрос сохранения измененных записей.

Не говоря уже о вопросе проверки корректности внесенных данных.

  Ответить  
 
 автор: confirm   (21.12.2012 в 11:28)   письмо автору
 
   для: oradev   (21.12.2012 в 11:24)
 

И в чем же сверх сложность такой задачи?
То что вы предлагаете оправдано для расширенного редактирования, например, индивидуальных данных ученика. Тогда да, иначе такие данные как оценка учеников нужно редактировать/обновлять комплексно, группой, а не дергать страницы по пустякам.

  Ответить  
 
 автор: oradev   (21.12.2012 в 11:35)   письмо автору
 
   для: confirm   (21.12.2012 в 11:28)
 

Представим что в базе оценка число - пользователь вбил строку, что далее произойдет ?
Ловим exception и набивать все заново ?

  Ответить  
 
 автор: Lotanaen   (21.12.2012 в 11:38)   письмо автору
 
   для: oradev   (21.12.2012 в 11:35)
 

каждое значение просто проверять на сервере на соответствие и корректные данные пишем в базу, а некорректные сообщаем пользователю, кстати если это электронный журнал то там и отсутствие и опоздания также проставляются, так что поле должно быть строковым в БД, хотя можно и числовым значением обойтись

  Ответить  
 
 автор: oradev   (21.12.2012 в 11:43)   письмо автору
 
   для: Lotanaen   (21.12.2012 в 11:38)
 

Я еще раз повторю, оценка - число - что будете делать с данными введенными за этим недоразумением, вы поймали исключение, неужели думаете цикл продолжится ?

  Ответить  
 
 автор: Lotanaen   (21.12.2012 в 11:49)   письмо автору
 
   для: oradev   (21.12.2012 в 11:43)
 

конечно цикл продолжится :)

  Ответить  
 
 автор: oradev   (21.12.2012 в 11:57)   письмо автору
 
   для: Lotanaen   (21.12.2012 в 11:49)
 

Я тогда здесь бессилен, объяснять не буду.

  Ответить  
 
 автор: Lotanaen   (21.12.2012 в 12:09)   письмо автору
 
   для: oradev   (21.12.2012 в 11:57)
 

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

  Ответить  
 
 автор: Sfinks   (21.12.2012 в 12:18)   письмо автору
 
   для: oradev   (21.12.2012 в 11:43)
 

Какое исключение? О чем Вы? Об exception на ошибке при попытке записать в БД некорректные данные?

Так вообще-то таких исключений дОлжно не допускать!
Сперва все данные проверять на корректность, и только потом принимать решение, что делать дальше. Либо писать в базу, есил все ОК, либо выдавать пользователю уведомление об ошибке, если таковые имеются.

После exception конечно ничего не продолжится (разве что в блоке обработки exception'a), но их не должно быть!

  Ответить  
 
 автор: oradev   (21.12.2012 в 12:57)   письмо автору
 
   для: Sfinks   (21.12.2012 в 12:18)
 

>Какое исключение? О чем Вы? Об exception на ошибке при попытке записать в БД некорректные данные?
>
>Так вообще-то таких исключений дОлжно не допускать!
>Сперва все данные проверять на корректность, и только потом принимать решение, что делать дальше. Либо писать в базу, есил все ОК, либо выдавать пользователю уведомление об ошибке, если таковые имеются.
>
>После exception конечно ничего не продолжится (разве что в блоке обработки exception'a), но их не должно быть!

Ну это бред, интересно, кто вам сказал, что исключения это зло ?

Вы в курсе, что исключениями можно таки обработать ваши данные на корректность ?

  Ответить  
 
 автор: Sfinks   (21.12.2012 в 13:16)   письмо автору
 
   для: oradev   (21.12.2012 в 12:57)
 

А вы в курсе что можно микроскопом гвозди забивать?
Но почему-то большинство людей этого не делает.
Или это от того, что им гениальности не хватает?

Присоединяюсь к остальным: Учите мат.часть!

  Ответить  
 
 автор: confirm   (21.12.2012 в 11:42)   письмо автору
 
   для: oradev   (21.12.2012 в 11:35)
 

А вы заглядывали в раздел руководства РНР - функции для работы с массивами?
Если нет, то пора бы. То что вы описываете как крах и невозможность, на самом деле плевое дело для РНР.

  Ответить  
 
 автор: oradev   (21.12.2012 в 11:48)   письмо автору
 
   для: confirm   (21.12.2012 в 11:42)
 

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

  Ответить  
 
 автор: confirm   (21.12.2012 в 11:56)   письмо автору
 
   для: oradev   (21.12.2012 в 11:48)
 

Да.... даже и комментировать ваше высказывание трудно - $_POST или $_GET данные полученные формой, это знаете ли уже массив, не знали?

  Ответить  
 
 автор: oradev   (21.12.2012 в 12:00)   письмо автору
 
   для: confirm   (21.12.2012 в 11:56)
 

И что вы хотите этим сказать ?

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

  Ответить  
 
 автор: confirm   (21.12.2012 в 12:07)   письмо автору
 
   для: oradev   (21.12.2012 в 12:00)
 

Я хочу сказать этим, что вам рано что либо советовать кому либо, сначала научитесь сами представлять задачи и выгодные пути их решения.

  Ответить  
 
 автор: oradev   (21.12.2012 в 12:10)   письмо автору
 
   для: confirm   (21.12.2012 в 12:07)
 

Я могу вам возразить, но не буду, потому что доказывать никому ничего не хочу, не пишите мне больше. Сделаем так.

  Ответить  
 
 автор: confirm   (21.12.2012 в 12:23)   письмо автору
 
   для: oradev   (21.12.2012 в 12:10)
 

Да не надо доказательств. Ну что это такое - удивляться по поводу применения функций для работы с массивами тогда, когда набор данных и является массивом? О каком представлении задачи вообще в этом случае может идти речь - нет этого представления.

  Ответить  
 
 автор: oradev   (21.12.2012 в 12:54)   письмо автору
 
   для: confirm   (21.12.2012 в 12:23)
 

Ау, кто вам сказал, что я удивлен, я прекрасно знаю что такое массивы, этим вы не актуальны для меня, поверьте, не надо здесь раздувать понятия...
Все что я хотел сказать, что подобную задачу, я не буду решать через ваши решение.

На этом моя писанина закончилась.

  Ответить  
 
 автор: confirm   (21.12.2012 в 13:52)   письмо автору
 
   для: oradev   (21.12.2012 в 12:54)
 

Да решайте как хотите, только не советуйте другим своего решения, оно пагубное, в лоб.

  Ответить  
 
 автор: Lotanaen   (21.12.2012 в 11:09)   письмо автору
 
   для: oradev   (21.12.2012 в 09:56)
 

ну так и вбивать и редактировать можно практически одним и тем же скриптом - пользователю удобней будет сразу всем ученикам оценки выставить и за все даты, а не перезагружать страницу каждый раз

  Ответить  
 
 автор: oradev   (21.12.2012 в 11:33)   письмо автору
 
   для: Lotanaen   (21.12.2012 в 11:09)
 

Расскажите тогда, подробнее как будет вести себя этот скрипт, если пользователь вдруг нечаянно в 5 строку 4 столбца вобьет не оценку, а крякозябру - ?

Словим мы исключение mysql, и что мы скажем пользователю - извини снегерировалось исключение, твоя строка не число, повтори все заново ?

  Ответить  
 
 автор: Lotanaen   (21.12.2012 в 11:36)   письмо автору
 
   для: oradev   (21.12.2012 в 11:33)
 

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

  Ответить  
 
 автор: oradev   (21.12.2012 в 11:40)   письмо автору
 
   для: Lotanaen   (21.12.2012 в 11:36)
 

Милое дело, сижу себе забиваю данные все забил, правда ошибся в самом начале, нажал кнопку сохранить, а тут на тебе ошибка - вы ввели строку а не число, ловим исключение и что дальше ?
Работа на смарку ?

  Ответить  
 
 автор: Lotanaen   (21.12.2012 в 11:52)   письмо автору
 
   для: oradev   (21.12.2012 в 11:40)
 

все корректно введенные данные пишем в базу - проблем я не вижу что бы это сделать

  Ответить  
 
 автор: Valick   (21.12.2012 в 13:32)   письмо автору
 
   для: oradev   (21.12.2012 в 11:40)
 

вы немного загоняетесь :)
даже если при допущенной ошибке мы ничего в базу не пишем (хотя нам ни что не мешает это сделать относительно корректно введенных данных), то можно вернуть форму с введенными значениями и пометкой что нужно исправить

  Ответить  
 
 автор: confirm   (21.12.2012 в 11:07)   письмо автору
 
   для: YF   (20.12.2012 в 21:45)
 

Нет, только на mysql и php этого не сделать, нужен еще и html )
Сделать лучше так:
а) получаете из базы данные за период
б) выводите html таблицу заключенную в тег form, а в ячейки таблицы помещаете элемент input, значение которого равно оценке, а имя отображает массив, ключами в котором должен быть указан ключ связывающий колонку и строку записи в базе (то есть, колонка mysql таблицы и id ученика)
в) эти же данные (колонка mysql таблицы и id ученика) помещаете в сессионный массив
г) при получении формы из сессионного массива вычитаете те ключи, данные которых не изменились (то есть оценка ученика осталась прежней)
д) из сессионного массива формируете запрос для многострочного обновления и делаете запрос к базе.

Такой сценарий оправдан, если число записей выводимых большое, иначе не надо хранить массив в сессии, а просто произвести многострочное обновление по данным пришедшим в форме - при малом числе строк данных вторичная перезапись не измененных данных не так и обременительна, тем более, что это и проверять можно.

  Ответить  
 
 автор: YF   (21.12.2012 в 13:14)   письмо автору
 
   для: confirm   (21.12.2012 в 11:07)
 

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

  Ответить  
 
 автор: confirm   (21.12.2012 в 13:50)   письмо автору
 
   для: YF   (21.12.2012 в 13:14)
 

>а как быть с датами? Необходимо, чтобы даты на экране присутствовали независимо от того есть для этой даты оценка или нет

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

>на данный момент организовано как раз как говорилось выше "редактирование каждой строки данной таблицы"

Учителя не жалко, у которого 50 учеников, к примеру, и который будет вынужден 50 раз ждать перезагрузки страницы, чтобы всем чадам своим оценки выставить?

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

  Ответить  
 
 автор: oradev   (21.12.2012 в 15:53)   письмо автору
 
   для: confirm   (21.12.2012 в 13:50)
 

>Учителя не жалко, у которого 50 учеников, к примеру, и который будет вынужден 50 раз ждать перезагрузки страницы, чтобы всем чадам своим оценки выставить?

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

  Ответить  
 
 автор: confirm   (21.12.2012 в 16:15)   письмо автору
 
   для: oradev   (21.12.2012 в 15:53)
 

Вот что я вам скажу - вы либо понимаете РНР как просто список чего-то в нем содержащего, либо вы понимаете, что это не просто перечень, а инструменты, но тогда понимая это вы не имеете никакого представления где их можно, а главное где их нужно применять.

Я всегда говорил, и вам скажу тоже самое - умные учебники о языке и программировании, это конечно хорошо, но если изучающий язык не может сформулировать задачу, не может найти оптимальное и выгодное решение ее, то такому учащемуся лучше читать "Муму".

Вы не обижайтесь, но вы явно не представляете себе той среды, в которой пытаетесь программировать, не понимаете ее специфики взаимодействия сервер-клиент, а потому и несете чушь несусветную о трудностях проверки данных, о каких-то мифических сложностях в том, что решается просто. Отсюда видимо и ваши предложения как это сделать. И если автор темы говоря, что он в этом не понимает в общем то, и потому делает "по вашему", то это понятно и простительно для него. Для вас же, утверждающему, что вы все прекрасно знаете, ваш подход крайне не оправдан, и говоря о вашем подходе, в ваш адрес уже надо говорить - для вас это не простительно.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования