[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Исключить значения из запроса
asdf27
$res02=mysql_query("SELECT * FROM `verify` ORDER BY rand() AND `text` IN ('$_SESSION[ver]') LIMIT 3");


Тем самым я пытаюсь исключить из запроса строку, содержащую значение $_SESSION[ver]. Но отваливается рэндомный вывод.

Подскажите, как правильно составить запрос?
Valick
$res02=mysql_query("SELECT * FROM (SELECT * FROM `verify` WHERE `text` NOT IN ('$_SESSION[ver]')) ORDER BY rand() LIMIT 3");

а вообще лучше полностью раскрывать смысл задачи, так ответ будет гораздо точнее

_____________
Стимулятор ~yoomoney - 41001303250491
asdf27
Ошибку дает, но смысл я понял, спасибо.

Смысл в изобретении велосипеда. Капчу крутить не хочу, пишу подобно этому https://sendsms.ssl.mts.ru/ , там внизу выбор картинки. Если полный код, то:

<?php
session_start();
require_once '../sys/mysql.php';
$res01=mysql_query("SELECT * FROM verify order by rand() LIMIT 1");
$res001= mysql_fetch_assoc($res01);
$_SESSION[ver]=$res001[text];
echo 'Выберите картинку, соответствующую признаку <b>'.$res001[text].'</b><br>';

$res02=mysql_query("SELECT * FROM `verify` ORDER BY rand() AND `text` IN ('$_SESSION[ver]') LIMIT 3");
echo '<form action="verify.php" method="POST">
<div style="display: none;"><input checked type="radio" value="agree" name="ver[]"></div>
<input type="radio" name="ver[]"><img src="images/verify/'
.$res001[name].'.png">

'
;

while ($res002= mysql_fetch_assoc($res02)) {
echo '<input type="radio" name="ver[]"><img src="images/verify/'.$res002[name].'.png">';
}


?>
Там же и ловушка для робота.

Т.е. первую картинку я вывожу от первого запроса, а во втором хочу исключить её. И не забывайте, тему я создал в разделе "для новичков" :)
Valick
а смысл делать два запроса?
делаете выборку 4-х случайных картинок из базы, а затем определяете случайным образом "козырую" пишите в сессию её идентификатор и просите ее найти

_____________
Стимулятор ~yoomoney - 41001303250491
asdf27
Согласен, это первое что пришло в голову, но как реализовать не знаю.

Если сделать такой запрос:

$row=mysql_fetch_array($res);
Как потом вытащить элемент с ключом 2?

Не знаю как правильно, типа $res[2][name]
inpost
asdf27
Мне кажется, что я говорил, но всё же... читаем: http://php.net/manual/ru/language.types.array.php

_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
Valick
<?php
session_start();
require_once '../sys/mysql.php';
$a=0;
$n=4;
$r=rand(0,$n);
echo '<form action="verify.php" method="POST">
<div style="display: none;">
<input checked type="radio" value="agree" name="ver[q]"></div>'
;
$res=mysql_query("SELECT * FROM verify order by rand() LIMIT $n");
while($rst=mysql_fetch_assoc($res)){
if($r==$a++) {
$_SESSION[ver]=$rst[text];
echo 'Выберите картинку, соответствующую признаку <b>'.$rst[text].'</b><br>';
}
echo '<input type="radio" name="ver[q]" value="$rst[text]">
<img src="images/verify/'
.$rst[name].'.png">';
}
?>


_____________
Стимулятор ~yoomoney - 41001303250491
inpost
И ещё, для запросов же надо писать WHERE , а ты лепишь в ORDER BY своё условие...

_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
Valick
нашел уязвимость
в сессию надо сохранять id картинки и в значении radio тоже
while($rst=mysql_fetch_assoc($res)){
if($r==$a++) {
$_SESSION[ver]=$rst[id];
echo 'Выберите картинку, соответствующую признаку <b>'.$rst[text].'</b><br>';
}
echo '<input type="radio" name="ver[q]" value="$rst[id]">
<img src="images/verify/'
.$rst[name].'.png">';
}


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

_____________
Стимулятор ~yoomoney - 41001303250491
asdf27
В итоге делаю пока черновую модель с двумя запросами.
inpost подтолкнул на мысль, ключевое слово WHERE :)
$res02=mysql_query("SELECT * FROM  `verify` WHERE `text`!='$_SESSION[ver]' ORDER BY rand() LIMIT 4");


Цитата
нашел уязвимость
в сессию надо сохранять id картинки и в значении radio тоже


value в радио просто не дописал, там будет имя картинки. В таблице картинок id не понадобилось. На принимающей странице будет так же запрос и сверка текста картинки с $_SESSION[ver].

Картинки не генерируются, а имеют предопределенное название, поэтому в плане обхода защиты, "образумить" бота труда не составит. Со временем улучшим :)

Спасибо всем, материал изучу, а пока так:

<?php
session_start();
require_once '../sys/mysql.php';
$res01=mysql_query("SELECT * FROM verify order by rand() LIMIT 1");
$res001= mysql_fetch_assoc($res01);
$_SESSION[ver]=$res001[text];
echo 'Выберите картинку, соответствующую признаку <b>'.$res001[text].'</b><br>';

$res02=mysql_query("SELECT * FROM `verify` WHERE `text`!='$_SESSION[ver]' ORDER BY rand() LIMIT 4");
echo '<form action="verify.php" method="POST">
<div style="display: none;"><input checked type="radio" value="agree" name="ver[]"></div>
<input type="radio" name="ver[]"><img src="images/verify/'
.$res001[name].'.png">

'
;

while ($res002= mysql_fetch_assoc($res02)) {
echo '<input type="radio" name="ver[]"><img src="images/verify/'.$res002[name].'.png">';
}


?>
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.