 
			
				01.05.2016, 10:07
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Интересующийся 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 27.03.2016 
					
					
					
						Сообщений: 21
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
			
			 
				Неизвестный идентификатор
			 
			
		
		
		
		Здравствуйте.  
Есть блок со ссылками:
 
<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" 
Но ведь параметр передается. Да и в адресной строке он есть. С остальными тестами все хорошо.  
		
	
		
		
		
		
		
		
	
		
			
			
	
			
			
			
			
			
				 
			
			
			
			
			
			
				
			
			
			
		 
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				01.05.2016, 13:08
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 14.01.2015 
					
					
					
						Сообщений: 12,989
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	| 
		
			Сообщение от FaNaT_96
			
		
	 | 
 
	| 
		В файле test.php есть кусок кода, который получат передаваемый параметр и записывает его в переменную
	 | 
 
	
 
 И какое отношение php-переменная имеет к клиентской функции test?
 
В строке 61 должно быть  $('input[name=test_button ]').attr('disabled',true);, и лучше не attr, а prop.
 
Первый switch лишний, массив вариантов ответов ведь можно просто сразу описать объектом.  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				01.05.2016, 13:54
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Интересующийся 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 27.03.2016 
					
					
					
						Сообщений: 21
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	
		
			Сообщение от laimas
			 
		
	 | 
 
	
		И какое отношение php-переменная имеет к клиентской функции test? 
 
В строке 61 должно быть  $('input[name=test_button]').attr('disabled',true);, и лучше не attr, а prop. 
 
Первый switch лишний, массив вариантов ответов ведь можно просто сразу описать объектом.
	 | 
 
	
 
 В зависимости от того, что содержит эта переменная, выбирается нужный пользователю тест.
 
Поправил, но не помогло.
 
В чем еще может быть проблема? 
А по поводу switch, то я только-только начал учить javascript и понятия не имею как это сделать. Для начала надо решить эту проблему с ошибкой, а потом уже начну гуглить. Но, конечно, буду очень благодарен, если вы приведете хотя бы небольшой пример того, как это сделать.  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				01.05.2016, 14:22
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 14.01.2015 
					
					
					
						Сообщений: 12,989
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	| 
		
			Сообщение от FaNaT_96
			
		
	 | 
 
	| 
		В зависимости от того, что содержит эта переменная, выбирается нужный пользователю тест.
	 | 
 
	
 
 Ну так по коду вашему этого не видно. Понятно, что передается GET параметр test_number, по нему будет определяться страница теста, но к функции test, к проблеме вашей переменная сервера не имеет отношения.
 
Хотя можно и завязать ее на клиента, тогда бы было понятно к чему вы ее упоминаете.
 
Можно сделать двояко: сразу описать в клиентском сценарии варианты ответов, либо отдавать клиенту только те ответы, что запрошены 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])?>;
 
тогда и определять на клиенте с каким вариантом сейчас работа не нужно.
 
Теперь что касается ошибки, то что исправлено, это просто от невнимательности, а все остальное, это лучше привести код теста любого и описать чего вы хотите от проверки.  
		
	
		
		
		
		
		
		
		
						  
				
				Последний раз редактировалось laimas, 01.05.2016 в 14:26.
				
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				01.05.2016, 14:40
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Интересующийся 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 27.03.2016 
					
					
					
						Сообщений: 21
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		Вот этот тест не работает: 
<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 вопрос - выдать соответствующее сообщение в алерте и после нажатия на "ОК" подсветить красным те вопросы, которые не отвечены, попутно дав возможность ему дать ответы на оставшиеся вопросы.  
		
	
		
		
		
		
		
		
	
		
			
			
	
			
			
			
			
			
				 
			
			
			
			
			
			
				
			
			
			
		 
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				01.05.2016, 14:52
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 14.01.2015 
					
					
					
						Сообщений: 12,989
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		Тогда вообще не понятно причем тут вариант и switch, то есть код на клиенте. И массив вариантов ответов, это не связь варианта, а вопросы->варианта и ответов на них, так?  
Причина ошибки в том, что test_number не определен, скорее всего у вас нет выдачи страницы по умолчанию, то есть первого теста, тогда когда не было GET запросов.
 
PS. Если я все правильно понял, то заменить $number_test = intval($_GET['test_number']); на
 
$number_test = (int)$_GET['test_number'] ?: 1;
  
		
	
		
		
		
		
		
		
		
						  
				
				Последний раз редактировалось laimas, 01.05.2016 в 15:10.
				
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				01.05.2016, 15:16
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Интересующийся 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 27.03.2016 
					
					
					
						Сообщений: 21
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 Теперь просто выдает эту ошибку "Notice: Undefined index: test_number in C:\xampp\htdocs\copyright\test.php on line 8", без содержимого exit. Однако, теперь не перебрасывает на другую стр, а просто на этой же, в самом её верху, выводит данную ошибку. 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				01.05.2016, 15:46
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 14.01.2015 
					
					
					
						Сообщений: 12,989
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 Номер строки $number_test = intval($_GET['test_number']); какой? 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				01.05.2016, 16:27
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Интересующийся 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 27.03.2016 
					
					
					
						Сообщений: 21
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 Восьмой 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				01.05.2016, 16:41
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 14.01.2015 
					
					
					
						Сообщений: 12,989
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		Ну все правильно 
Ошибка, вернее это не ошибка, а предупреждение гласит о том, о чем я писал ранее.
 
Есть два способа:
 
1) вы хорошо знаете, что означает это предупреждение, забиваете на него и определяете РНР не выводить предупреждений (это можно сделать постоянным, в настройках сервера), и этого предупреждения не будет. Вывод ошибок и предупреждений нужен при отладке, а на реально работающем сайте их нужно блокировать, писать их в лог-файл.
 
2) если пока нет ясности на все 100 с языком серверным, то писать так:
 
$number_test = isset($_GET['test_number']) && ($n = (int)$_GET['test_number']) ? $n : 1;
  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
 
 |  
  |