неопределённый индекс в массиве

usascha

Новичок
неопределённый индекс в массиве

Помогите решить проблему с неопределённым индексом. ПХП выдаёт сообщение об ошибке: Undefined offset: 0 in ... on line 45, Undefined offset: 0 in ... on line 54.
PHP:
$q=1;
while($row=mysql_fetch_array($query)) {
	$question[$q] = $row['q_question'];
	$q_id[$q] = $row['q_id'];
	$q_answer_num[$q] = $row['q_answer_num'];
	$a_answer[$q] = $row['a_answer'];
	if($q==1) echo "<td style=\"width: 50%; vertical-align: top;\">";
	if($question[$q] !== $question[$q-1]) { //строка 45
		if ($total/$q==2) echo "\n\t\t</td>\n\t\t<td style=\"width: 50%; vertical-align: top;\">";
		echo "<div class=\"question\">...</div>";
		echo "<input type=\"Hidden\" name=\"question\" value=\"".$q_id[$q]."\" >";
	} else {
		$q=$q-1;
	}
	for ($a=1; $a<=count($a_answer[$q]); $a++) { //строка 54
		$letter[$a] = $row['a_order'];
		$answer[$a] = $row['a_answer'];
		$a_id[$a] = $row['a_id'];
		echo "<input type=\"checkbox\" name=\"answer_num[]\" value=\"$q\">
<span class=\"".(($q_answer_num[$q]==$letter[$a]) ? 'answer_r' : 'answer')."\">
".$letter[$a].") ".$answer[$a]."</span><br />";
	}
	if($q > $total) echo "</tr>";
	$q++;
}
Что надо сделать, чтобы значение $question[$q-1] и $a_answer[$q] никогда не были равны 0.
 

Фанат

oncle terrible
Команда форума
usascha
какой-то у тебя сложный алгоритм.
тебе же надо вопрос и варианты ответов на него?
я же писал, что надо просто запоминать текущее значение.
а у тебя массивы какие-то.
зачем?
 

usascha

Новичок
HraKK, это сравнение текста вопроса текущего с предыдущим. Возможен вариант: $q_id[$q] !== $q_id[$q-1]

Фанат,
да, я пытался сделать, но только так выводится последовательно номер вопроса (он же $q) и этот номер не меняется при выводе вариантов ответов.
 

Фанат

oncle terrible
Команда форума
Так тебе же это и нужно, вроде? зачем менять номер вопроса при выводе вариантов ответов? Вопрос-то ведь тот же остается?
 

usascha

Новичок
возможно я собственный код не очень понимаю, но у меня номера вопросов увеличиваются кратно +3, т.е. по количеству ответов.

Но это как раз не так важно, хотя подскажите как улучшить, буду признателен.

Главное то, что я написал в начале.
 

Фанат

oncle terrible
Команда форума
не понял.
где увеличиваются?
а, главное - зачем?

главное, по-моему, сделать, чтобы работало хорошо и было понятно. А не то, что написано в начале
ответь, пожалуйста, на вопросы
 

usascha

Новичок
ну, как я понимаю, $q++ в конце цикла увеличивает значение независимо от того тот же это вопрос ($question[$q]) или новый.
А раз так, то каждый новый вопрос нумеруется со значением +3.
 

Фанат

oncle terrible
Команда форума
зачем? зачем новый вопрос нумеруется со значением +3?
и какая проблема, если он не будет так нумероваться?
 

usascha

Новичок
проблемы в этом нет, мне и не нужно, чтобы он нумеровался +3. Для этого я поставил в else команду $q=$q-1.

Вывод из базу делается так:
1. вопрос1 ответ1-1
2. вопрос1 ответ1-2
3. вопрос1 ответ1-3
4.вопрос2 ответ2-1
5. вопрос2 ответ 2-2
6. вопрос2 ответ 2-3
7....
 

Фанат

oncle terrible
Команда форума
так. я перестал тебя понимать.
я тебя спросил - почему бы сделать без циклов, с простым запоминанием?
ты ответил
я пытался сделать, но только так выводится последовательно номер вопроса (он же $q) и этот номер не меняется
я тебя спросил - а зачем надо чтобы он менялся?
ты отвечаешь:
мне и не нужно, чтобы он нумеровался +3
теперь снова вопрос:
почему бы сделать без циклов, с простым запоминанием?
 

usascha

Новичок
как без циклов - я не знаю. Знал бы уже попробовал бы.
Всегда считал, что вывод из базы делается в цикле. Поскольку каждому вопросу соответствует 3 ответа, то получается два уровня. Это, вроде как, массив.
 

Фанат

oncle terrible
Команда форума
for ($a=1; $a<=count($a_answer[$q]); $a++) { //строка 54
здесь у тебя вывод из базы? или это не цикл?

-~{}~ 20.05.07 13:40:

получается два уровня. Это, вроде как, массив.
массив - это тип данных в пхп. а не "два уровня"

-~{}~ 20.05.07 13:44:

для начала
ты можешь ПРОСТО вывести данные из базы, как есть?
 

usascha

Новичок
это цикл и это уже не вывод из базы!

просто вывести данные могу:
Код:
while($row=mysql_fetch_array($query)) {
	$question[$q] = $row['q_question'];
	$q_id[$q] = $row['q_id'];
	$q_answer_num[$q] = $row['q_answer_num'];
	$a_answer[$q] = $row['a_answer'];
	echo "<br />".$q_id[$q].$question[$q].":<br /> ";
	echo "<li>".$a_answer[$q];
	$q++;
}
 

Фанат

oncle terrible
Команда форума
о господи.
а зачем здесь все эти странные массивы?
зачем эти многочисленные присваивания перед выводом?
почему нельзя выводить только из $row?

-~{}~ 20.05.07 14:20:

в общем, когда уберешь, то попробуй написать код, который выводит название вопроса только если вопрос изменился.
для этого тебе понадобится оператор if и одна переменная, в которой запоминается текущее значение $row['q_question'];
 

usascha

Новичок
Рискуя вызвать смех, вот до чего я додумался:
PHP:
while($row=mysql_fetch_array($query)) {
	$q_id = $row['q_id'];
	$qid = $row['qid'];
	$question = $row['q_question'];
	$q_answer_num = $row['q_answer_num'];
	$a_answer = $row['a_answer'];
	if (!isset($quest) OR $quest !== $row['q_id']) {
		$quest = $row['q_id'];
		echo $q.") ".$row['q_question'];
	$q++;
	}
	for ($a=1; $a<=count($a_answer); $a++) {
		$letter[$a] = $row['a_order'];
		$answer[$a] = $row['a_answer'];
		$a_id[$a] = $row['a_id'];
		echo "<input type=\"checkbox\" name=\"answer_num[]\" value=\"$q_id\">
<span class=\"".(($q_answer_num==$letter[$a]) ? 'answer_r' : 'answer')."\">".$letter[$a].") 
".$answer[$a]."</span><br />";
	}
}
Переделал, вроде выдаёт то, что нужно. Кому надо пользуйтесь.
 

Фанат

oncle terrible
Команда форума
только я всё-таки не пойму никак, нафига там цикл for
 
Сверху