За последние 24 часа нас посетили 113953 программиста и 3032 робота. Сейчас ищут 1500 программистов ...

Проверка на существование записи

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

  1. bFree

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

    С нами с:
    17 авг 2008
    Сообщения:
    81
    Симпатии:
    0
    В тестовой системе, которую пишу, необходимо предотвратить повторное прохождение теста. Соответственно проверять надо перед началом теста.
    Надо проверить, если ли в таблице Results соотв. запись о прохождении етого теста.
    Вот что накатал:
    Код (Text):
    1. // --- Проверяем, проходили ли уже тест... --- //
    2. query("r", "SELECT rid FROM Results WHERE userid=" .$_SESSION['MM_Uid']. " AND themeid=" .$_SESSION['theme'], "0");
    3. do {
    4.     if($row_r['rid']!=="") {
    5.         die("<div class=\"box\">Вы уже проходили этот тест!</div>");
    6.     }
    7. } while($row_r = mysql_fetch_assoc($r));
    Такой код всегда приводит к die
    PS - query - моя универсальная функция.
    Думаю, что это очень криво и есть способ лучше.

    PS#2: Второй вопрос. Надо ли фильтровать $_SESSION, при условии, что им не присв. значения ни GET ни POST

    заранее спасибо
     
  2. karakh

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

    С нами с:
    11 дек 2007
    Сообщения:
    1.344
    Симпатии:
    0
    сейчас тебя будут бить за do - while... И поделом.

    Проверь чему у тебя равно $row_r['rid'] при первом проходе цикла?

    Фильтровать надо все в зависимости от того куда оно идет, а не откуда.
     
  3. bFree

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

    С нами с:
    17 авг 2008
    Сообщения:
    81
    Симпатии:
    0
    karakh
    Например $_SESSION['MM_Uid']. создается при логине, идет в запрос. стоит ли фильовать?
     
  4. bFree

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

    С нами с:
    17 авг 2008
    Сообщения:
    81
    Симпатии:
    0
    Ничего не выводит, если записи нету. Если запись есть, то выводит ее id и потом дохнет \=
     
  5. Sergey89

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

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    Лучше подстраховаться. Т.к. может оказаться, что в переменной нет значения и тогда запрос будет с ошибкой.
     
  6. Greg1978

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

    С нами с:
    18 окт 2008
    Сообщения:
    484
    Симпатии:
    0
    Адрес:
    class SenjorUser{}
    while(...){..........}
     
  7. bFree

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

    С нами с:
    17 авг 2008
    Сообщения:
    81
    Симпатии:
    0
    в функции query() уже создается ассоц. массив.
     
  8. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    Возможно и надо. Я могу в куки подсунуть что-нибудь свое.

    От do_while лучше отказаться вообще. Конструкция ненаглядная + проходит по массиву один раз в любом случае.

    Я вот только логики не пойму. Запрос в базу выбирает пройденные тесты. А это значит, что в результирующем массиве будут все пройденные тесты. Но в цикле почему-то вновь проверяется, прошел ли человек тест.

    if (...num_rows > 0) {
    die("Вы прошли этот тест");
    }
    И никаких циклов. Ни одного.
     
  9. bFree

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

    С нами с:
    17 авг 2008
    Сообщения:
    81
    Симпатии:
    0
    Kreker
    Вот это я хотел увидеть! Поторопился я, до логики не дошло дело :) Спасибо!