Доброго времени суток, суть странички - тестирование, в чем запутался: Код (Text): $allvopr=mysql_query("select * from vopros where kat=1"); вот так делаю запрос и получаю все вопросы из первой категории. Код (Text): $vop=mysql_fetch_assoc($allvopr); вот так получаю массив. вопрос либо очень простой, либо очень сложный: как обратиться к элементу массива, по его порядковому номеру? не по айди, а именно по порядковому номеру в данном массиве? З.Ы, не первое апреля, честно.
el php.net - mysql_query, mysql_fetch_assoc - примеры перебора результата выборки. Сюда напиши что понятно.
el, кстати, твой код выведет только первую строку из всего запроса. Юзай while($row = mysql_fetch_row($result)) чтобы просмотреть все строки.
Подумал, сам понял, что спросил и самое главное - понял, что спросил неправильно: Код (Text): $allvopr=mysql_query("select * from vopros where kat=1"); вот так делаю запрос и получаю все вопросы из первой категории, т.е. сейчас в $allvopr хранится массив из вопросов вот так к первому элементку обратиться можно? Код (Text): $vop=mysql_fetch_assoc($allvopr[0]); З.Ы, правильная постановка задачи - уже половина решения. З.З.Ы - while юзаю. Кстати, не скажите, где прочитать про ассоциативные и неассоциативные массивы?
$allvopr - это ресурс, а не массив. При первом вызове mysql_fetch_assoc возвращает первый элемент, при втором - второй и т.д.
все массивы в пхп - ассоциативные. в $allvopr хранится не массив, а ссылка на структуру "результат выборки mysql", из которой можно брать данные с помощью mysql_fetch_... mysql_fetch_assoc() выдает массив с ключами-названиями полей. варианты тут
var_dump($allvopr); ))) Для пыха она только ссылка на объект. Или тебе интересно как оно на низком уровне? Очевидно, примерно как со структурированным файлом (и в файле же хранится).
ну переменная $allvopr содержит ЧТО-ТО с кучей элементов, как обратиться сразу к непервому элементу? или в данном случае нужен другой подход?
структура таблицы vopros Код (Text): | vopros ======= | id | txt | vo1 | vo2 | vo3 | vo4 | vo5 | prvo когда Код (Text): $allvopr=mysql_query("select * from vopros where kat=1"); выбираю конкретную категорию, потом могу получить массив. Но как предлагается делать выборку? Код (Text): $i=0; $a=array(); while ($vop=mysql_fetch_assoc($allvopr)) { $a[$i]=$vop["theme"]; $i=$i+1; }
el А зачем полученные данные опять засовывать в массив, не пойму что-то? Смотрите. Вы сделали SQL запрос к базе. Переменная $allvopr содержит ресурс. Далее, в цикле, вы делаете переборку массива. P.s Не заметил в таблице vopros колонку kat. Чтобы посмотреть строки: PHP: <?php $AllQuestionsQuery = mysql_query ("SELECT * FROM `vopros` WHERE kat = 1"); while ($Question = mysql_fetch_assoc ($AllQuestionsQuery)){ print_r ($Question); } ?> А какова задача сейчас?
Действительно, совсем забыл про kat задача: есть вышеуказанная таблица с вопросами, надо выбрать все вопросы из одной категории, и показывать их по одному - давать отвечать. т.е. как я хотел: перебираю все вопросы, записываю в массив все АйДи вопросов которые нам нужны, вывожу первый, как только клиент на него отвечает, я вывожу следующий и так до конца, попутно записывая ответы в базу, в другую таблицу.
el Наверное, лучше было бы хранить где-нибудь в сессии или куках текущий ID вопроса, на который отвечает пользователь. Если ID не существует - значит ID = 1. И так до конца, пока не будет получен последний вопрос. Т.е нужно 2 запроса - первый определяет количество вопросов в базе. Мы записываем это числа в определенную переменную. Потом еще один запрос [sql]SELECT * FROM `vopros` WHERE id = $id LIMIT 1[/sql] И уже выводить данный вопрос. Мысль, в целом, ясна?
мысль ясна, просто надо каждый раз while-ом прогонять, чтоб узнать какой айди имеет ПЯТЫЙ вопрос (к примеру) из данного запроса, ведь необязательно 1-я kat будет содержать вопросы, айди которых 1-20. но мысль ясна, попробую реализовать, просто надеялся, что можно легче и с меньшей нагрузкой на сервер. Мало ли сколько одновременно возьмутся тестирование проходить....
лучше поздно, чем никому, просто напишу, что решил свою проблему сессиями - записывал на какой (по счёту) сейчас отвечаю, а при следующем вызове вайлом прогонял все вопросы из этой категории до шестого по счёту и отвечал уже на него. З.Ы. не забывайте чистить сессии