За последние 24 часа нас посетили 58997 программистов и 1780 роботов. Сейчас ищут 1280 программистов ...

тестирование

Тема в разделе "PHP для новичков", создана пользователем el, 1 апр 2008.

  1. el

    el Активный пользователь

    С нами с:
    23 окт 2006
    Сообщения:
    51
    Симпатии:
    0
    Адрес:
    Ташкент
    Доброго времени суток, суть странички - тестирование, в чем запутался:
    Код (Text):
    1. $allvopr=mysql_query("select * from vopros where kat=1");
    вот так делаю запрос и получаю все вопросы из первой категории.
    Код (Text):
    1. $vop=mysql_fetch_assoc($allvopr);
    вот так получаю массив.

    вопрос либо очень простой, либо очень сложный: как обратиться к элементу массива, по его порядковому номеру? не по айди, а именно по порядковому номеру в данном массиве?


    З.Ы, не первое апреля, честно.
     
  2. Dagdamor

    Dagdamor Активный пользователь

    С нами с:
    4 фев 2006
    Сообщения:
    2.095
    Симпатии:
    1
    Адрес:
    Барнаул
    el
    $vopnum=array_values($vop);
    echo $vopnum[0];
     
  3. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
  4. armadillo

    armadillo Активный пользователь

    С нами с:
    6 апр 2007
    Сообщения:
    2.380
    Симпатии:
    0
    Адрес:
    Russia, Moscow
    el php.net - mysql_query, mysql_fetch_assoc - примеры перебора результата выборки. Сюда напиши что понятно.
     
  5. Elkaz

    Elkaz Старожил
    Команда форума Модератор

    С нами с:
    26 июн 2006
    Сообщения:
    3.373
    Симпатии:
    0
    Адрес:
    Баку, Азербайджан
  6. Clone

    Clone Guest

    el, кстати, твой код выведет только первую строку из всего запроса. Юзай while($row = mysql_fetch_row($result)) чтобы просмотреть все строки.
     
  7. el

    el Активный пользователь

    С нами с:
    23 окт 2006
    Сообщения:
    51
    Симпатии:
    0
    Адрес:
    Ташкент
    Подумал, сам понял, что спросил и самое главное - понял, что спросил неправильно:

    Код (Text):
    1. $allvopr=mysql_query("select * from vopros where kat=1");
    вот так делаю запрос и получаю все вопросы из первой категории, т.е. сейчас в $allvopr хранится массив из вопросов
    вот так к первому элементку обратиться можно?
    Код (Text):
    1. $vop=mysql_fetch_assoc($allvopr[0]);
    З.Ы, правильная постановка задачи - уже половина решения.
    З.З.Ы - while юзаю.

    Кстати, не скажите, где прочитать про ассоциативные и неассоциативные массивы?
     
  8. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    $allvopr - это ресурс, а не массив. При первом вызове mysql_fetch_assoc возвращает первый элемент, при втором - второй и т.д.
     
  9. armadillo

    armadillo Активный пользователь

    С нами с:
    6 апр 2007
    Сообщения:
    2.380
    Симпатии:
    0
    Адрес:
    Russia, Moscow
    все массивы в пхп - ассоциативные.
    в $allvopr хранится не массив, а ссылка на структуру "результат выборки mysql", из которой можно брать данные с помощью mysql_fetch_...
    mysql_fetch_assoc() выдает массив с ключами-названиями полей.

    варианты тут
     
  10. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    :`-O
    и array('a','b','c'); тоже?
     
  11. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    Да. С ключами 0, 1, 2
     
  12. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    А можешь зарисовать, как она выглядит? (схема по подобию схемы массива).
     
  13. armadillo

    armadillo Активный пользователь

    С нами с:
    6 апр 2007
    Сообщения:
    2.380
    Симпатии:
    0
    Адрес:
    Russia, Moscow
    var_dump($allvopr);

    )))
    Для пыха она только ссылка на объект.

    Или тебе интересно как оно на низком уровне? Очевидно, примерно как со структурированным файлом (и в файле же хранится).
     
  14. el

    el Активный пользователь

    С нами с:
    23 окт 2006
    Сообщения:
    51
    Симпатии:
    0
    Адрес:
    Ташкент
    ну переменная $allvopr содержит ЧТО-ТО с кучей элементов, как обратиться сразу к непервому элементу? или в данном случае нужен другой подход?
     
  15. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    $allvopr содержит одно значение!
    пропустить ненужные элементы.
     
  16. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    http://dev.mysql.com/sources/doxygen/my ... __res.html
     
  17. el

    el Активный пользователь

    С нами с:
    23 окт 2006
    Сообщения:
    51
    Симпатии:
    0
    Адрес:
    Ташкент
    структура таблицы vopros
    Код (Text):
    1. | vopros
    2. =======
    3. | id
    4. | txt
    5. | vo1
    6. | vo2
    7. | vo3
    8. | vo4
    9. | vo5
    10. | prvo
    когда
    Код (Text):
    1. $allvopr=mysql_query("select * from vopros where kat=1");
    выбираю конкретную категорию, потом могу получить массив. Но как предлагается делать выборку?
    Код (Text):
    1. $i=0;
    2. $a=array();
    3. while ($vop=mysql_fetch_assoc($allvopr))
    4. {
    5.   $a[$i]=$vop["theme"];
    6.   $i=$i+1;
    7. }
     
  18. Elkaz

    Elkaz Старожил
    Команда форума Модератор

    С нами с:
    26 июн 2006
    Сообщения:
    3.373
    Симпатии:
    0
    Адрес:
    Баку, Азербайджан
    el
    А зачем полученные данные опять засовывать в массив, не пойму что-то?
    Смотрите.
    Вы сделали SQL запрос к базе. Переменная $allvopr содержит ресурс. Далее, в цикле, вы делаете переборку массива.

    P.s Не заметил в таблице vopros колонку kat.

    Чтобы посмотреть строки:
    PHP:
    1.  
    2. <?php
    3. $AllQuestionsQuery = mysql_query ("SELECT * FROM `vopros` WHERE kat = 1");
    4. while ($Question = mysql_fetch_assoc ($AllQuestionsQuery)){
    5. print_r ($Question);
    6. }
    7. ?>
    8.  
    А какова задача сейчас?
     
  19. el

    el Активный пользователь

    С нами с:
    23 окт 2006
    Сообщения:
    51
    Симпатии:
    0
    Адрес:
    Ташкент
    Действительно, совсем забыл про kat

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

    т.е. как я хотел:
    перебираю все вопросы, записываю в массив все АйДи вопросов которые нам нужны, вывожу первый, как только клиент на него отвечает, я вывожу следующий и так до конца, попутно записывая ответы в базу, в другую таблицу.
     
  20. Elkaz

    Elkaz Старожил
    Команда форума Модератор

    С нами с:
    26 июн 2006
    Сообщения:
    3.373
    Симпатии:
    0
    Адрес:
    Баку, Азербайджан
    el
    Наверное, лучше было бы хранить где-нибудь в сессии или куках текущий ID вопроса, на который отвечает пользователь. Если ID не существует - значит ID = 1. И так до конца, пока не будет получен последний вопрос.
    Т.е нужно 2 запроса - первый определяет количество вопросов в базе. Мы записываем это числа в определенную переменную. Потом еще один запрос
    [sql]SELECT * FROM `vopros` WHERE id = $id LIMIT 1[/sql]
    И уже выводить данный вопрос. Мысль, в целом, ясна?
     
  21. el

    el Активный пользователь

    С нами с:
    23 окт 2006
    Сообщения:
    51
    Симпатии:
    0
    Адрес:
    Ташкент
    мысль ясна, просто надо каждый раз while-ом прогонять, чтоб узнать какой айди имеет ПЯТЫЙ вопрос (к примеру) из данного запроса, ведь необязательно 1-я kat будет содержать вопросы, айди которых 1-20. но мысль ясна, попробую реализовать, просто надеялся, что можно легче и с меньшей нагрузкой на сервер. Мало ли сколько одновременно возьмутся тестирование проходить....
     
  22. armadillo

    armadillo Активный пользователь

    С нами с:
    6 апр 2007
    Сообщения:
    2.380
    Симпатии:
    0
    Адрес:
    Russia, Moscow
    пиши в базу или сессию cat_order_id
     
  23. el

    el Активный пользователь

    С нами с:
    23 окт 2006
    Сообщения:
    51
    Симпатии:
    0
    Адрес:
    Ташкент
    лучше поздно, чем никому, просто напишу, что решил свою проблему сессиями - записывал на какой (по счёту) сейчас отвечаю, а при следующем вызове вайлом прогонял все вопросы из этой категории до шестого по счёту и отвечал уже на него.

    З.Ы. не забывайте чистить сессии :)