Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.03.2013, 00:52   #1
Newcomer27
Новичок
Джуниор
 
Регистрация: 08.03.2013
Сообщений: 2
По умолчанию Как вывести на странице поочерёдно значения из массива?

Добрый день!
Может кто-нибудь знает как вывести поочерёдно значения из массива по нажатию кнопки?
Суть в следующем, в БД есть список вопросов с ответами для теста, необходимо выводить по одному вопросу на странице и по нажатию кнопки "Ответить" переходить к следующему.
Вот скрипт, вопросы выводятся, но после вывода поочерёдно 5 вопросов весь цикл начинается заново...
PHP код:
<?php
include('connect.php');
 
$str_user='</br>Тест выполняет'.$t;
$str_command=file_get_contents('timer.tpl');//таймер!!!!
/*Запись в массив текста вопроса по идентификатору из таблицы Test_question*/
 
$sql_id='SELECT * FROM Test_question';
 
$query_id=mysql_query($sql_id);
$count_id=mysql_num_rows($query_id);
 
$i=$count_id;
if (
$i mysql_num_rows($query_id))
 {
  
$i mysql_num_rows($query_id);
 } 
 
// Инициализируем массив, в котором будем хранить
// идентификаторы вопросов
$question_array = array();
 
// Определяем значение номера последней строки
// результата запроса на выборку идентификаторов 
$c mysql_num_rows($query_id)-1;
 
// Пока не получим нужное число 
while ($i 0)
 {
  
// Генерируем случайное значение ключа массива с
  // идентификаторами банеров
  
$x mt_rand(0$c);
  if (!isset(
$question_array[$x]))
   {
    
// Осталось на один вопрос меньше
    
$i--;
    
    
// Извлекаем идентификатор 
    
$b_uid mysql_result($query_id$x'ID_question');
        
    
// Заносим идентификатор  в массив
        
$question_array[$x]=$b_uid;
   }
 }
 
 
 
// Извлекаем из БД  текст вопросов
$res mysql_query("SELECT ID_question, Text_question FROM Question  WHERE ID_question IN (".implode(', ',$question_array).")");
$count_q=mysql_num_rows($res);
 
while (
$row mysql_fetch_assoc($res))
  {
$quest[]=$row;} 
  
$i=0;
 while (
$i<count($quest)) {
 
$current=$quest[rand(0,count($quest)-1)];
 
$h=count($quest);
 
 
$str1$current['Text_question']; 
 
$i++;
}
 if(
$i>count($quest))
 {echo 
'bmnm,n,';}
 
 
//$pieces = explode("</br>", $str_m);
  
 
echo "<input type='hidden' name='q'
 
 value='"
.$current['ID_question']."'>";
 
 
 
$g='SELECT ID_theme FROM Question WHERE ID_question='.$current['ID_question'];
 
$ra=mysql_query($g);
 
$f=mysql_fetch_array($ra);
//echo $f['ID_theme'];
$gt='SELECT ID_subject FROM Theme WHERE ID_theme='.$f['ID_theme'];
 
$raf=mysql_query($gt);
 
$fl=mysql_fetch_array($raf);
//echo $fl['ID_subject'];
$gtr='SELECT Name_subject FROM Subject WHERE ID_subject='.$fl['ID_subject'];
 
$rafh=mysql_query($gtr);
 
$flh=mysql_fetch_array($rafh);
$str3=$flh['Name_subject'];
 
 
 
 
 
$query2"SELECT * FROM Answer WHERE 
 
 ID_question='"
.$current['ID_question']."'";
 
 
$a=@mysql_query ($query2);
$count_r=mysql_num_rows($a);
 
 for(
$i=0$i<$count_r;$i++)
  { 
    
$date_r=mysql_fetch_array($a);
    
$str2.= "<input type='radio' name='a' value='".$date_r ['ID_answer']."'>".$date_r ['Text_answer']."</br>";
 
 }
 
$str=file_get_contents('begin_test.tpl');
$page=file_get_contents('index.tpl');
$page str_replace('{COM}'$str_user$page);
$page str_replace('{COM2}',$str_command $page);
$page=str_replace('{INFO}',$str$page);
$page=str_replace('{SUBJECT}',$str3$page);
$page=str_replace('{QUESTION}',$str1$page);
$page=str_replace('{ANSWER}',$str2$page);
 
echo 
$page;

 
?>
Newcomer27 вне форума Ответить с цитированием
Старый 08.03.2013, 04:14   #2
Johnatan
Antimoderаtoris
Участник клуба
 
Регистрация: 08.02.2008
Сообщений: 1,251
По умолчанию

Используй сессию, чтобы хранить два массива. В одном массиве хранишь полный список вопросов, которые "выпали" отвечающему. Каждому вопросу присвой временный хеш-ID, например через
PHP код:
$key substr(md5(uniqid(mt_rand(), true)), 08); 
таким образом можешь хранить ассоциативный массив (если порядок неважен). Например
PHP код:
$_SESSION['questions'] = array('7z6w5e1o' => array('id'=>15)); 
При инициализации делаешь копию этого массива. Этот массив будешь "сокращать". А в первый массив заноси id ответа пользователя. Также в первом массиве можешь хранить правильный ответ на каждый вопрос (id правильного ответа, конечно).
В форме можешь задать хеш-ключ текущего вопроса через action формы или через скрытое поле. Таким образом будешь знать на какой вопрос сейчас отвечает пользователь. Когда пользователь нажмёт "Ответить" на текущий вопрос, удаляешь этот вопрос из второго массива (таким образом когда массив пуст, то пользователь ответил на все вопросы), а ответ пользователя заносишь в первый массив. Выдаёшь следующий вопрос из "сокращаемого" массива.
Когда пользователь ответил на все вопросы, через foreach проходишь по каждому вопросу и сравниваешь ответы - выдаёшь результат.


Это очень грубый алгоритм, так как я хочу спать. Но он должен натолкнуть на правильное решение.
98% из тысячи моих постов сделаны в профильном подфоруме. Я не накручиваю свои посты болтанием в "курилке", а ты?
Johnatan вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сравнить два ассоциативных массива и вывести одинаковые значения. livesport PHP 1 20.10.2012 15:10
Как вывести данные на странице из строки браузера? ellada1 PHP 2 06.06.2012 06:54
MSSQL Как вывести значения по сегодняшней дате KARTOH SQL, базы данных 7 24.06.2011 18:56
Как вывести php файл в главной странице html в Denwer? Denwer_у -ushёl- HTML и CSS 0 11.04.2010 16:11
как присвоить все три значения вектору В и вывести его как массив столбец при вызове функции Tomoa Microsoft Office Excel 8 08.03.2010 20:42