Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Создания опроса
Форумы портала PHP.SU » PHP » SQL и Архитектура БД » Создания опроса

Страниц (1): [1]
 

1. Anton63 - 13 Июля, 2009 - 10:50:36 - перейти к сообщению
Задумка, в общем, такая:
Это чё то типо ТОР10. например 10 самых богатых людей, 10 самых быстрых машин и т.д. Есть форма для заполнения(Её заполнять могут только зарегистрированные пользователи, значит нужно прослеживать сессию пользователя и данные о нике пользователя берутся из таблицы users в БД).

Пример(форма):
Автор: Billo
Заголовок: Самые большие города мира
Ответ 1: Москва
Ответ 2: Лондон
Ответ 3: Нью-Йорк
Ответ 4: Самара
Ответ 5: Париж
"Отправить"


Так вот... после заполнения формы и нажатия на кнопку "Отправить" Этот опрос добавляется в БД со множеством подобных опросов(В каждом опросе 5 вариантов ответа)
Незарегистрированный пользователь может смотреть только результаты.

Результат:
Самые большие города мира
Автор: Billo; 26.05.2009
1. Москва
2. Лондон
3. Нью-Йорк
4. Самара
5. Париж
Комментарии

А администратор сайта видит это так(R- редактировать X-удалить):

Админка:
Самые большие города мира R X
Автор: Billo; 26.05.2009
1. Москва R
2. Лондон R
3. Нью-Йорк R
4. Самара R
5. Париж R
Комментарии R X

Значит для админа сайта тоже надо проследить сессию и выдать результат опроса с возможностью его редактирования.
Подскажите пожалуйста как структурировать БД для этой задачи.
В частности меня интересует какие таблицы нужно создать, как их связать и какие поля там должны быть... И как лучше хранить данные с ответами в таблице(Ответ 1, Ответ 2...Ответ 5)? При условии, что их потом надо будет редактировать... и оптимизировать под поиск по сайту...

Я думаю что то таблица должна быть примерно такая:

create table answers (
id int(10) unsigned NOT NULL auto_increment,
nick varchar(50) NOT NULL,
datetime datetime DEFAULT '0000-00-00 00:00:00' NOT NULL,
head varchar(150),
answer1 varchar(50),
answer2 varchar(50),
answer3 varchar(50),
answer4 varchar(50),
answer5 varchar(50),
comment varchar(300)?
primary key (id)
);

id - счётчик, nick берётся из таблицы users, datetime - дата и время(вставляется автоматически при создании опроса), answer - это ответы, comment - это комментарии(они берутся из таблицы comments)...

Вот... значит нам нужны таблицы answers, users и comments... Ещё вопрос... как их связать?...И ещё вопрос... Как должна выглядеть таблица comments?
(Добавление)
Я создам три таблицы...
Первая с вопросом и ответами...т.к. создатель опроса сам заполняет все 5 полей с ответами(все поля обязательны для заполнения).
create table answers (
id_ans int(10) unsigned NOT NULL auto_increment,
nick varchar(50) NOT NULL,
date date NOT NULL,
head varchar(150) NOT NULL,,
answer1 varchar(50) NOT NULL,,
answer2 varchar(50) NOT NULL,,
answer3 varchar(50) NOT NULL,,
answer4 varchar(50) NOT NULL,,
answer5 varchar(50) NOT NULL,,
primary key (id_ans)
);

Вторая таблица с комментариями... в этой таблице будут храниться комментарии ко всем опросам. Т.е. связываться таблицы будут через id_ans. При оставлении комментария будет присваиваться id_ans такой же как и в таблице answers. А при запросе комментариев к опросу будут выбираться все комментарии с одинаковым id_ans.
create table comments (
id_com int(10) unsigned NOT NULL auto_increment,
nick varchar(50) NOT NULL,
date date NOT NULL,
comment varchar(300) NOT NULL,
id_ans int(10),
primary key (id_com)
);


Как вам такой вариант???

И ещё вопрос... при авторизации пользователя для него создаётся сессия... и при создании опроса или комментария можно ли из этой сессии вытянуть его ник для полей nick в таблицах?

Третья таблица - это users... в ней будут храниться зарегистрированные пользователи... но это уже из другой оперы...
2. Anton63 - 13 Июля, 2009 - 12:55:23 - перейти к сообщению
Никто со структурой БД не поможет что ли? Однако
3. SAD - 13 Июля, 2009 - 14:06:42 - перейти к сообщению
Anton63 пишет:
Никто со структурой БД не поможет что ли? Однако

можно вытянуть, но тебе ник и все остальное нужно в сессии хранить
$_SESSION['...']=$nick;
и вытягивать также
база вроде норм, сам справишься
4. Viper - 13 Июля, 2009 - 14:43:56 - перейти к сообщению
только как мне кажется поле comment типа varchar в данном случае не есть гуд. у вас либо лимит должен быть меньше, либо если комментарии будут большей длинны то лучше text или blob
5. Anton63 - 14 Июля, 2009 - 08:19:28 - перейти к сообщению
Viper пишет:
только как мне кажется поле comment типа varchar в данном случае не есть гуд. у вас либо лимит должен быть меньше, либо если комментарии будут большей длинны то лучше text или blob


Спасибо, учту...

SAD пишет:
можно вытянуть, но тебе ник и все остальное нужно в сессии хранить
$_SESSION['...']=$nick;
и вытягивать также
база вроде норм, сам справишься


Ага, с сессиями я вроде уже разобрался... насчёт базы порадовал... буду справляться... Хорошо
(Добавление)
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. $date = date(Y);
  3. echo "
  4. <html>
  5. <head>
  6. </head>
  7. <body>
  8. <form method='POST' action='work_registration.php'>
  9. <table>
  10. <tr><td>Дата рождения:</td><td>
  11. <select name='birthday'>
  12. ";
  13. for($i=$date-60; $i<=$date; $i++){
  14. echo "<option value='.$i.'>";
  15. }
  16. echo "
  17. </td></tr>
  18. </table>
  19. </form>
  20. </body>
  21. </html>
  22. ";
  23. ?>


Почему в не работает выпадающий список? В качестве результата, в выпадающем списке он мне выдаёт ";} echo "
6. Viper - 14 Июля, 2009 - 10:29:37 - перейти к сообщению
Anton63 пишет:
Почему в не работает выпадающий список? В качестве результата, в выпадающем списке он мне выдаёт ";} echo "


ну у вас для начала не закрыт список

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. $date = date(Y);
  3. echo '<html>
  4.         <head></head>
  5.         <body>
  6.         <form method="POST" action="work_registration.php">
  7.         <table>
  8.                 <tr>
  9.                         <td>Дата рождения:</td>
  10.                         <td><select name="birthday">
  11.                         <option selected value="'.$value.'">текущее значение</option>';
  12.                         for ($i=$date-60; $i<=$date; $i++) {
  13.                                 echo '<option value="'.$i.'">'.$date.'</option>';
  14.                         }
  15.                         echo '</select></td>
  16.                 </tr>
  17.         </table>
  18.         </form>
  19.         </body>
  20. </html>';
  21. ?>

 

Powered by ExBB FM 1.0 RC1