Неизвестный идентификатор 
		
		
		
		Здравствуйте.  
	Есть блок со ссылками: <li><a href="test.php?test_number=1">Тест на грамотность</a></li> <li><a href="test.php?test_number=2">Тест на знание основ</a></li> <li><a href="test.php?test_number=3">Тест на квалификацию рерайтера</a></li> <li><a href="test.php?test_number=4">Тест на квалификацию копирайтера</a></li> <li><a href="test.php?test_number=5">Тест на квалификацию SEO-работника</a></li> В файле test.php есть кусок кода, который получат передаваемый параметр и записывает его в переменную 
<?php
//Проверка  передаваемых параметров для генерации страницы с тестами
$number_test = intval($_GET['test_number']);
if ($number_test < 1 || $number_test > 6)
	exit("Значение за пределами");
?>
И есть функция, которая проверяет ответы: 
function check() {
		
		switch (select_test) {
			case 1:
				var arr_value_test = ["one","one","one","two",4,3,4,"two","one",3];
				break;
			case 2:
				var arr_value_test = ["two","one","one","one","one"];
				break;
			case 3:
				var arr_value_test = [4,4,3,"two","one"];
				break;
			case 4:
				var arr_value_test = [4,"one","one","one","one"];
				break;
			case 5:
				var arr_value_test = ["two","two","one","one","one"];
				break;
			default:
				alert('Ошибка :(');
		}
			var ch =0;
			var validate_result = 0;
		var count = 0;
		
		for (var i = 0; i < arr_value_test.length; i++) 
		{
			var number_select = $('input[name=vp'+i+']:checked').val();
			if (number_select==arr_value_test[i])
			{
				var count = count +1;
			}
		}
		
		if ($(':radio:checked').length!= arr_value_test.length)
		{
			$("label").each(function(indx, element){
          $(this).toggleClass("err", !$("input",this).is(":checked"))
          });
			alert("Ответы даны не на все вопросы");
			
		}
		else
		{
			switch (count) {
				case 0:
				case 1:
				case 2:
				case 3:
				case 4:
				case 5:
				case 6:
				case 7:
				case 8:
				alert("Дано правильных ответов: "+count + " Ваш результат является неудовлетворительным.");
				break;
			}
			$('input[name=test_button').attr('disabled',true);
		}
		
		
	}
Проблема в том, что когда я открываю первый тест и не выбираю хотя бы 1 ответ, мне выдает сначала сообщение о том, что даны не все ответы, а затем перебрасывает на пустую страницу с ошибкой: "Notice: Undefined index: test_number in C:\xampp\htdocs\copyright\test.php on line 8" Но ведь параметр передается. Да и в адресной строке он есть. С остальными тестами все хорошо.  | 
	
		
 Цитата: 
	
 В строке 61 должно быть $('input[name=test_button]').attr('disabled',true);, и лучше не attr, а prop. Первый switch лишний, массив вариантов ответов ведь можно просто сразу описать объектом.  | 
	
		
 Цитата: 
	
 Поправил, но не помогло. В чем еще может быть проблема? А по поводу switch, то я только-только начал учить javascript и понятия не имею как это сделать. Для начала надо решить эту проблему с ошибкой, а потом уже начну гуглить. Но, конечно, буду очень благодарен, если вы приведете хотя бы небольшой пример того, как это сделать.  | 
	
		
 Цитата: 
	
 Хотя можно и завязать ее на клиента, тогда бы было понятно к чему вы ее упоминаете. Можно сделать двояко: сразу описать в клиентском сценарии варианты ответов, либо отдавать клиенту только те ответы, что запрошены GET параметром, то есть: 
var arr_value_test = {
    "1" : ["one","one","one","two",4,3,4,"two","one",3],
    "2" : ["two","one","one","one","one"],
    .....
};
и определяя параметр запроса отдавать клиенту $number_test при выдаче страницы var number_test = <?=$number_test?> тогда варианты это arr_value_test[number_test]. Также их можно получить, получая номер варианта из url методом search. А можно отдавать клиенту при формировании страниц теста и только нужный вариант ответов, то есть из массива их описанного на сервере: 
$arr_value_test = [
    1 => ["one","one","one","two",4,3,4,"two","one",3],
    ["two","one","one","one","one"],
    .....
];
отдавать клиенту: var arr_value_test = <?=json_encode($arr_value_test[$number_test])?>; тогда и определять на клиенте с каким вариантом сейчас работа не нужно. Теперь что касается ошибки, то что исправлено, это просто от невнимательности, а все остальное, это лучше привести код теста любого и описать чего вы хотите от проверки.  | 
	
		
 Вот этот тест не работает: 
	<div class="literacy test"> <center><span class="Contacts_h1">Тест на грамотность</span></center><br> <form id="literacy_form"> <label><b>Вопрос 1</b><br> Выберите вариант ударения, соответствующий норме<br> <input id="t0" type="radio" name="vp0" value="one">квАртал<br/> <input id="t0" type="radio" name="vp0" value="two">квартАл<br/> </label> <br><br> <label><b>Вопрос 2</b><br> Одна буква <i>н</i> пишется в слове... <br> <input id="t1" type="radio" name="vp1" value="one">изране(н/нн)ый<br/> <input id="t1" type="radio" name="vp1" value="two">жела(н/нн)ый<br/> <input id="t1" type="radio" name="vp1" value="3">кожа(н/нн)ый<br/> <input id="t1" type="radio" name="vp1" value="4">свяще(н/нн)ый<br/> </label> <br><br> <label><b>Вопрос 3</b><br> Выберите вариант, соответствующий акцентологической норме полных и кратких форм прилагательных и причастий.<i>В универмаге началась распродажа товаров по ... ценам.</i><br> <input id="t2" type="radio" name="vp2" value="one">Оптовым<br/> <input id="t2" type="radio" name="vp2" value="two">оптОвым<br/> </label> <br><br> <label><b>Вопрос 4</b><br> Я часто ... эту книгу в библиотеке.<br> <input id="t3" type="radio" name="vp3" value="one">бралА<br/> <input id="t3" type="radio" name="vp3" value="two">брАла<br/> </label> <br><br> <label><b>Вопрос 5</b><br> В каком варианте ответа правильно указаны все цифры, на месте которых в предложении должны стоять запятые? <i>Идея единого европейского пространства (1) поклонником (2) которой (3) был первый директор Царскосельского лицея Малиновский (4) обрела множество сторонников.</i><br> <input id="t4" type="radio" name="vp4" value="one">1, 3<br/> <input id="t4" type="radio" name="vp4" value="two">2, 3<br/> <input id="t4" type="radio" name="vp4" value="3">1, 4<br/> <input id="t4" type="radio" name="vp4" value="4">2, 4<br/> </label> <br><br> <label><b>Вопрос 6</b><br> <i>Итак, ... новый учебный год.</i><br> <input id="t5" type="radio" name="vp5" value="one">началсЯ<br/> <input id="t5" type="radio" name="vp5" value="two">нАчался<br/> <input id="t5" type="radio" name="vp5" value="3">начАлся<br/> </label> <br><br> <label><b>Вопрос 7</b><br> Буква <i>а</i> пишется на месте пропуска во всех словах в ряду...<br> <input id="t6" type="radio" name="vp6" value="one">1) р...сток, ск...чок, р...стовщик<br/> <input id="t6" type="radio" name="vp6" value="two">2) прил...жить, заск...чу, ск...кать<br/> <input id="t6" type="radio" name="vp6" value="3">3) к...снуться, заг...реть, ур...внение<br/> <input id="t6" type="radio" name="vp6" value="4">4) к...саться, пол...гать, м...кать<br/> </label> <br><br> <label><b>Вопрос 8</b><br> Выберите вариант, соответствующий норме словоупотребления. ... <i>Всероссийского конкурса студенческих работ получили денежную премию.</i><br> <input id="t7" type="radio" name="vp7" value="one">Дипломанты<br/> <input id="t7" type="radio" name="vp7" value="two">Дипломники<br/> </label> <br><br> <label><b>Вопрос 9</b><br> Молодые ... разработали летательный аппарат<br> <input id="t8" type="radio" name="vp8" value="one">конструкторЫ<br/> <input id="t8" type="radio" name="vp8" value="two">конструкторА<br/> </label> <br><br> <label><b>Вопрос 10</b><br> Выберите вариант, соответствующий морфологической норме числительных. <i>Выборы состоялись в ... округах.</i><br> <input id="t9" type="radio" name="vp9" value="one">триста пятидесяти восьми<br/> <input id="t9" type="radio" name="vp9" value="two">триста пятьдесят восьми<br/> <input id="t9" type="radio" name="vp9" value="3">трехстах пятидесяти восьми<br/> </label> <br> <p><center><input name="test_button" type="submit" value="Проверить" class="styled-button-1" onClick="check()"></center></p> </form> </div> Вот этот работает: <div class="base test"> <center><span class="Contacts_h1">Тест на знание основ</span></center><br> <form> <label><b>Вопрос 1</b><br> Рерайт – это..?<br> <input id="t0" type="radio" name="vp0" value="one">написание текста с нуля;<br/> <input id="t0" type="radio" name="vp0" value="two">написание текста на основе уже имеющегося;<br/> </label> <br><br> <label><b>Вопрос 2</b><br> Уникальность текста – это..?<br> <input id="t1" type="radio" name="vp1" value="one" >показатель того, насколько уникален текст по сравнению с другими;<br/> <input id="t1" type="radio" name="vp1" value="two">показатель интересности текста.<br/> </label> <br><br> <label><b>Вопрос 3</b><br> Важна ли скорость печатания?<br> <input id="t2" type="radio" name="vp2" value="one">да<br/> <input id="t2" type="radio" name="vp2" value="two">нет<br/> </label> <br><br> <label><b>Вопрос 4</b><br> Важно ли наличие портфолио?<br> <input id="t3" type="radio" name="vp3" value="one">да<br/> <input id="t3" type="radio" name="vp3" value="two">нет<br/> </label> <br><br> <label><b>Вопрос 5</b><br> Можно ли пользоваться сторонними ресурсами для улучшения качества своего текста?</i><br> <input id="t4" type="radio" name="vp4" value="one">да<br/> <input id="t4" type="radio" name="vp4" value="two">нет<br/> </label> <br><br><br> <p><center><input name="test_button" type="button" value="Проверить" class="styled-button-1" onClick="check()"></center></p> </form> </div> Проверка должна определять ответил ли пользователь на все вопросы. Если ответил - вывести сообщение с кол-вом правильных ответов. Если не ответил хотя бы на 1 вопрос - выдать соответствующее сообщение в алерте и после нажатия на "ОК" подсветить красным те вопросы, которые не отвечены, попутно дав возможность ему дать ответы на оставшиеся вопросы.  | 
	
		
 Тогда вообще не понятно причем тут вариант и switch, то есть код на клиенте. И массив вариантов ответов, это не связь варианта, а вопросы->варианта и ответов на них, так?  
	Причина ошибки в том, что test_number не определен, скорее всего у вас нет выдачи страницы по умолчанию, то есть первого теста, тогда когда не было GET запросов. PS. Если я все правильно понял, то заменить $number_test = intval($_GET['test_number']); на $number_test = (int)$_GET['test_number'] ?: 1;  | 
	
		
 Теперь просто выдает эту ошибку "Notice: Undefined index: test_number in C:\xampp\htdocs\copyright\test.php on line 8", без содержимого exit. Однако, теперь не перебрасывает на другую стр, а просто на этой же, в самом её верху, выводит данную ошибку. 
	 | 
	
		
 Номер строки $number_test = intval($_GET['test_number']); какой? 
	 | 
	
		
 Восьмой 
	 | 
	
		
 Ну все правильно 
	Ошибка, вернее это не ошибка, а предупреждение гласит о том, о чем я писал ранее. Есть два способа: 1) вы хорошо знаете, что означает это предупреждение, забиваете на него и определяете РНР не выводить предупреждений (это можно сделать постоянным, в настройках сервера), и этого предупреждения не будет. Вывод ошибок и предупреждений нужен при отладке, а на реально работающем сайте их нужно блокировать, писать их в лог-файл. 2) если пока нет ясности на все 100 с языком серверным, то писать так: $number_test = isset($_GET['test_number']) && ($n = (int)$_GET['test_number']) ? $n : 1;  | 
	
		
 Ваш способ помог, спасибо. Но есть вопрос: можно ли как-то запретить ему обновлять страницу, а то все пометки после этого исчезают, что не есть хорошо. 
	 | 
	
		
 Это не мой способ, это так определено в РНР - проверка установленной переменной - isset(), а записано тернарным оператором, хотя это можно сделать и по другому. 
	Что значит обновлять страницу?  | 
	
		
 Как только я нажимаю "ОК" в алерте, у меня тут же обновляется страница. 
	Хотелось бы, чтобы этого не было  | 
	
		
 Не отправляйте форму - в одном из тестов <input name="test_button" type="submit" и она отправит форму, а в другом <input name="test_button" type="button" - эта конопка не отправляет. 
	 | 
	
		
 Действительно, не заметил даже. Спасибо большое! 
	 | 
| Часовой пояс GMT +3, время: 12:07. |