Задача: Программа - психологический тест. Есть 12 выражений. Программа должна выдавать их пользователю в сравнении c друг другом. Еще было бы хорошо что бы сравнение было рамндомным (то-есть не 1 или 2, 2 или 3, а 5 - 1, 11 -7, и так далее), но это не столь важно. По окончании сравнений друг с другом происходят вычисления коэффициентов, небольшие расчеты и выдается текстовый результат. Что не получается:Сделать то самое сравнение и желательно на одной странице. Что сделано: Максимум что у меня получилось, это создания двух страниц. На первой: делается выбор - результат в текст бокс и пост на вторую страницу. Вторая получает все как нужно. Первая страница PHP: <body> <?php echo "Что для вас важнее?<br>"; $a1 = "Активная, деятельная жизнь"; $a2 = "Здоровье (физическое и психическое здоровье);"; echo "<br> 1."; echo $a1; echo "<br> 2."; echo $a2; ?> <form name="form1" method="post" action="2.php"> <label for="textbox">Введите результат</label> <p>Введите 1 или 2 <input type="text" name="result" id="textbox" size="10"></p> <p><input type="submit" name="submit_button" value="Перейти дальше"></p> </body> Вторая страница PHP: <?php $a1 = "Активная, деятельная жизнь"; $a2 = "Здоровье (физическое и психическое здоровье)"; $result = $_POST['result']; if ($result == 1 || $result == 2) { if ($result == 1) { $b1++; echo "Вы ввели 1<br>"; echo $a1.":".$b1; } else { $b2++; echo "Вы ввели 2<br>"; echo $a2.":".$b2; } } else { echo "Вы ввели неверный символ! <br>"; echo "<a href= 'index.php'>Вернуться и попробовать заново</a>"; } ?> Вопрос: Как продолжить дальнейшие запросы и при этом сохранять данные от предыдущих (что бы работали счетчики)? Желательно каким-либо методом попроще, так как это первая моя программа.
Да, нужно сохранить выбор с каждого сравнения. (то-есть a или б? - б. б или с? - по итогу: б. а=0, б=2, с=0) Мне нужно почитать про сессии, я правильно понял? ps. Спасибо за ответ
да, База данных правда надежнее для новичка, но это помоему не очень сложно чтобы организовать и с помощю сессий. для начала, сами вопросы должны хранится в массиве и иметь свой идентификатор, а также место для записи не был ли уже ответ на этот вопрос. массив смешиваешь функцией shuffle()
То-есть можно реализовать и через mysql, если я с сессиями не разберусь? Я с ним знаком. Мне тогда стоит создать таблицу, где есть эти выражения, и ввести столбец где будет записываться сколько раз выражение выбрали? Тогда при выборе какого то значения, просто обновлять эти столбцы через update?
Всем спасибо за объяснения. Сессия - это то что мне было нужно, а я уже намучился с GET, глобальными переменными и т.д. Я в первом файле открыл сессию, ввел переменные: PHP: <?php session_start(); $_SESSION['a1_active_life'] = "0"; $_SESSION['a2_healt'] = "0"; $_SESSION['a3_work'] = "0"; ........ $_SESSION['a12_art'] = "0"; $_SESSION['$a1'] = "Активная, деятельная жизнь"; $_SESSION['$a2'] = "Здоровье (физическое и психическое здоровье);"; $_SESSION['$a3'] = "Интересная работа;"; ........... $_SESSION['$a12] = "Творчество (возможность творческой деятельности"; ?> На второй и третей странице уже обращался к переменным через $_SESSION PHP: .... $_SESSION['a1_active_life']++; echo "Вы ввели 1<br>"; echo $_SESSION['$a1'].":".$_SESSION['a1_active_life']; .... Все заработало как нужно. Вот только мне таких сравнений нужно сделать больше сотни. По выбранному мною методу, получается, что нужно сделать более сотни пхп файлов. Вопрос: По компактней можно как-то сделать ?
2-дименсиональные массивы, наверное. Но в них нужно хранить динамические данные - тоесть ответы, ваши вопросы это - статические. PHP: $questions = array ( "question" => array (1, 2, 3, 4. 'итд'), "answer" => array (0, 0, 0, 0, 'итд'), ); $_SESSION['all_info'] = $questions; тестами, я, никогда не занимался, и даже стало интересно как их организовать используя базы данных..
Если в action ничего не писать, тогда данные не передаются на другую страницу, и не осуществляется переход на нее? Значит все можно организовать на одной странице? Выдачу вопросов я так понимаю нужно делать через цикл. Сейчас что - то попробую. Спасибо за ответы!
Думаю мне подойдет что то похожее как в данном примере: PHP: //Создается новый массив, содержащий 5 значений цвета $colors = array('red', 'green', 'blue', 'yellow','white'); // Цикл for используется для итераций по массиву и вывода каждого элемента for ($i = 0; $i < sizeof($colors); $i++) { echo "Значением элемента массива $i+1 является $colors[$i]."; } ?>
Заранее прошу прощения за огромный пост. Огромная благодарность тому, кто его осилит. Еще больше тому, кто задумается о проблеме, и великий поклон тому, кто подскажет что - либо! Я сделал цикл через for. Проверку результата изначально сделал через if, но так как мне нужно проверять одну переменную на 12 значений, начал путаться во множественных вложениях и затем нашел оператор switch. Вроде бы разобрался как он работает, переписал под него, итог: программа не работает, выдает: Что для вас важнее? 1. Активная, деятельная жизнь 2. Здоровье (физическое и психическое здоровье) Введите цифру 1 Что для вас важнее? 2. Здоровье (физическое и психическое здоровье) 3. Интересная работа; Введите цифру 2 Что для вас важнее? 3. Интересная работа; 4. Красота природы и искусства; Введите цифру 3 и т.д. (пробелы соблюдены, видимо срабатывают <br>) Собственно код PHP: <?php //Стартую сессию session_start(); // Завожу необходимые переменные в сессию $_SESSION['active_life'] = "0"; $_SESSION['healt'] = "0"; $_SESSION['work'] = "0"; $_SESSION['beaty'] = "0"; $_SESSION['love'] = "0"; $_SESSION['money'] = "0"; $_SESSION['friends'] ="0"; $_SESSION['assertiveness'] ="0"; $_SESSION['education'] = "0"; $_SESSION['freedom'] = "0"; $_SESSION['family'] = "0"; $_SESSION['art'] = "0"; //Заношу вопросы в массив $questions = array( '1. Активная, деятельная жизнь', '2. Здоровье (физическое и психическое здоровье)', '3. Интересная работа;', '4. Красота природы и искусства;', '5. Любовь (духовная и физическая близость с любимым человеком)', '6. Материально-обеспеченная жизнь (отсутствие материальных затруднений)', '7. Наличие хороших и верных друзей', '8. Уверенность в себе (свобода от внутренних противоречий, сомнений)', '9. Познание (возможность расширения своего образования, кругозора, общей культуры, а также интеллектуальное развитие)', '10. Свобода как независимость в поступках и действиях', '11. Счастливая семейная жизнь', '12. Творчество (возможность творческой деятельности)'); //Создаю цикл, пока что только для 11 сравнений, где первое сравнивается с остальными 11 for ($i = 0; $i < 12; $i++) { $o=$i+1; echo "<p><b>Что для вас важнее?</b><br></p>"; echo $questions[$i]; echo "<br>"; echo $questions[$o]; echo "<br>"; echo '<form name="form1" method="post" action="">'; echo '<label for="textbox">Введите цифру</label>'; echo '<input type="text" name="result" id="textbox" size="10">'; echo '<p><input type="submit" name="submit_button" value="Ввести"></p>'; $result = $_POST['result']; //Используя switch суммирую количество баллов выбранных предложений switch ($result) { case ($result==1): $_SESSION['active_life']++; echo "<br>".$_SESSION['active_life']; //Эта строка для проверки на время отладки break; case ($result==2): $_SESSION['work']++; echo "<br>".$_SESSION['work']; //Эта строка для проверки на время отладки break; case ($result==3): $_SESSION['healt']++; echo "<br>".$_SESSION['healt']; //Эта строка для проверки на время отладки break; case ($result==4): $_SESSION['beaty']++; echo "<br>".$_SESSION['beaty']; //Эта строка для проверки на время отладки break; case ($result==5): $_SESSION['love']++; echo "<br>".$_SESSION['love']; //Эта строка для проверки на время отладки break; case ($result==6): $_SESSION['money']++; echo "<br>".$_SESSION['money']; //Эта строка для проверки на время отладки break; case ($result==7): $_SESSION['friends']++; echo "<br>".$_SESSION['friends']; //Эта строка для проверки на время отладки break; case ($result==8): $_SESSION['assertiveness']++; echo "<br>".$_SESSION['assertiveness']; //Эта строка для проверки на время отладки break; case ($result==9): $_SESSION['education']++; echo "<br>".$_SESSION['education']; //Эта строка для проверки на время отладки break; case ($result==10): $_SESSION['freedom']++; echo "<br>".$_SESSION['freedom']; //Эта строка для проверки на время отладки break; case ($result==11): $_SESSION['family']++; echo "<br>".$_SESSION['family']; //Эта строка для проверки на время отладки break; case ($result==12): $_SESSION['art']++; echo "<br>".$_SESSION['art']; //Эта строка для проверки на время отладки break; //На случай если введена цифра вне диапазона 1-12 default: echo "Вы ввели не верный символ"; } } ?>
может можно ссылку на такой тест в инете, чтобы разобратся как он должен работать, т.е. что отображать в итоге?
Что должно выводится на экран? Или сама методика? Просто с методикой вряд ли кому то будет интересно ознакамливаться . Программы такой нет. Методика не распространенная. Идеальный вариант: Окошко в нем по очереди выводятся 2 предложения, нужно выбрать одно. Считается количество раз сколько была выбрана каждая фраза. В конце эти данные высчитываются по формуле и выводится результат. Пока что проблема в самом начале: вывести эти сравнения красиво и считать. Неужели только переходом от странице к странице придется делать? Если, другого варианта нет, буду делать 132 страницы, раз нет вариантов.
ну там например список всех вопросов + какие есть возможные ответы на них + подсчет итогов теста. я писал тест айзенка, правда давно и в универе, на С#. Типа такое http://www.psyworld.info/online-testy/l ... jzenka-epi нам сразу дали всю выше перечисленную информацию. а итоговая суть этого теста мне пока не понятна. Имхо, я бы этот тест написал просто бы на яваскрипте.
Вот именно такой тест, как по ссылке, которую Вы дали, хотелось бы сделать! Там Явой написано? Вот сейчас как раз начинаю пробовать делать через радио кнопки. Самое главное что я не могу понять - как сделать что бы без перехода на другую страницу очищалась ячейка в таблице, или <DIV> контейнер? Вот как сделано в том тесте? Не подскажите? Кстати, я понимаю, что на Явоскрипте, все красиво, можно в флеше сделать, но я же взялся изучать пхп. Выбрал просто для практики создание этого теста. Изучать в бою так сказать, а то пока читаю книгу все понятно, закрыл - забыл все операторы, все построения и т.д.
Если можно, подскажите как сделать, что бы после нажатия кнопки, менялся текст без перехода на другую страницу. Сейчас сделал с радиокнопками так:
Спасибо большое Всем! Познакомился с ajax и jquery. Получилось сделать несколько успешных шагов. Вот так сейчас начинается программа. Для начала нужно ввести что-нибудь. А далее программа уже работает корректно по заданному алгоритму. Вопрос: Можно ли как-то покрасивее сделать начало? Самым примитивным было бы, конечно, написать введите "старт" для того, чтобы начать, но хотелось бы чего-то лучшего. Вся проблема в том? что мне нужно с этой страницы начинать, так как пхп возвращает всю информацию на эту страницу. По-этому нельзя начать с красивой страницы приветствия, нужно начинать с этой. Код index.php PHP: <?php //Очищаю старую сессию unset($_SESSION); //Стартую сессию session_start(); $_SESSION['active_life'] = "0"; $_SESSION['healt'] = "0"; $_SESSION['work'] = "0"; $_SESSION['beaty'] = "0"; $_SESSION['love'] = "0"; $_SESSION['money'] = "0"; $_SESSION['friends'] ="0"; $_SESSION['assertiveness'] ="0"; $_SESSION['education'] = "0"; $_SESSION['freedom'] = "0"; $_SESSION['family'] = "0"; $_SESSION['art'] = "0"; $_SESSION['i'] = "0"; $_SESSION['o'] = "0"; $_SESSION['maximum'] = "11"; ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=windows-1251"/> <title>Тест по методике Фанталовой</title> <script src="jquery.js" type="text/javascript"></script> </head> <body> <div id="head"><p>Тест Фанталовой на Ценость и Доступность</p></div> <div id="exmapleload"></div> <input type="text" id="text1" value=""> <button id="but">Отправить</button> </pre> <script> $("#but").click(function(){ var text = $("#text1").val(); var w = $("#exmapleload"); w.load('test.php', {a:text}) }); </script> <body> </body> </html> Код test.php PHP: <?php //Стартую сессию session_start(); $questions = array( '1. Активная, деятельная жизнь', '2. Здоровье (физическое и психическое здоровье)', '3. Интересная работа;', '4. Красота природы и искусства;', '5. Любовь (духовная и физическая близость с любимым человеком)', '6. Материально-обеспеченная жизнь (отсутствие материальных затруднений)', '7. Наличие хороших и верных друзей', '8. Уверенность в себе (свобода от внутренних противоречий, сомнений)', '9. Познание (возможность расширения своего образования, кругозора, общей культуры, а также интеллектуальное развитие)', '10. Свобода как независимость в поступках и действиях', '11. Счастливая семейная жизнь', '12. Творчество (возможность творческой деятельности)'); echo "<p><b>Что для вас важнее?</b><br></p>"; if ($_SESSION[o]!=$_SESSION[maximum]) { $_SESSION[o]++; } else { $_SESSION[maxmimum]--; $_SESSION[i]++; $_SESSION[o]=$_SESSION[i]+1; } echo $questions[$_SESSION[i]]; echo "<br>"; echo $questions[$_SESSION[o]]; echo "<br>"; $result=$_POST[a]; switch ($result) { case ($result==1): $_SESSION['active_life']++; break; case ($result==2): $_SESSION['work']++; break; case ($result==3): $_SESSION['healt']++; break; case ($result==4): $_SESSION['beaty']++; break; case ($result==5): $_SESSION['love']++; break; case ($result==6): $_SESSION['money']++; break; case ($result==7): $_SESSION['friends']++; break; case ($result==8): $_SESSION['assertiveness']++; break; case ($result==9): $_SESSION['education']++; break; case ($result==10): $_SESSION['freedom']++; break; case ($result==11): $_SESSION['family']++; break; case ($result==12): $_SESSION['art']++; break; } /* echo "<p>Результаты:</p>"; echo "<br>".$questions[0].": ".$_SESSION['active_life']; //Эта строка для проверки на время отладки echo "<br>".$questions[1].": ".$_SESSION['work']; //Эта строка для проверки на время отладки echo "<br>".$questions[2].": ".$_SESSION['healt']; //Эта строка для проверки на время отладки echo "<br>".$questions[3].": ".$_SESSION['beaty']; //Эта строка для проверки на время отладки echo "<br>".$questions[4].": ".$_SESSION['love']; //Эта строка для проверки на время отладки echo "<br>".$questions[5].": ".$_SESSION['money']; //Эта строка для проверки на время отладки echo "<br>".$questions[6].": ".$_SESSION['friends']; //Эта строка для проверки на время отладки echo "<br>".$questions[7].": ".$_SESSION['assertiveness']; //Эта строка для проверки на время отладки echo "<br>".$questions[8].": ".$_SESSION['education']; //Эта строка для проверки на время отладки echo "<br>".$questions[9].": ".$_SESSION['freedom']; //Эта строка для проверки на время отладки echo "<br>".$questions[10].": ".$_SESSION['family']; //Эта строка для проверки на время отладки echo "<br>".$questions[11].$_SESSION['art']; //Эта строка для проверки на время отладки echo "<br>".$questions[11].": ".$_SESSION['art']; //Эта строка для проверки на время отладки echo "<br>".$questions[11].$_SESSION['art']; //Эта строка для проверки на время отладки */ ?>
Почти все получилось, и все работает: Проблема: Я сделал поочередное сравнение. А желательно было бы сделать следующий алгоритм: Случайный вопрос с массива, сравнивается с другим случайным. Затем то что было выбрано, остается, и на его место с массива выбирается другой случайный вопрос. Выше подсказывали использовать функцию shufle. Но главный вопрос - как записывать уже случайно подобранные пары вопросов, которые уже были выданы.
Пока не представляю как. Последовательность не может быть заранее сформирована. Она определяется выбором при прохождении. Точнее она может быть определена, но только это будет слишком много последовательностей, если их попытаться заранее описать. Неизвестно ведь, что выберет пользователь А или Д, а если А, то следующее сравнение должно быть А или З(рандомный вопрос), а если он выберет З - то следующий З или В (рандом). И все эти пары, которые были таким образом сформированы, куда-то записывались, что бы не было повтора А или Д, а так же Д или А.