Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 16.02.2010, 12:24
Аспирант
Отправить личное сообщение для nastya Посмотреть профиль Найти все сообщения от nastya
 
Регистрация: 10.02.2009
Сообщений: 37

Как узнать верный ли ответ
Здравствуйте! Есть викторина на ajax+php_mysql - она выводит вопросы, определяет правильность ответов. Осталось только реализовать подсчет баллов, тут я застряла. Дело в том, что мне просто нужно как-то передать в js файл правильно ли ответил юзер или нет, чтобы исходя из этого суммировать баллы(если правильно-то плюсовать секунды, за которые он ответил, если нет-ничего не добавлять).
Здесь идет определение правильности ответа:
if($_GET["question"] && $_GET["answer"])
{
$query="select otvet from vika where num=".$_GET["question"];
$result=mysql_query($query);
    if (mysql_result($result, 0) == $_GET["answer"])
    {
		
		echo "Правильно<br />";
		echo '<input type="hidden" value="1" name="itog" id="itog">';
		echo "Балл за вопрос:".$_GET["points"];	
			
    }
    else
    {
		echo "Неправильно!<br />";
		
		echo '<input type="hidden" value="0" name="itog" id="itog">';
		echo "Баллы:".$_GET["points"]."<br />";
	
    }	
}


$_GET["question"] && $_GET["answer"] php-файл получает из js-файла, где как раз аякс. Скажите как мне передать яве инфу(я хотела передавать itog=0 в случае неверного и itog=1 в случае верного ответа) о том правильно ли юзер ответил или нет, чтобы считать общие баллы. В ява скрипт делаю вот что (суммирую баллы):

if (document.getElementById('itog').value!=0)
{
	AllPoints = seconds+AllPoints;
}

Но это не работает-в кончоле ошибок пишет, что document.getElementById('itog').value is null. Не знаю что уже делать. Подскажите пожалуйста, или может кто подскажет другой способ..

Последний раз редактировалось nastya, 16.02.2010 в 12:28.
Ответить с цитированием
  #2 (permalink)  
Старый 16.02.2010, 12:57
Аватар для B@rmaley.e><e
⊞ Развернуть
Отправить личное сообщение для B@rmaley.e><e Посмотреть профиль Найти все сообщения от B@rmaley.e><e
 
Регистрация: 11.01.2010
Сообщений: 1,810

Сообщение от nastya
document.getElementById('itog').value is null
Конечно, ведь в самом документе нет элемента с таким ID. Вы получили от сервера в ответ на запрос простой текст. То есть в Вашем случае нужно искать в строке ответа "Правильно", "Неправильно" или парсить регулярными выражениями, доставая значение itog... А можно просто серверу вернуть 1 или 0 в зависимости от правильности ответа и сравнивать строку ответа с 1 для подсчета баллов.
Ответить с цитированием
  #3 (permalink)  
Старый 16.02.2010, 12:59
Аспирант
Отправить личное сообщение для nastya Посмотреть профиль Найти все сообщения от nastya
 
Регистрация: 10.02.2009
Сообщений: 37

А как "серверу вернуть 1 или 0 в зависимости от правильности ответа и сравнивать строку ответа с 1 для подсчета баллов."? можно кода немного
Ответить с цитированием
  #4 (permalink)  
Старый 16.02.2010, 13:00
Аспирант
Отправить личное сообщение для nastya Посмотреть профиль Найти все сообщения от nastya
 
Регистрация: 10.02.2009
Сообщений: 37

Вся проблема в том, что я не совсем понимаю как из пхп передать ява-файлу 0 или 1..
Ответить с цитированием
  #5 (permalink)  
Старый 16.02.2010, 15:14
Аватар для B@rmaley.e><e
⊞ Развернуть
Отправить личное сообщение для B@rmaley.e><e Посмотреть профиль Найти все сообщения от B@rmaley.e><e
 
Регистрация: 11.01.2010
Сообщений: 1,810

JS AJAX'ом загружает указанную страницу как текст (или объект XML, не суть как важно). Он не отрисовывает, не строит DOM дерево, просто возвращает содержимое страницы, по адресу которой был отправлен запрос. А кто создает содержимое на странице? Серверный скрипт. php при выполнении инструкции echo отправляет переданные ему аргументы в выходной поток, формируя страницу.
Скрипт
<?php
echo "1";
?>
Выведет на страницу голую единицу, без тегов и прочей мишуры. В том же самом ее виде получит скрипт, загрузивший страницу AJAX'ом.
if($_GET["question"] && $_GET["answer"])
{
$query="select null from vika where num=" . mysql_real_escape_string($_GET["question"]) . " and otvet='" . mysql_real_escape_string($_GET["answer"]) . "' LIMIT 1";
$result = mysql_query($query);
echo mysql_num_rows($result);
}
Ответить с цитированием
  #6 (permalink)  
Старый 17.02.2010, 05:27
Аспирант
Отправить личное сообщение для nastya Посмотреть профиль Найти все сообщения от nastya
 
Регистрация: 10.02.2009
Сообщений: 37

Спасибо большое за ответ, но что-то тяжко я всё это понимаю.

Смотрите, вот функция, которая выводит вопрос:

function showNextQ()
{
qCount = qCount + 1;

xmlhttp=GetXmlHttpObject();
if (xmlhttp==null)
    {
	alert ("Ваш браузер не поддерживает аякс");
	return;
    }


var url="load.php";

url=url+"?qcount="+qCount+"&points="+seconds+"&answer="+answer+"&allpoints="+AllPoints;
if(document.forms.answers) url=url+"&question="+document.getElementById('question').value;
xmlhttp.onreadystatechange=stateChanged;
xmlhttp.open("GET",url,true);
xmlhttp.send(null);

if (document.getElementById('itog').value == 1)
{
	AllPoints = seconds+AllPoints;
}

document.getElementById("topLiders").innerHTML='';	

seconds = 21;

}

Она передает load.php номер вопроса, который нужно достать из бд, также баллы за вопрос -points(они равны кол-ву секунд, за которое пользователь ответил на вопрос - есть ещё функция которая выводит таймер в викторине), ответ полученный от пользователя(answer). Есть еще один параметр AllPoints-это сумма баллов, которая должна выводиться на каждом шаге. Вычисляется AllPoints = seconds+AllPoints;(до этого в начале она ещё обнуляется конечно). Так вот это самое действие мне нудно выполнить, только когда ответ верный, а когда нет - ничего не прибавлять к AllPoints. В примере у меня не правильно как вы сказали if (document.getElementById('itog').value == 1), но я просто привела то, что у меня есть. Так вот как здесь в этой функции реализовать это? (если это вообще здесь можно, но мне кажется что да).

В load.php при получении ответа и вопроса он проверяет всё это(приведу ещё раз для понимания):

if($_GET["question"] && $_GET["answer"])
{
    $query="select otvet from vika where num=".$_GET["question"];
    $result=mysql_query($query);
    if (mysql_result($result, 0) == $_GET["answer"])
    {
		
		echo "Правильно<br />";
		echo '<input type="hidden" value="1" name="itog" id="itog">';
		echo "Балл за вопрос:".$_GET["points"];	
    }
    else
    {
		
		echo "Неправильно!<br />";
		echo '<input type="hidden" value="0" name="itog" id="itog">';
		echo "Баллы:".$_GET["points"]."<br />";
		echo "Всего баллов:".$_GET["allpoints"];
		 
    }	
}

Вот куда мне здесь поставить и как принять потом в яве это самое значение 0 или 1(я пыталась echo '<input type="hidden" value="0" name="itog" id="itog">'; как помните )?
Ответить с цитированием
  #7 (permalink)  
Старый 17.02.2010, 06:31
Аспирант
Отправить личное сообщение для nastya Посмотреть профиль Найти все сообщения от nastya
 
Регистрация: 10.02.2009
Сообщений: 37

Написала и разобралась Получилось, теперь баллы подсчитать осталось )
Ответить с цитированием
  #8 (permalink)  
Старый 17.02.2010, 07:01
Аспирант
Отправить личное сообщение для nastya Посмотреть профиль Найти все сообщения от nastya
 
Регистрация: 10.02.2009
Сообщений: 37

Скажите, а возможно на каждом шаге выводить общий балл? т.е. чел-к ответил на первый вопрос правильно, на втором шаге помимо вопроса выводится и общий балл(там идет сумма)? я сделала передачу идентификатора=0 или 1. Но дело в том, что он не правильно считает. Если я ответила верно, то он за след. вопрос приплюсует даже если он не верный. Т.е. этот идентификатор передается к след. вопросу. А как его применить к предыдущему?
Ответить с цитированием
  #9 (permalink)  
Старый 17.02.2010, 07:30
Аспирант
Отправить личное сообщение для nastya Посмотреть профиль Найти все сообщения от nastya
 
Регистрация: 10.02.2009
Сообщений: 37

Код:
function showNextQ()
{
qCount = qCount + 1;

xmlhttp=GetXmlHttpObject();
if (xmlhttp==null)
    {
	alert ("Ваш браузер не поддерживает аякс");
	return;
    }

[B]if(document.forms.answers) {
	if (document.getElementById('itog').value == 1)
	{
		AllPoints = seconds+AllPoints;
	}
}[/B]




var url="load.php";

url=url+"?qcount="+qCount+"&points="+seconds+"&answer="+answer+"&allpoints="+AllPoints;
if(document.forms.answers) url=url+"&question="+document.getElementById('question').value;


xmlhttp.onreadystatechange=stateChanged;
xmlhttp.open("GET",url,true);
xmlhttp.send(null);


document.getElementById("topLiders").innerHTML='';	

seconds = 21;


}


load.php


if($_GET["question"] && $_GET["answer"])
{
    $query="select otvet from vika where num=".$_GET["question"];
    $result=mysql_query($query);
    if (mysql_result($result, 0) == $_GET["answer"])
    {
		
		echo "Правильно<br />";
		
		echo "Балл за вопрос:".$_GET["points"];	
		 $allpoints=$allpoints+$_GET["points"];
		
		 $itog=1;
		
		echo "<br />";
		
		echo "<div id='balls'>Всего баллов:".$allpoints."</div><br />";	
			
    }
    else
    {
		$otvno+=1;
		echo "Неправильно!<br />";
		
		$allpoints=$allpoints;
		echo "Баллы:".$_GET["points"]."<br />";
		echo "Всего баллов:".$allpoints;
		
		
		echo "<br />";
		$itog=0;
		
    }	
}



if ($_GET['qcount'] <= 5) 
{
	
    $id=rand(1,3672);
    $query="select * from vika where num=".$id;
    $result=mysql_query($query);
	
    if ($result)
    {
    	while($row=mysql_fetch_object($result))
		{
			echo 'Вы отвечаете на <b>'.$_GET['qcount'].'</b> вопрос';
			echo "<p><div><b>".$row->vopros."</b></div></p>";
			echo '<form name="answers">';
			echo '<input type="radio" id="answer_id" name="answer" value="1" checked>'.$row->otvet1.'</input><br />';
			echo '<input type="radio" id="answer_id" name="answer" value="2">'.$row->otvet2.'</input><br />';
			echo '<input type="radio" id="answer_id" name="answer" value="3">'.$row->otvet3.'</input><br />';
			echo '<input type="radio" id="answer_id" name="answer" value="4">'.$row->otvet4.'</input><br />';
			echo $itog;
			echo '<input type="button" value="Следующий" onClick="whatChecked(); showNextQ(); ">';
			echo '<input type="hidden" value='.$id.' name="question" id="question">';
			
			
			echo '<input type="hidden" value='.$itog.' name="itog" id="itog">';
						
			echo '</form>';
			
	   	}
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как узнать верхний z-index San4ezy Элементы интерфейса 5 21.11.2009 18:12
Подскажите как узнать существует ли объект в памяти? Yazla Общие вопросы Javascript 2 05.11.2009 20:05
Как узнать сколько членов в объекте kdie Общие вопросы Javascript 2 30.09.2009 12:28
Как узнать value radio button-a из javascript kaaron Общие вопросы Javascript 1 17.02.2009 13:25
Как узнать о том, что флэш уже загрузился. Snipe Общие вопросы Javascript 4 29.01.2009 11:21