У меня глупый вопрос :)
Я работаю над простым документом php, который примитивно похож на онлайн-тест. Код на данный момент состоит из двух вопросов, которые, где оценки увеличиваются, если они правильные (пока не сработали, что он должен делать, если он выбрал неправильный ответ). Проблема в том, что переменная, которая содержит «отметки», не переносит обновленное значение на следующую страницу. Вот код:
<?php
$marks=0;
$question1=" <form method=post action='ThirdChallenge.php?question=2&marks=$marks'>
1. <input type=radio name='question1' value='first'/> Hyperttext PreProcessor <br/>
2. <input type=radio name='question1' value='second'/> HypertText PeriPheral <br/><br/>
<input type=submit value='submit'/>
</form> ";
$question2="<form method=post action='ThirdChallenge.php?question=3&marks=$marks'>
1. <input type=radio name='question2' value='first'/> Compiled Language <br/>
2. <input type=radio name='question2' value='second'/> Interpreted Language <br/><br/>
<input type=submit value='submit'/>
</form> ";
switch($_GET[question]){
case "1":
print"
<div align=center >
what does PHP stand for?<br/><br/> $question1
</div>";
break;
case "2":
if(!isset($_POST["question1"])){
//Check if an option has been selected, if not re-ask the question
echo " Error! Select one of the options <br/>
<div align=center >
what does PHP stand for?<br/><br/> $question1
</div>";
}
elseif($_POST["question1"]=="first"){
// if the answer is "first" which is the value of the form radio button with the correct answer
// Then simply increment the marks
$_GET[marks]++;
//echo only for testing
echo $_GET[marks];
}
print"
<div align=center> What kind of Language is PHP?<br/> <br/> $question2</div>";
break;
case "3":
// again do the checking for the second question
if(!isset($_POST["question2"])){
echo " Another error, select the questions again <br/>
<div align=center>
What kind of Language is PHP?<br/> <br/> $question2
</div>";}
elseif($_POST["question2"]=="second"){
$_GET[marks]++;
echo $_GET[marks];
}
// The problem is right here, instead of giving me say 2 if both the answers are correct it simply outputs 1
echo "$_GET[marks]The total marks you got are $_GET[marks] out of 20 ";
break;
default:
print"
<html>
<head/>
<body>
<div align=center><b>Hi there!, Welcome to the PHP exame. When you are ready, click the begin button</b><br/>
<a href='ThirdChallenge.php?question=1'> Begin </a>
</div>
</body>
</html>";
}
?>
Спасибо за ваше время заранее:)
Вот пример, который повлиял на написание моего собственного кода: (это abit long):
<code>$question1="<b>Question 1: What is the URL to access the PHP users manual online?</b><br>
A) <input type=radio name='q1a' value='a'> http://www.php.org/docs.php<br>
B) <input type=radio name='q1a' value='b'> http://www.php.com/docs.php<br>
C) <input type=radio name='q1a' value='c'> http://www.php.net/docs.php<br>
D) <input type=radio name='q1a' value='d'> http://documentation.php.net<br>
<input type=submit value='Go'>
</form>";
$question1_answer="c";
$question2="<b>Question 2: What is the extention that PHP documents generally have?</b><br>
A) <input type=radio name='q2a' value='a'> .phps<br>
B) <input type=radio name='q2a' value='b'> .html<br>
C) <input type=radio name='q2a' value='c'> .htm<br>
D) <input type=radio name='q2a' value='d'> .php<br>
<input type=submit value='Go'>
</form>";
$question2_answer="d";
$question3="<b>Question 3: What does PHP stand for?</b><br>
A) <input type=radio name='q3a' value='a'> PHP: Hypertext Preprocessor<br>
B) <input type=radio name='q3a' value='b'> Personal Home Page<br>
C) <input type=radio name='q3a' value='c'> Pretty Handy Programmer<br>
D) <input type=radio name='q3a' value='d'> Personal Hypertext Processor<br>
<input type=submit value='Go'>
</form>";
$question3_answer="a";
$question4="<b>Question 4: How should a PHP statement close?</b><br>
A) <input type=radio name='q4a' value='a'> ?><br>
B) <input type=radio name='q4a' value='b'> ;<br>
C) <input type=radio name='q4a' value='c'> </php><br>
D) <input type=radio name='q4a' value='d'> .<br>
<input type=submit value='Go'>
</form>";
$question4_answer="b";
$question5="<b>Question 5: Which of the following are correct? (select all that apply)</b><br>
A) <input type=checkbox name='q5a[a]' value='y'> print \$x;<br>
B) <input type=checkbox name='q5a[b]' value='y'> print '\$x';<br>
C) <input type=checkbox name='q5a[c]' value='y'> print x;<br>
D) <input type=checkbox name='q5a[d]' value='y'> print \$x<br>
E) <input type=checkbox name='q5a[e]' value='y'> print x<br>
F) <input type=checkbox name='q5a[f]' value='y'> print \"\$x\";<br>
<input type=submit value='Go'>
</form>";
$question5_answer1="a";
$question5_answer2="b";
$question5_answer3="c";
$question5_answer4="f";
$question6="<b>Question 6: What value would be printed to the browser from the following script?</b><br>
<pre>".'
$x=3;$y=4;$z=9;
$a=$x+($y*$z)/($x-($y%3));
print $a;'."
А)
Ошибка
B)
19,5
C)
21
D)
Ничего из вышеперечисленного
";
$ Question6_answer = "C";
$ question7 = "
Вопрос 7. Что выдает следующий скрипт?
".'
$x=1;$y=3;$z=12;
++$y;
$z*=2;
$x=$y+$z;
print $x'."
А)
Ошибка
B)
28
C)
1
D)
Ничего из вышеперечисленного
";
$ Question7_answer = "а";
$ question8 = "
Вопрос 8: Какие из следующих утверждений TRUE принимают значения, указанные ниже? (выберите все подходящие варианты)
".'
$x=3;$y=7;$z="green";$n=1;'."
А)
\ $ x + \ $ y == \ $ z || \ $ x == 3 && \ $ n> = 0
B)
\ $ x! = 3
C)
\ $ z == \ "green \" && \ $ y% 3> = \ $ n
D)
\ $ x == 3 && \ $ x ++ == \ $ y-3
E)
\ $ x * \ $ x% 2 && 3 - \ $ y! = \ $ Z
F) <тип ввода = имя флажка = 'q8a [f]' значение = 'у'> \ $ x + 2 = 5
";
$ Question8_answer1 = "а";
$ Question8_answer2 = "C";
$ Question8_answer3 = "е";
$ question9 = "
Вопрос 9: Каков результат следующего кода?
".'
for($x=1;$y<10;$y++) {
print $y."<br>";
}'."
A)
Числа от 0 до 9 будут выведены на экран
B)
Бесконечный цикл
C)
Ошибка
D)
Ничего из вышеперечисленного
";
$ Question9_answer = "d";
$ question10 = "
Вопрос 10: Каков результат следующего кода?
".'
$x=5;
switch($x) {
case 1:
print "the value is 1<br>";
case 2:
print "the value is 2<br>";
case 3:
print "the value is 3<br>";
case 4:
print "the value is 4<br>";
case 5:
print "the value is 5<br>";
case 6:
print "the value is 6<br>";
default:
print "There is no spoon.<br>";
}
'."
А)
\ "значение 5 \" выводится на экран
B)
Ошибка
C)
\ "значение 5 \" и \ "значение 6 \" выводится на экран
D)
\ "значение 5 \" и \ "значение 6 \" и \ "ложка отсутствует." Выводится на экран
E)
Ничего из вышеперечисленного
";
$ Question10_answer = "d";
// последний бит здесь - обзор каждого вопроса и правильный ответ (ы) на этот вопрос.
$ results = $ question1. "
Правильный ответ: $ question1_answer Почему: другие домены уходят куда-то еще. ";$ results. = $ question2. "
Правильный ответ: $ question2_answer Почему: .php - это расширение по умолчанию, для которого настроен сервер, хотя любое расширение можно настроить для анализа как скрипт PHP ";
$ results. = $ question3. "
Правильный ответ: $ question3_answer Почему: PHP - рекурсивная аббревиатура, вопреки мифологии программирования, она никогда не была аббревиатурой для Personal Home . Page ";
$ results. = $ question4. "
Правильный ответ: $ question4_answer Почему: операторы всегда заканчиваются точкой с запятой. " ;
$ results. = $ question5. "
Правильный ответ: $ question5_answer1, $ question5_answer2, $ question5_answer3, $ question5_answer4 Почему: a и b очевидны, c верно, если x определяется как константа. d отсутствует точка с запятой, e отсутствует точка с запятой и f, очевидно, является действительным. ";
$ results. = $ question6. "
Правильный ответ: $ question6_answer Почему: равенство означает: \ $ a = 3 + (4 * 9) / (3- (4% 3).) Когда вы следуете порядку операций, вы получаете \ $ a = 3 + 36/2, а затем снова, следуя порядку операций, \ $ a = 3 + 18 и конечное значение 21. ";
$ results. = $ question7. "
Правильный ответ: $ question7_answer Почему: В окончательном утверждении печати отсутствует точка с запятой. Вы не пытались вычислить это, не так ли ? Всегда сначала ищите наиболее очевидные точки отказа!;) ";
$ results. = $ question8. "
Правильный ответ: $ question8_answer1, $ question8_answer2, $ question8_answer3 Почему: Если у вас возникают проблемы с выяснением, является ли уравнение истинным или ложным , разбить его по частям. Например, первое равенство: 10 == зеленый || 3 == 3 && 1> = 0: ложь ИЛИ истина И истина, поэтому это ИСТИНА. Если все остальное не сработает, бросьте его в в выражении IF, выведите «yes», если оно истинно, и запустите сценарий! «B» неверно, потому что \ $ x IS 3, «d» ложно, потому что правая часть и (&&) оценивает «ложь», помня тонкую разницу между префиксами и постфиксные приращения ... ++ \ $ x приращения THEN возвращает, \ $ x ++ возвращает THEN приращения, так что вы действительно получаете: (3 == 4) ++ - приращение в этом случае теряется в порядке операций, потому что его оценка не имеет отношения к операции, таким образом, правая сторона ложна, и, таким образом, все уравнивание ложно. Наконец, F ложно, потому что возвращает ошибку - вы не можете выполнить операцию присваивания в одном и том же tatement как арифметическая операция. ";
$ results. = $ question9. "
Правильный ответ: $ question9_answer Почему: скрипт выведет цифры от 1 до 9.) не распечатывается, так как в первый раз в цикле \ $ y вообще не имеет значения VALUE, в конце цикла он увеличивается, создает его и устанавливает его в единицу. ";
$ results. = $ question10. "
Правильный ответ: $ question10_answer Почему: нет операторов прерывания, поэтому, как только значение найдено в операторе case, каждое последующее утверждение выполняется. ";
$ results. = "Хорошо, теперь я понимаю, верните меня
в начало , чтобы повторить попытку.";
?>
<! DOCTYPE HTML PUBLIC "- // W3C // DTD HTML 4.01 Transitional // EN"
«
http://www.w3.org/TR/html4/loose.dtd">
<?
// изменить название в соответствии с вопросом, на котором мы находимся
if ($ _ GET [вопрос]) {
выведите «Question $ question»;
} еще {
распечатать «Инструкции»;
}
?>
<?
switch ($ _ GET [вопрос]) {
Случай 1":
Распечатать "
<form method = post action = 'chapter_4_challenge.php? question = 2'>
$ Question1
";
перерыв;
дело "2":
// первая проверка вопроса 1
if ($ _ POST [q1a]) {// если они выбрали ответ - оцените его здесь.
if ($ question1_answer == $ _ POST [q1a]) {
$ _GET [ "оценка"] ++;
}
Распечатать "
$ question2
";
} еще {
печать ОШИБКА. "
$ Question1
";
}
перерыв;
дело "3":
// проверить вопрос 2
if ($ _ POST [q2a]) {
if ($ question2_answer == $ _ POST [q2a]) {
$ _GET [ "оценка"] ++;
}
Распечатать "
$ Вопрос3
";
} еще {
печать ОШИБКА. "
$ question2
";
}
перерыв;
дело "4":
// первая проверка вопроса 3
if ($ _ POST [q3a]) {
// если они выбрали ответ - оцените его здесь.
if ($ question3_answer == $ _ POST [q3a]) {
$ _GET [ "оценка"] ++;
}
Распечатать "
$ Вопрос4
";
} еще {
ОШИБКА печати. "
$ Вопрос3
";
}
перерыв;
дело "5":
// первая проверка вопроса 4
if ($ _ POST [q4a]) {
// если они выбрали ответ - оцените его здесь.
if ($ question4_answer == $ _ POST [q4a]) {
$ _GET [ "оценка"] ++;
}
Распечатать "
$ Вопрос5
";
} еще {
ОШИБКА печати. "
$ Вопрос4
";
}
перерыв;
дело "6":
/ * Сначала проверьте вопрос 5 - это немного отличается, потому что у нас есть несколько вариантов выбора
у нас есть каждый выбор с использованием флажков. Каждое из текстовых полей называется
с [xxxx] после него - это помещает его в подмножество суперглобального $ _GET. Мы делаем
не нужно проверять, выбрали ли они что-либо вообще, потому что они могли бы
думаю, что ни один из ответов не должен отвечать .... поэтому мы переходим непосредственно к проверке
чтобы увидеть, выбрали ли они какой-либо или все правильные ответы. * /
if ($ _ POST [q5a] [$ question5_answer1] == "y") {$ _GET [score] ++; }
if ($ _ POST [q5a] [$ question5_answer2] == "y") {$ _GET [score] ++; }
if ($ _ POST [q5a] [$ question5_answer3] == "y") {$ _GET [score] ++; }
if ($ _ POST [q5a] [$ question5_answer4] == "y") {$ _GET [score] ++; }
/ * Хорошо - немного объяснения выше. Было бы оценить:
$ _POST [q5a] [a], $ _ POST [q5a] [b] и т. Д. В зависимости от значения $ question5_answer1,
$ question5_answer2 и т. д., значения. Когда вы смотрите на флажок, вы видите, что значения
выбранные поля будут у - так что это значение мы проверяем. Это на самом деле называется
многомерные массивы, и это очень продвинутая концепция. Если вам удалось понять это
ты ОЧЕНЬ готов продолжить! Если нет, то попробуйте код и добавьте print_r ($ _ POST);Функция к выводу, чтобы увидеть, как он выходит из формы. * /
Распечатать "
Поздравляем! Пока ваш счет составляет $ _GET [оценка] из возможных 8. Давайте продолжим?
$ Вопрос6
";
перерыв;
дело "7":
// первая проверка вопроса 6
if ($ _ POST [q6a]) {
// если они выбрали ответ - оцените его здесь.
if ($ question6_answer == $ _ POST [q6a]) {
$ _GET [ "оценка"] ++;
}
Распечатать "
$ Вопрос7
";
} еще {
печать ОШИБКА. "
$ Вопрос6
";
}
перерыв;
дело "8":
// первая проверка вопроса 7
if ($ _ POST [q7a]) {
// если они выбрали ответ - оцените его здесь.
if ($ question7_answer == $ _ POST [q7a]) {
$ _GET [ "оценка"] ++;
}
Распечатать "
$ Вопрос8
";
} еще {
печать ОШИБКА. "
$ Вопрос7
";
}
перерыв;
дело "9":
if ($ _ POST [q8a] [$ question8_answer1] == "y") {$ _GET [score] ++; }
if ($ _ POST [q8a] [$ question8_answer2] == "y") {$ _GET [score] ++; }
if ($ _ POST [q8a] [$ question8_answer3] == "y") {$ _GET [score] ++; }
Распечатать "
$ question9
";
перерыв;
дело "10":
// первая проверка вопроса 9
if ($ _ POST [q9a]) {
// если они выбрали ответ - оцените его здесь.
if ($ question9_answer == $ _ POST [q9a]) {
$ _GET [ "оценка"] ++;
}
Распечатать "
$ question10
";
} еще {
ОШИБКА печати. "
$ question9
";
}
перерыв;
падеж "конец":
// первая проверка вопроса 10
if ($ _ POST [q10a]) {
// если они выбрали ответ - оцените его здесь.
if ($ question10_answer == $ _ POST [q10a]) {
$ _GET [ "оценка"] ++;
}
print "Поздравляем! Вы завершили тестовый тест PHP! Ваша оценка была
$ _ GET [оценка] из возможных 15!
";
// выяснить, какой тип поздравления дать им.
если ($ _ GET [счет] == 15) {
print "ВАУ! Ты суперзвезда PHP!";
} elseif ($ _ GET [счет]> 9 && $ _GET [счет] <15) {
печать «Совсем неплохо. Но возможности для улучшения.»;
} elseif ($ _ GET [счет]> 4 && $ _GET [счет] <10) {
print "Хорошо. Но, возможно, вам стоит немного пересмотреть.";
} еще {
print "WoW. Это плохо. Хм, может быть, вам лучше начать с начала учебного курса.";
}
print "</h1>Если вы хотите увидеть ответы на все вопросы, нажмите здесь";} else {print ERROR." $ question10";} break; case" results ": напечатать $ results; break; по умолчанию: print" Добро пожаловать в тест знаний PHP!В этом тесте вам будет задан ряд из 10 вопросов.Восемь из этих вопросов будут вопросами с несколькими вариантами ответов, и на 2 из них вам потребуется выбрать несколько ответов.В конце теста вы будете оцениваться с 15 баллами. Удачи!
Начало!"; перерыв;}?> |