В тестовой системе, которую пишу, необходимо предотвратить повторное прохождение теста. Соответственно проверять надо перед началом теста. Надо проверить, если ли в таблице Results соотв. запись о прохождении етого теста. Вот что накатал: Код (Text): // --- Проверяем, проходили ли уже тест... --- // query("r", "SELECT rid FROM Results WHERE userid=" .$_SESSION['MM_Uid']. " AND themeid=" .$_SESSION['theme'], "0"); do { if($row_r['rid']!=="") { die("<div class=\"box\">Вы уже проходили этот тест!</div>"); } } while($row_r = mysql_fetch_assoc($r)); Такой код всегда приводит к die PS - query - моя универсальная функция. Думаю, что это очень криво и есть способ лучше. PS#2: Второй вопрос. Надо ли фильтровать $_SESSION, при условии, что им не присв. значения ни GET ни POST заранее спасибо
сейчас тебя будут бить за do - while... И поделом. Проверь чему у тебя равно $row_r['rid'] при первом проходе цикла? Фильтровать надо все в зависимости от того куда оно идет, а не откуда.
Лучше подстраховаться. Т.к. может оказаться, что в переменной нет значения и тогда запрос будет с ошибкой.
Возможно и надо. Я могу в куки подсунуть что-нибудь свое. От do_while лучше отказаться вообще. Конструкция ненаглядная + проходит по массиву один раз в любом случае. Я вот только логики не пойму. Запрос в базу выбирает пройденные тесты. А это значит, что в результирующем массиве будут все пройденные тесты. Но в цикле почему-то вновь проверяется, прошел ли человек тест. if (...num_rows > 0) { die("Вы прошли этот тест"); } И никаких циклов. Ни одного.