PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи

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

> Найдено сообщений: 19
naruto Отправлено: 07 Февраля, 2012 - 11:39:23 • Тема: Вывод опроса с БД • Форум: Работа с СУБД

Ответов: 10
Просмотров: 3846
Panoptik пишет:
код писал прям на форуме, поэтому ошибки не исключены. логику примерную я выложил, остальное дело техники

Спасибо Вам Огромное. Я в шоке как можно сразу написать сходу такое на форуме) видимо опыт. Ошибку нашел, вместо поля answer было answers)) Все прекрасно выводит! Если появятся вопросы в дальнейшей работе по этой задаче, стоит сюда писать или новую тему создавать?
naruto Отправлено: 07 Февраля, 2012 - 09:50:30 • Тема: Вывод опроса с БД • Форум: Работа с СУБД

Ответов: 10
Просмотров: 3846
Спасибо большое, многое уяснилось, только не могу понять почему не выводит ответы?
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. include_once('startup.php');
  4. startup();
  5. //
  6. // Список всех статей
  7. //
  8. //достаем опросы
  9. //здесь опускается проверка опроса на наличие в нем вопросов...
  10. function get_poll() {
  11. $query = "SELECT `id`,`name` FROM `poll` WHERE `status` = 'active'";
  12. $result = mysql_query($query);
  13. if(mysql_num_rows($result)) {
  14.   while($row = mysql_fetch_row($result)) {
  15.     $res[] = $row;
  16.   }
  17. } else {
  18.   $res = false;
  19. }
  20. return $res;
  21. }
  22. //выводим опросы
  23. function print_polls($poll) {
  24.  if($poll === false) {
  25.     echo  "<p>У нас нет опросов</p>";
  26.  } else {
  27.    foreach($poll as $row) {
  28.      echo "<p><a href='?poll=".$row[0]."'>".$row[1]."</a></p>";
  29.    }
  30.  }
  31. }
  32. //выводим опрос
  33. function print_poll($poll) {
  34.   $query = "SELECT `id`,`name` FROM `poll` WHERE `id`=".$poll;
  35.   $result = mysql_query($query);
  36.   if(mysql_num_rows($result)) {
  37.     $row = mysql_fetch_row($result);
  38.     echo "<p>Опрос: ".$row[1]."</p>";
  39.     print_questions($row[0]);
  40.   } else {
  41.     echo "<p>А нет такого опроса!</p>";
  42.   }
  43. }
  44. //достаем вопросы опроса
  45. function get_questions($poll) {
  46. $query = "SELECT `id`,`name`,`type` FROM `question` WHERE `poll_id` = ".$poll;
  47. $result = mysql_query($query);
  48. if(mysql_num_rows($result)) {
  49.   while($row = mysql_fetch_row($result)) {
  50.     $res[] = $row;
  51.   }
  52. } else {
  53.   $res = false;  
  54. }
  55. return $res;
  56. }
  57.  
  58. //достаем ответы вопроса
  59. function get_answers($question) {
  60.   $query = "SELECT `id`,`name` FROM `answers` WHERE `question_id` = ".$question;
  61.   $result = mysql_query($query);
  62.   if(mysql_num_rows($result)) {
  63.     while($row = mysql_fetch_row($result)) {
  64.       $res[] = $row;
  65.     }
  66.   } else {
  67.     $res = false;
  68.   }
  69.   return $res;
  70. }
  71. //выводим вопрос
  72. function print_questions($poll) {
  73.   $result = get_questions($poll);
  74.   if($result === false) {
  75.     echo "<p>Тут вопросов нет</p>";
  76.   } else {
  77.     foreach($result as $question) {
  78.       echo "<p>Вопрос: ".$question[1]."</p>";
  79.       print_answers($question[0],$question[2]);
  80.     }
  81.   }
  82. }
  83. //выводим ответы
  84. function print_answers($question,$type) {
  85.     $answers = get_answers($question);
  86.     if($answers === false) {
  87.       echo "<p>Ответов не видать</p>";
  88.     } else {
  89.       if($type == 'radio') {
  90.         foreach($answers as $answer) {
  91.           echo "<p><input type='radio' name='answer_".$question."' value='".$answer[0]."' />".$answer[1]."</p>";
  92.         }
  93.       }
  94.       if($type == 'chek') {
  95.         foreach($answers as $answer) {
  96.           echo "<p><input type='checkbox' name='answer_".$question."_".$answer[0]."' />".$answer[1]."</p>";
  97.         }
  98.       }
  99.     }
  100.    
  101. }
  102. //выводим ссылки на опросы
  103. $poll = get_poll();
  104. print_polls($poll);
  105.  
  106. if($poll_id=(int)$_GET['poll']) {
  107.   print_poll($poll_id);
  108.  
  109. }
  110.  
  111.  
  112. ?>
  113.  
  114.  


Там в одном месте добавил забытую закрывающую скобку и return $res; Не пойму почему не дергает ответы
naruto Отправлено: 06 Февраля, 2012 - 20:23:05 • Тема: Вывод опроса с БД • Форум: Работа с СУБД

Ответов: 10
Просмотров: 3846
Panoptik пишет:
у вас вопросы все сразу выводятся или один какой-нибудь(текущий) ?

надо как - будет например в базе 10 опросов. Выводится список где нибудь названий всех опросов, и при нажатии на какой нибудь выведется опрос со всеми его вопросами и их ответами. Ну как Тест, один за другим вопросы с ответами, а в шапке название опроса. Пока я ввел ручками один опрос с тремя вопросами и с ответами на них. Еще как то в цикле который будет выводить все это надо учесть radio или chek выводит в ответах. Ну и по сути опрос может быть активный, архивный и черновик.
naruto Отправлено: 06 Февраля, 2012 - 20:03:57 • Тема: Вывод опроса с БД • Форум: Работа с СУБД

Ответов: 10
Просмотров: 3846
Доброго времени суток! Вообще начал делать скрипт проведения опроса
Создал три таблицы и заполнил минимальными данными
CODE (SQL):
скопировать код в буфер обмена
  1.  
  2.  
  3. CREATE TABLE IF NOT EXISTS `answer` (
  4.   `id` int(11) NOT NULL AUTO_INCREMENT,
  5.   `name` varchar(255) DEFAULT NULL,
  6.   `question_id` int(11) DEFAULT NULL,
  7.   `vote_count` int(11) DEFAULT NULL,
  8.   PRIMARY KEY (`id`)
  9. ) ENGINE=InnoDB  DEFAULT CHARSET=cp1251 AUTO_INCREMENT=13 ;
  10.  
  11.  
  12. INSERT INTO `answer` (`id`, `name`, `question_id`, `vote_count`) VALUES
  13. (1, '5', 1, 1),
  14. (2, '7', 1, 0),
  15. (3, '9', 1, 0),
  16. (4, '12', 1, 0),
  17. (5, '11', 2, 0),
  18. (6, '22', 2, 0),
  19. (7, '25', 2, 1),
  20. (8, 'Алгебра', 3, 0),
  21. (9, 'Физика', 3, 1),
  22. (10, 'Литра', 3, 0),
  23. (11, 'История', 3, 1),
  24. (12, 'Технология', 3, 0);
  25.  
  26.  
  27. CREATE TABLE IF NOT EXISTS `poll` (
  28.   `id` int(11) NOT NULL AUTO_INCREMENT,
  29.   `name` varchar(255) DEFAULT NULL,
  30.   `status` enum('active','close','rough') DEFAULT 'close',
  31.   PRIMARY KEY (`id`)
  32. ) ENGINE=InnoDB  DEFAULT CHARSET=cp1251 AUTO_INCREMENT=2 ;
  33.  
  34.  
  35. INSERT INTO `poll` (`id`, `name`, `status`) VALUES
  36. (1, 'Первый опрос', 'active');
  37.  
  38.  
  39. CREATE TABLE IF NOT EXISTS `question` (
  40.   `id` int(11) NOT NULL AUTO_INCREMENT,
  41.   `name` text,
  42.   `type` enum('radio','chek') DEFAULT 'radio',
  43.   `poll_id` int(11) DEFAULT NULL,
  44.   PRIMARY KEY (`id`)
  45. ) ENGINE=InnoDB  DEFAULT CHARSET=cp1251 AUTO_INCREMENT=4 ;
  46.  
  47.  
  48. INSERT INTO `question` (`id`, `name`, `type`, `poll_id`) VALUES
  49. (1, 'Сумма числе 2+3', 'radio', 1),
  50. (2, 'Произведение чисел 5*5', 'radio', 1),
  51. (3, 'Какой у Вас любимый предмет?', 'chek', 1);
  52.  
  53.  


файл подключения к БД startup.php
PHP:
скопировать код в буфер обмена
  1.  
  2. function startup()
  3. {
  4.         // Настройки подключения к БД.
  5.         $hostname = 'localhost';
  6.         $username = 'root';
  7.         $password = '';
  8.         $dbName = 'poll';      
  9.        
  10.         // Подключение к БД.
  11.         mysql_connect($hostname, $username, $password) or die('No connect with data base');
  12.         mysql_select_db($dbName) or die('No data base');               
  13. }
  14.  


Файл модели model.php

PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. function poll_ans()
  4. {
  5.         // Запрос.
  6.         $query = "SELECT question.name AS question, answer.name AS answer
  7.         FROM question
  8.                         LEFT JOIN answer ON answer.question_id = question.id";
  9.         $result = mysql_query($query);
  10.                                                        
  11.         if (!$result)
  12.                 die(mysql_error());
  13.        
  14.         // Извлечение из БД.
  15.         $n = mysql_num_rows($result);
  16.         $poll= array();
  17.  
  18.         for ($i = 0; $i < $n; $i++)
  19.         {
  20.                 $row = mysql_fetch_assoc($result);             
  21.                 $poll[] = $row;
  22.         }
  23.        
  24.         return $poll;
  25. }
  26.  


Ну и собственно index.php
PHP:
скопировать код в буфер обмена
  1.  
  2.  
  3. <?PHP
  4. include_once('startup.php');
  5. include_once('model.php');
  6. startup();
  7. $poll_ans = poll_ans();
  8.  
  9. ?>
  10.  
  11. <p>
  12. <? foreach ($poll_ans as $polls): ?>
  13.                 <?=$polls['question']?>
  14. <? foreach ($poll_ans as $polls): ?>
  15.                 <h3>
  16.                 <input type="radio" name="answer" value="a<?=$polls['question_id']?>"><?=$polls['answer']?><Br>
  17.                 </h3>
  18.                 <? endforeach ?>
  19. <? endforeach ?>
  20.  

Как правильно вывести опрос на страницу? тоесть чтобы в шапке имя опроса, затем вопрос-ответы, вопрос-ответы. Это же по идеи автоматически должно будет генерироваться запросом с БД при выборе нужного опроса(id), и выводится на страницу. Какой то бред foreach'ем попробовал сделать, короче каша в голове( помогите пожалуйста, как правильно делается

Страниц (2): « 1 [2]
Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB