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

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

 

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

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

тема: Задача N 21. Таблица гостей.
 
 автор: Trianon   (22.05.2007 в 18:01)   письмо автору
 
 

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

Общие требования.
Имена могут содержать абсолютно любые символы.
Хранить имена нужно в БД, в таблице следующего формата:

CREATE TABLE guests (
  id INT( 11 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
  guestname TINTEXT NOT NULL 
  visits INT(11) NOT NULL 
);



Отдельные требования по пунктам
а) ввод в список. форма ввода должна отправлять данные методом POST и не дублировать вызовы при нажатии F5.
Сайт приветствует гостя фразой,

Привет, guest! Вы знаете, что в Вашем имени 5 символов? 

Нас уже посетили:

и далее выводит список.

Список должен выглядеть как таблица cо строками

| N | Гость |визит|  x  |
----------------------------
| 1 | Name1 |  3  | del |
| 2 | Name2 |  1  | del |
| 3 | Name3 |  5  | del |
и т.д.

первое число (N) - просто графа для нумерации строк в списке. Последовательной непрерывной нумерации.
второе число (визит) - количество посещений этого гостя.
Строки (Name) и соответствующее слово (del) должны быть оформлены в виде ссылок:
Name - ссылкой на скрипт поиска имени в списке, а del - ссылкой на скрипт удаления имени.

В конце списка должна быть форма поиска пункта (б)

б) поиск в списке. форма должна отправлять искомое имя методом GET (как большинство поисковиков) и обрабатываться тем же скриптом, что и ссылки имен из таблицы.

в) По ссылке удаления должно всплывать alert-окно подтверждения с вопросом

Name! Вы действительно хотите вычеркнуть себя?
при утвердительном ответе строка уходит из таблицы.



Уровень сложности этой задаче, надеюсь, поставит cheops - я затрудняюсь с оценкой, а у него опыт.

   
 
 автор: cheops   (22.05.2007 в 22:54)   письмо автору
 
   для: Trianon   (22.05.2007 в 18:01)
 

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

   
 
 автор: Drago   (22.05.2007 в 23:56)   письмо автору
 
   для: Trianon   (22.05.2007 в 18:01)
 


CREATE TABLE guests ( 
  id INT( 11 ) NOT NULL AUTO_INCREMENT PRIMARY KEY , 
  guestname TINYINT NOT NULL  
  visits INT(11) NOT NULL  
);


Поле guestname типа TINYINT, это так и задумано? Там, кстати, запятой, в конце строки еще не хватает. :)

И еще:
Есть ли ограничение на кол-во символов в имени?
Где должно быть поле ввода своего имени? Там же, где и форма поиска, после таблицы?

   
 
 автор: cheops   (23.05.2007 в 00:09)   письмо автору
 
   для: Drago   (22.05.2007 в 23:56)
 

Есть такое дело, поправил в оригинальном тексте задачи

http://www.softtime.ru/info/task.php?id_article=110

   
 
 автор: Trianon   (23.05.2007 в 00:34)   письмо автору
 
   для: Drago   (22.05.2007 в 23:56)
 

>Поле guestname типа TINYINT, это так и задумано?
TINYTEXT конечно.

>Там, кстати, запятой, в конце строки еще не хватает. :)
Да... увы, всего сразу не вылижешь.

>И еще:
>Есть ли ограничение на кол-во символов в имени?
Скрипт должен устойчиво работать на той длине имени, которая помещается в поле таблицы. То есть на 255 символах. Скрипт может отвергать более длинные имена.

>Где должно быть поле ввода своего имени? Там же, где и форма поиска, после таблицы?
На странице, выводимой скриптом, когда он вызван без параметров.

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

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

   
 
 автор: Artem S.   (23.05.2007 в 16:45)   письмо автору
 
   для: Trianon   (23.05.2007 в 00:34)
 

1. Удалять можно только себя? Скрипт должен проверять кто удаляет запись?
2. Вести учет посещений пользователя guest?

   
 
 автор: Trianon   (23.05.2007 в 16:57)   письмо автору
 
   для: Artem S.   (23.05.2007 в 16:45)
 

guest только пример.
удалять можно кому угодно кого угодно.
задача - не на аутентификацию. А лишь на корректное обращение с данными.
На методику аутентификации надо будет отдельную задачку придумать.

   
 
 автор: mr Bin   (23.05.2007 в 21:49)   письмо автору
 
   для: Trianon   (23.05.2007 в 16:57)
 

Trianon, я вот не совсем понимаю.
Задачки здесь даются авторами, у которых уже есть свой готовый вариант или он хочет посмотреть на варианты пользователей?

   
 
 автор: Trianon   (23.05.2007 в 22:14)   письмо автору
 
   для: mr Bin   (23.05.2007 в 21:49)
 

Регламент здесь устанавливает cheops. Он же придумал большинство задач. Некоторые были предложены посетителями.

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

Есть ли у меня готовый вариант?
Хороший вопрос. Честно отвечу - нет.
У меня есть четкое представление, как его писать.
Наверное напишу. Если аврала не возникнет внезапно.

   
 
 автор: mr Bin   (23.05.2007 в 22:27)   письмо автору
 
   для: Trianon   (23.05.2007 в 22:14)
 

Ну то что Вы напишете - сомневаться не приходится. Спасибо за ответ.

   
 
 автор: cheops   (24.05.2007 в 00:02)   письмо автору
 
   для: mr Bin   (23.05.2007 в 21:49)
 

Задачки здесь задаются любым желающим (лучше конечно с согласованием с администрацией, чтобы её оформить как следует, при необходимости отредактировать), но не для того, чтобы получить готовое решение, а чтобы продемонстрировать приём и помочь другим с его освоением (из постановки задачи сразу видно, чего автор добиться хочет). Автор конечно должен иметь свой вариант решения, на тот случай если никто решать не будет... я и сам будут решать задачу если ответов не будет или не будет ни одного правильного ответа (правда один ответ уже предложен - правильность до публикации правда никогда не смотрим). Цель задач не получить ответ, а заострить внимание на проблем (стандартной или не очень).

   
 
 автор: Trianon   (24.05.2007 в 11:31)   письмо автору
 
   для: cheops   (24.05.2007 в 00:02)
 

> на тот случай если никто решать не будет... я и сам будут решать задачу если ответов не будет или не будет ни одного правильного ответа (правда один ответ уже предложен - правильность до публикации правда никогда не смотрим).

Один ответ - это мало.....

Игорь.... Я вчера (точнее - сегодня ночью :), прочитав Ваш пост, устыдился и стал решать свою же задачу. И вот какая петрушка получается.... задача-то оказалась неожиданно куда сложней, чем представлялось. Точнее даже не сложной, а насыщенной.

Помнится, время, отводимое на решение на закате задачного бума было - неделя. Может быть стоит продлить срок до конца недели хотя бы?
Мало ли, заинтересуется еще кто....
А?

   
 
 автор: mr Bin   (24.05.2007 в 12:19)   письмо автору
 
   для: Trianon   (24.05.2007 в 11:31)
 

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

   
 
 автор: cheops   (24.05.2007 в 12:30)   письмо автору
 
   для: mr Bin   (24.05.2007 в 12:19)
 

Идёт - победитель (определяется Trianon и мной) получает месяц бесплатного хостинга на st-host.ru.

   
 
 автор: cheops   (24.05.2007 в 12:25)   письмо автору
 
   для: Trianon   (24.05.2007 в 11:31)
 

Хм... собственно я так и увеличил время до 1 июня, т.е. остаётся неделя, начиная с сегодняшнего числа или вы предлагаете до 3 июня продлить срок приёма ответов?

   
 
 автор: Trianon   (24.05.2007 в 12:35)   письмо автору
 
   для: cheops   (24.05.2007 в 12:25)
 

нет :) я просто не видел про 1 июня. :)
видел "в ночь с четверга на пятницу" ... э...золушка остается бухать с мышами в тыкве.

Полагаю, до конца месяца - с лихвой хватит.

   
 
 автор: Drago   (24.05.2007 в 17:18)   письмо автору
 
   для: Trianon   (24.05.2007 в 12:35)
 

Ну вот так всегда... не успел отправить ответ, как время на решение увеличили, да еще и приз выделили. :))

   
 
 автор: Trianon   (24.05.2007 в 17:28)   письмо автору
 
   для: Drago   (24.05.2007 в 17:18)
 

Ответов от каждого имени можно слать несколько.
Традиционно рассматривается и оценивается последний.
Так что еще не вечер :)

   
 
 автор: Drago   (24.05.2007 в 17:46)   письмо автору
 
   для: Trianon   (24.05.2007 в 17:28)
 

Ну это другое дело :)

Кстати, такой вопрос: Было сказано, что можно использовать абсолютно любые символы. А как на счет пробелов в начале и в конце? А также, имен состоящих только из пробелов? Имхо, это лишнее. Можно ли использовать в этом случае функцию trim()?

   
 
 автор: Trianon   (24.05.2007 в 18:12)   письмо автору
 
   для: Drago   (24.05.2007 в 17:46)
 

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

То-то...

   
 
 автор: cheops (из кафе)   (24.05.2007 в 17:58)
 
   для: Drago   (24.05.2007 в 17:18)
 

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

   
 
 автор: DEM   (24.05.2007 в 23:40)   письмо автору
 
   для: Trianon   (22.05.2007 в 18:01)
 

Хм... заинтриговало сообщение НА ПЕРВЫЙ ВЗГЛЯД ЛЕГКО, А ПОТОМ ОКАЗЫЫАВАЕТСЯ СЛОЖНО :) Надо будет попробовать, интересно смогу решить или нет )))

ЗЫ. два вопроса:
1. До кокого числа принимаются ответы
2. Вы бы не могли более точно объяснить как присылать ответ (не просто же взять, создать тему и всё... хотя ))) )

   
 
 автор: Unkind   (24.05.2007 в 23:51)   письмо автору
 
   для: DEM   (24.05.2007 в 23:40)
 

Чтобы получить ответы на Ваши вопросы, надо почитать эту тему.

   
 
 автор: cheops   (24.05.2007 в 23:52)   письмо автору
 
   для: DEM   (24.05.2007 в 23:40)
 

Ответы принимаются до 1 июня 2007 года (т.е. времени примерно неделя).
Оставлять ответы следует в специальной форме по ссылке http://www.softtime.ru/task/addthemeform.php?id_task=21 - во время X (т.е. в ночь на 1 июня 2007 года) они все будут автоматически размещены в этой ветке форума, после чего начнётся их оценка.

   
 
 автор: DEM   (25.05.2007 в 11:30)   письмо автору
 
   для: Trianon   (22.05.2007 в 18:01)
 

И наверное последний вопрос:
То есть, если я например вычеркну себя из списка, а потом зайду, то у меня визиты при следуюющем заходе станут равны 0? Просто как-то запутался)))

   
 
 автор: Trianon   (25.05.2007 в 11:35)   письмо автору
 
   для: DEM   (25.05.2007 в 11:30)
 

ну - по идее - единице . Вы же зашли повторно.

   
 
 автор: DEM   (25.05.2007 в 12:55)   письмо автору
 
   для: Trianon   (22.05.2007 в 18:01)
 

И еще... Ненмого не правильно создана таблица:

CREATE TABLE `guests` (
  `id` int(11) NOT NULL auto_increment,
  `guestname` varchar(255) NOT NULL default '0',
  `visits` int(11) NOT NULL default '0',
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=10 ;

Так лучше... Так как в вашей в имени гостя могут быть только цифры и после "guestname TINYINT NOT NULL" нет запятой .
ДОБАВЛЕНО:
Упс... только прочитал, что ошибку уже аншли ))) Соррь...
И у меня еще пара вопросов :)
1) На сколько примерно строк должен быть код? А то у меня уже перевалил за 100, но уже скоро будет готово )))
2) Я могу занести сколько угодно гостей в таблицу или только одного? И если только одного, то могу ли я удалять других?

   
 
 автор: Trianon   (25.05.2007 в 13:15)   письмо автору
 
   для: DEM   (25.05.2007 в 12:55)
 

Эту ошибку поправил и я и cheops (23.05.2007 в 00:09) в заданиях.
Так что символы - еще раз подчеркиваю - любые.
Можно говорить о том, что varchar(255) лучше или хуже tinytext , но различия у них минимальны.
кодовую страницу я специально не навязывал, вдруг кому-то проще будет работать не в cp1251, а в utf8.

Прямых ограничений на размер кода нет.
Косвенно, естественно, на читабельность будет влиять.
Могу сказать, что завидую Вам в этом пункте, потому что у меня около 170, а в него еще коментарии вставлять... Это при там что я пишу возможно более лаконично.

Как это одного?
Еще раз.
Подходит человек к компу - пишет имя.
Другой подойдет - свое напишет. и так далее.
Два раза подошел - два визита.
Вытер имя - остались только остальные.
И повторяю, задача не на аутентификацию. Никаких логинов, паролей, сессий, и прочего в ней нет. Только то что написано.

И этого хватает за глаза, и как оказалось, по самые яйцы.

   
 
 автор: DEM   (25.05.2007 в 13:22)   письмо автору
 
   для: Trianon   (25.05.2007 в 13:15)
 

Я и забыл что комментарии нужны )))

ЗЫ. Вопрос отпал....

ЗЗЫ. и вот еще один вопрос назрел :) visits обновляется только по кнопке ЗАЙТИ СНОВА?

   
 
 автор: DEM   (25.05.2007 в 13:31)   письмо автору
 
   для: Trianon   (25.05.2007 в 13:15)
 

Если нет сессий, то как можно напистаь приветствие с именем? Хранить имя в хидден поле, что ли)))

   
 
 автор: DEM   (25.05.2007 в 14:00)   письмо автору
 
   для: DEM   (25.05.2007 в 13:31)
 

Отправил своё решение, надеюсь ничего не забыл туда включить )))

И снова вопрос ))) Если я например захочу изменить своё решение, то мне просто надо будет прислать новое и тогда старое не будет проверяться (ну или просто заменится)?

   
 
 автор: Trianon   (25.05.2007 в 14:29)   письмо автору
 
   для: DEM   (25.05.2007 в 14:00)
 

(24.05.2007 в 17:28)

Более четко, чем это сделал cheops (24.05.2007 в 17:58), я на этот вопрос ответить не могу.

   
 
 автор: Trianon   (30.05.2007 в 19:28)   письмо автору
 
   для: Trianon   (25.05.2007 в 14:29)
 

Долго пытался отправить ответ через форму.
Виснет.
Результат, конечно, не понять.
Соответственно там
- либо один ответ (как-то неверится)
- либо куча совершенно одинаковых
- либо ни одного.
Поскольку ни на приз, ни на место я не претендую, эта проблема меня особо не волнует...
Если не получится сегодня отправить ночью, завтра прикреплю сюда zip-ом.

UPD. Из дому ответ таки ушел. Вроде как.

   
 
 автор: Artem S.   (30.05.2007 в 23:31)   письмо автору
 
   для: Trianon   (30.05.2007 в 19:28)
 

Отправил, решил тоже поучаствовать =P

   
 
 автор: Trianon   (30.05.2007 в 23:37)   письмо автору
 
   для: Artem S.   (30.05.2007 в 23:31)
 

О! В бой пошли ветераны! :)))

   
 
 автор: cheops   (31.05.2007 в 02:17)   письмо автору
 
   для: Trianon   (30.05.2007 в 19:28)
 

>UPD. Из дому ответ таки ушел. Вроде как.
Да, ответ зарегистрировался.

   
 
 автор: sms-send   (31.05.2007 в 23:41)   письмо автору
 
   для: cheops   (31.05.2007 в 02:17)
 

Надеюсь успел?

   
 
 автор: cheops   (01.06.2007 в 00:14)   письмо автору
 
   для: sms-send   (31.05.2007 в 23:41)
 

Да, успели.

   
 
 автор: DEM   (01.06.2007 в 00:53)   письмо автору
 
   для: Trianon   (22.05.2007 в 18:01)
 

Вот и первое, вот и вывешены задания )))

Будем ждать мнения судей )))

   
Rambler's Top100
вверх

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