За последние 24 часа нас посетили 69057 программистов и 10326 роботов. Сейчас ищут 2990 программистов ...

Как сделать вопросник в рамках одной страницы php

Тема в разделе "PHP для новичков", создана пользователем AlexPebody, 27 ноя 2008.

  1. AlexPebody

    AlexPebody Активный пользователь

    С нами с:
    14 янв 2007
    Сообщения:
    247
    Симпатии:
    0
    ауууууууууу, люди....... как все в одно связать??? :)
     
  2. kostyl

    kostyl Guest

    короче разбирайся сам... тут не скорая помощь человеку, который хочет чтото сделять не разбираясь самому, а только требует, чтобы его работу сделал ктото другой. Совесть надо иметь господин лентяй.
    ps:http://php.ru/forum/viewtopic.php?t=14763
     
  3. AlexPebody

    AlexPebody Активный пользователь

    С нами с:
    14 янв 2007
    Сообщения:
    247
    Симпатии:
    0
    круто! :) а причем тут совесть и пр. ну не шарю я в пхп, а сделать ужно, протыкался весь день с кодом,
    ничего так и не заработало как мне нужно, вот и прошу народ помочь, даже если и не бусплатно кто то скажет, без вопросов! а такие как вы сударь вечно портят тему своими заумными фразами и пр. выражениями!

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

    несомненно, есть вещи в которых и вы не разбираетесь абсолютно, но это не запрещает вам нормально попросить объяснить вам или сделать скрипт для ваш и по вашей просьбе, а?!
     
  4. kostyl

    kostyl Guest

    посчитай сколько ты раз спроси чтото типа "черкните мне полный скрипт" и сколько раз тебе ответили чтото типа "вот чувак, НА... это именно то, что ты хотел, копируй в файл и все пашет, держи" - и подумай, если нет ответа, а ты все спрашиваешь, то не "портишь" ли ее ты... Покупать скрипт я тебя не заставляю. Если ты хочешь купить - на форуме есть для этого разделhttp://php.ru/forum/viewforum.php?f=4. Готовые решения можно найти в другом разделе http://php.ru/forum/viewforum.php?f=27, а в этом редко бывают так скажем "полнофункциональные подсказки"
     
  5. Adamant

    Adamant Активный пользователь

    С нами с:
    8 апр 2007
    Сообщения:
    234
    Симпатии:
    0
    Адрес:
    Казахстан г.Тараз
    Мне понравился вопрос, и я написал полный скрипт:

    quests.ini
    (можно писать практически неограниченное количество вопросов и вариантов ответа на них)
    Код (Text):
    1.  
    2. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    3. ; Это файл конфигурации
    4. ; Используется файлом  questionnaire.php
    5. ;
    6. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    7. ;  Перечень вопросов;
    8. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    9. ; Номер вопроса
    10. [1]
    11. quest_n=1
    12. ;  Вопрос
    13. content=Что такое PHP
    14.  
    15. ;  Варианты ответов
    16. re1=Скриптовый язык программирования
    17. re2=Компилируемый язык программирования
    18. re3=Язык разметки гипертекста
    19. re4=Моторная лодка
    20. re5=Метод силовой тренировки
    21.  
    22. ; Значение
    23. v1=11
    24. v2=12
    25. v3=13
    26. v4=14
    27. v5=15
    28.  
    29. ;; Правильное значение
    30. valtrue=11
    31.  
    32. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    33. [2]
    34. quest_n=2
    35.  
    36. content=Что такое константа
    37.  
    38. re1=Функция
    39. re2=Идентификатор простого значения
    40. re3=Тип переменной
    41. re4=Область видимости
    42. re5=Метод силовой тренировки
    43.  
    44. v1=21
    45. v2=22
    46. v3=23
    47. v4=24
    48. v5=25
    49.  
    50. ;; Правильное значение
    51. valtrue=22
    52.  
    53. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    54. [3]
    55. quest_n=3
    56.  
    57. content=Что такое 3
    58.  
    59. re1=3
    60. re2=4
    61. re3=5
    62. re4=6
    63. re5=7
    64.  
    65. v1=31
    66. v2=32
    67. v3=33
    68. v4=34
    69. v5=35
    70.  
    71. ;; Правильное значение
    72. valtrue=31
     
  6. Adamant

    Adamant Активный пользователь

    С нами с:
    8 апр 2007
    Сообщения:
    234
    Симпатии:
    0
    Адрес:
    Казахстан г.Тараз
    questionnaire.php
    PHP:
    1.  
    2. <?php
    3.  
    4. // кличество задаваемых вопросов
    5. $quest_set  = 2;
    6. // страница куда перенаправить в случае правильных ответов
    7. $file_true  = 'true.php';
    8. // страница куда перенаправить в случае неправильных ответов
    9. $file_false = 'false.php';
    10. $ini_file   = 'quests.ini';
    11.  
    12.  
    13. // заголовок HTML - страницы
    14. $header = <<< EOF
    15. <html>
    16.   <head>
    17.     <meta http-equiv="cache-control" content="no-cache">
    18.     <meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
    19.     <title>Анкета</title>
    20.  
    21.     <style>
    22.         ...
    23.     </style>
    24.   </head>
    25.  
    26.     <body>
    27. EOF;
    28.  
    29. // если сессия только стартует
    30. if (!isset($_SESSION['quest_ini_arr'])) {
    31.     // считываем файл с вопросами/ответами
    32.     $ini_file_arr = parse_ini_file($ini_file, true);
    33.  
    34.     // извлекаем заданное число случайный ключей массива
    35.     $ini_file_key = array_rand($ini_file_arr, $quest_set);
    36.  
    37.     // записываем в сессию правильные ответы
    38.     foreach ($ini_file_key as $k=>$v) {
    39.         $_SESSION['valtrue'][$v] = $ini_file_arr[$v]['valtrue'];
    40.     }
    41.  
    42.     // перемешиваем массив для надежности
    43.     shuffle($ini_file_key);
    44.  
    45.     // составляем новый массив вопросов/ответов
    46.     for ($ik = 0; $ik < sizeof($ini_file_key); $ik++) {
    47.         $new_ini_arr[$ik + 1] = $ini_file_arr[$ini_file_key[$ik]];
    48.     }
    49.     // сериализируем новый массив вопросов/ответов, чтобы сохранить в сессию
    50.     $_SESSION['quest_ini_arr'] = serialize($new_ini_arr);
    51.  
    52.     // инициализируем счетчик сессии
    53.     $_SESSION['count'] = 1;
    54. }
    55.  
    56. // "защита от накрутки" если юзер нажимает кнопку - "обновить"
    57. if (isset($_POST['hide'])) {
    58.     if ($_SESSION['count'] - 1 == $_POST['hide']) {
    59.         header("Location: {$_SERVER['SCRIPT_NAME']}");
    60.         exit;
    61.     }
    62.     // сохраняем результат ответа в сессию
    63.     $_SESSION['answer'][$_SESSION['quest_n']] = $_POST['quest_' . $_SESSION['quest_n']];
    64.  
    65.     // увеличиваем счетчик заданных вопросов
    66.     $_SESSION['count']++;
    67. }
    68.  
    69. // преобразуем массив вопросов/ответов в "нормальный вид"
    70. $quests_arr = unserialize($_SESSION['quest_ini_arr']);
    71.  
    72. // если еще  не все вопросы задали
    73. if ($_SESSION['count'] <= sizeof($quests_arr)) {
    74.     echo '<form method="post"><br />' . "\n" .
    75.           $quests_arr[$_SESSION['count']]['content'] .
    76.         ' <select name="quest_' . $quests_arr[$_SESSION['count']]['quest_n'] . '"> ' . "\n";
    77.  
    78.     // в цикле выводим все значения и варианты ответа
    79.     for ($iq = 1; $iq <= (sizeof($quests_arr[$_SESSION['count']]) - 2) / 2; $iq++) {
    80.          echo '<option value="' . $quests_arr[$_SESSION['count']]['v' . $iq] . '">' .
    81.               $quests_arr[$_SESSION['count']]['re' . $iq] .
    82.               '</option>' . "\n";
    83.     }
    84.     echo '</select>
    85.    <br />
    86.    <input type="hidden" name="hide" value="' . $_SESSION['count'] . '">
    87.    <input type="submit" value="Submit">
    88.    </form>';
    89.     // номер вопроса в ini файле
    90.     $_SESSION['quest_n'] = $quests_arr[$_SESSION['count']]['quest_n'];
    91.  
    92. } else {
    93.     // проверяем результаты теста
    94.     foreach ($_SESSION['answer'] as $ka=>$va) {
    95.         if ($va != $_SESSION['valtrue'][$ka]) {
    96.             // ответ неверный - редиректим на "левую" страницу
    97.             header("Location: $file_false?" . SID);
    98.             exit;
    99.         }
    100.     }
    101.       // редиректим на страницу после правильных ответов
    102.       header("Location: $file_true?" . SID);
    103.       exit;
    104. }
    105. ?>
    106.   </body>
    107. </html>
    108.  
     
  7. Greg1978

    Greg1978 Активный пользователь

    С нами с:
    18 окт 2008
    Сообщения:
    484
    Симпатии:
    0
    Адрес:
    class SenjorUser{}
    Ну вот а то Мама да Мама помните этот мультик только ответ я сделал так
    otvet1 = ..............
    otvet2 = .............
    otvet4+ = ............
    otvet5 = ................
    И редактировать можна и не надо дополнительного кода так как для проверки используется всего лишь присутсвие символа "+"!!!
    Конфигурационный файл ini вдвое уменьшился бы.
     
  8. AlexPebody

    AlexPebody Активный пользователь

    С нами с:
    14 янв 2007
    Сообщения:
    247
    Симпатии:
    0
    Ага, токо открыл, ща буду тестить! :):) ВСЕМ УЧАВСТВУЮЩИМ ОГРОМНЫЙ РЕСПЕКТ за ПОМОЩЬ!!!!!!!!!!!!!!!! :):)
     
  9. AlexPebody

    AlexPebody Активный пользователь

    С нами с:
    14 янв 2007
    Сообщения:
    247
    Симпатии:
    0
    Вообщем вот что я натестил:

    совстав моего файла questionnaire.php:

    PHP:
    1.  
    2. <?
    3.  
    4. // кличество задаваемых вопросов
    5. $quest_set  = 2;
    6. // страница куда перенаправить в случае правильных ответов
    7. $file_true  = 'true.php';
    8. // страница куда перенаправить в случае неправильных ответов
    9. $file_false = 'false.php';
    10. $ini_file  = 'quests.ini';
    11.  
    12.  
    13. // заголовок HTML - страницы
    14. $header = <<< EOF
    15. <html>
    16.   <head>
    17.     <meta http-equiv="cache-control" content="no-cache">
    18.     <meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
    19.     <title>Анкета</title>
    20.  
    21.     <style>
    22.         ...
    23.     </style>
    24.   </head>
    25.  
    26.     <body>
    27. EOF;
    28.  
    29. // если сессия только стартует
    30. if (!isset($_SESSION['quest_ini_arr'])) {
    31.     // считываем файл с вопросами/ответами
    32.     $ini_file_arr = parse_ini_file($ini_file, true);
    33.  
    34.     // извлекаем заданное число случайный ключей массива
    35.     $ini_file_key = array_rand($ini_file_arr, $quest_set);
    36.  
    37.     // записываем в сессию правильные ответы
    38.     foreach ($ini_file_key as $k=>$v) {
    39.         $_SESSION['valtrue'][$v] = $ini_file_arr[$v]['valtrue'];
    40.     }
    41.  
    42.     // перемешиваем массив для надежности
    43.     shuffle($ini_file_key);
    44.  
    45.     // составляем новый массив вопросов/ответов
    46.     for ($ik = 0; $ik < sizeof($ini_file_key); $ik++) {
    47.         $new_ini_arr[$ik + 1] = $ini_file_arr[$ini_file_key[$ik]];
    48.     }
    49.     // сериализируем новый массив вопросов/ответов, чтобы сохранить в сессию
    50.     $_SESSION['quest_ini_arr'] = serialize($new_ini_arr);
    51.  
    52.     // инициализируем счетчик сессии
    53.     $_SESSION['count'] = 1;
    54. }
    55.  
    56. // "защита от накрутки" если юзер нажимает кнопку - "обновить"
    57. if (isset($_POST['hide'])) {
    58.     if ($_SESSION['count'] - 1 == $_POST['hide']) {
    59.         header("Location: {$_SERVER['SCRIPT_NAME']}");
    60.         exit;
    61.     }
    62.     // сохраняем результат ответа в сессию
    63.     $_SESSION['answer'][$_SESSION['quest_n']] = $_POST['quest_' . $_SESSION['quest_n']];
    64.  
    65.     // увеличиваем счетчик заданных вопросов
    66.     $_SESSION['count']++;
    67. }
    68.  
    69. // преобразуем массив вопросов/ответов в "нормальный вид"
    70. $quests_arr = unserialize($_SESSION['quest_ini_arr']);
    71.  
    72. // если еще  не все вопросы задали
    73. if ($_SESSION['count'] <= sizeof($quests_arr)) {
    74.     echo '<form method="post"><br />' . "\n" .
    75.           $quests_arr[$_SESSION['count']]['content'] .
    76.         ' <select name="quest_' . $quests_arr[$_SESSION['count']]['quest_n'] . '"> ' . "\n";
    77.  
    78.     // в цикле выводим все значения и варианты ответа
    79.     for ($iq = 1; $iq <= (sizeof($quests_arr[$_SESSION['count']]) - 2) / 2; $iq++) {
    80.         echo '<option value="' . $quests_arr[$_SESSION['count']]['v' . $iq] . '">' .
    81.               $quests_arr[$_SESSION['count']]['re' . $iq] .
    82.               '</option>' . "\n";
    83.     }
    84.     echo '</select>
    85.    <br />
    86.    <input type="hidden" name="hide" value="' . $_SESSION['count'] . '">
    87.    <input type="submit" value="Submit">
    88.    </form>';
    89.     // номер вопроса в ini файле
    90.     $_SESSION['quest_n'] = $quests_arr[$_SESSION['count']]['quest_n'];
    91.  
    92. } else {
    93.     // проверяем результаты теста
    94.     foreach ($_SESSION['answer'] as $ka=>$va) {
    95.         if ($va != $_SESSION['valtrue'][$ka]) {
    96.             // ответ неверный - редиректим на "левую" страницу
    97.             header("Location: $file_false?" . SID);
    98.             exit;
    99.         }
    100.     }
    101.       // редиректим на страницу после правильных ответов
    102.       header("Location: $file_true?" . SID);
    103.       exit;
    104. }
    105. ?>
    106. </body>
    107. </html>
    108.  
    состав моего файла quests.ini:

    Код (Text):
    1.  
    2. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    3. ; Это файл конфигурации
    4. ; Используется файлом  questionnaire.php
    5. ;
    6. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    7. ;  Перечень вопросов;
    8. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    9. ; Номер вопроса
    10. [1]
    11. quest_n=1
    12. ;  Вопрос
    13. content=Что такое PHP
    14.  
    15. ;  Варианты ответов
    16. re1=Скриптовый язык программирования
    17. re2=Компилируемый язык программирования
    18. re3=Язык разметки гипертекста
    19. re4=Моторная лодка
    20. re5=Метод силовой тренировки
    21.  
    22. ; Значение
    23. v1=11
    24. v2=12
    25. v3=13
    26. v4=14
    27. v5=15
    28.  
    29. ;; Правильное значение
    30. valtrue=11
    31.  
    32. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    33. [2]
    34. quest_n=2
    35.  
    36. content=Что такое константа
    37.  
    38. re1=Функция
    39. re2=Идентификатор простого значения
    40. re3=Тип переменной
    41. re4=Область видимости
    42. re5=Метод силовой тренировки
    43.  
    44. v1=21
    45. v2=22
    46. v3=23
    47. v4=24
    48. v5=25
    49.  
    50. ;; Правильное значение
    51. valtrue=22
    52.  
    53. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    54. [3]
    55. quest_n=3
    56.  
    57. content=Что такое 3
    58.  
    59. re1=3
    60. re2=4
    61. re3=5
    62. re4=6
    63. re5=7
    64.  
    65. v1=31
    66. v2=32
    67. v3=33
    68. v4=34
    69. v5=35
    70.  
    71. ;; Правильное значение
    72. valtrue=31
    вот что он мне пишет:

    Warning: Invalid argument supplied for foreach() in W:\home\localhost\www\questionnaire.php on line 94

    Warning: Cannot modify header information - headers already sent by (output started at W:\home\localhost\www\questionnaire.php:94) in W:\home\localhost\www\questionnaire.php on line 102

    почему так? и что нужно сделать? вроде все пробелы как раньше были такие проблемы, убрал, проверил все вроде ок, все точки и скобки наместе... подскажите куда ткнуться? СПС!
     
  10. AlexPebody

    AlexPebody Активный пользователь

    С нами с:
    14 янв 2007
    Сообщения:
    247
    Симпатии:
    0
    ВСЕ! нашел... проблема в парсере была! :):)
     
  11. kirwebgroup

    kirwebgroup Активный пользователь

    С нами с:
    21 ноя 2008
    Сообщения:
    48
    Симпатии:
    0
    может всетаки $k и $v ))
     
  12. kirwebgroup

    kirwebgroup Активный пользователь

    С нами с:
    21 ноя 2008
    Сообщения:
    48
    Симпатии:
    0
    А вопще замарачиваешься такой хней...изредка меня даже удивляет существование людей не знающих что существует замечательные дяди из Гугля, которые давно ответили на все вопросы))

    http://wmasn.com/scripts/php/272download_script15.html - и крути его как хочешь, дарю)