Показать полную графическую версию : запрос в MySQL из PHP с условием. что-то не так делаю
koresaram
07-08-2006, 13:48
$minsquare_values=$HTTP_GET_VARS['minsquare'];
if ($minsquare_values=="") {$square_query="WHERE field7 >= '0'";}
else {
$square_query="WHERE field7 >= '$minsquare_values'";
}
print "$square_query"; // это для проверки чего поступает на выход
$result = mysql_query("SELECT * FROM realty $square_query") or die ("не сработало" .mysql_error());
при запуске скрипт выдает
WHERE field7 >= '0' (это результат строки print "$square_query"; // это для проверки чего поступает на выход )
и выводит всю таблицу базы целиком. причем независимо от того заполнено поле minsquare в форме или нет. что я не так делаю?
koresaram
1. тема создана не в том разделе форума.(см. раздел "Вебмастеру")
2.
$square_query="WHERE field7 >= '0'";
зачем ноль заключен в кавычки?... у field7 тип не числовой?
3. приведите код формы, которая обрабатывается этим скриптом. возможно причина в ней.
каким методом отправляются данные. Вы точно уверены, что GET?
koresaram
07-08-2006, 14:52
числовой вроде. там только цифры вбиты. целиком это выглядит так:
сама форма:
<form name='realtyform' action='realty.php' method=get>
<table border="1" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="100%" id="AutoNumber1">
<tr>
<td width="50%">
<select size=9 name=direction[] multiple>
<option value=Север>Север</option>
<option value=Северо-Восток>Северо-Восток</option>
<option value=Восток>Восток</option>";
<option value=Юго-Восток>Юго-Восток</option>
<option value=Юг>Юг</option>
<option value=Юго-Запад>Юго-Запад</option>
<option value=Запад>Запад</option>
<option value=Северо-Запад>Северо-Запад</option>
<option value=Центр>Центр</option>
</select>
</td>
<td width="50%">
<select name=dogovor>
<option value="аренда" checked>Аренда</option>
<option value="продажа">Продажа</option>
</select> <br>
Площадь: от <input type=text name=minsquare value=""> до <input type=text name="maxsquare"><br>
Цена: от <input type=text name="minprice" value=""> до <input type=text name="maxprice">
</td>
</tr>
<tr>
<td width="100%" colspan="2"><INPUT TYPE=Submit VALUE=Искать style=font-size: 8pt> <input type=reset value=Сброс style=font-size: 8pt></td>
</tr>
</table>
-------- конец формы-----------
скрипт:
$direction_values=$HTTP_GET_VARS['direction'];
$dogovor_values=$HTTP_GET_VARS['dogovor'];
$minsquare_values=$HTTP_GET_VARS['minsquare'];
$maxsquare_values=$HTTP_GET_VARS['maxsquare'];
$minprice_values=$HTTP_GET_VARS['minprice'];
$maxprice_values=$HTTP_GET_VARS['maxprice'];
for ($i = 0; $i <= 9; $i++) {
print "$direction_values[$i] ";
};
if ($minsquare_values=="") {$square_query="WHERE field7 >= '0'";}
else {
$square_query="WHERE field7 >= '$minsquare_values'";
}
print "$square_query";
print "$dogovor_values $minsquare_values $maxsquare_values $minprice_values $maxprice_values";
print "<table width='100%' border=1><tr><td>Лот</td><td>Направление</td><td>Договор</td><td>Мин./Макс. цена</td><td>Мин./Макс. площадь</td></tr>";
$result = mysql_query("SELECT * FROM realty $square_query") or die ("не сработало" .mysql_error());
в итоге: если не заполнять никакие поля в форме а играть только с полем minsquare то в запрос идет WHERE field7 >= '0' и выводит всю таблицу базы целиком независимо от того заполнено поле в форме или нет.
если заполнить и другие поля в форме то тогда в запрос идет WHERE field7 >= 'значение введенное в форму' но выводит опять таки всю базу целиком не руководствуясь заданным условием.
1. если формат поля field7 числовой, то кавычки не нужны.
уберите их и ограничение должно заработать
2. я сейчас больше ошибок не вижу, может быть кто-то(кхм-кхм, Влад...)) увидит, почему если заполнить только одно поле minsquare, а остальные не трогать, то заполненное значение не передается в переменную $HTTP_GET_VARS['minsquare'];
(я правельно понял проблему?)
Vlad Drakula
07-08-2006, 15:24
koresaram
koresaram
1. тема создана не в том разделе форума.(см. раздел "Вебмастеру")
koresaram
блин... отличный скрипт для взлома базы данных вашего сервера...
вам обязательно нужно почить статьи о создании защищенных от взлома системм, а то в поле minprice_values можно записать почти любой кусок SQL кода...
koresaram
07-08-2006, 15:42
1. если формат поля field7 числовой, то кавычки не нужны.
уберите их и ограничение должно заработать
if ($minsquare_values=="") {$square_query="WHERE field7 >= 0";}
else {
$square_query="WHERE field7 >= $minsquare_values";
}
заменил блок условия. не работает. все опять так как описано :(
да, проблема понята верно - при незаполнении других полей вбитое значение не передается скрипту. дальше я так понимаю будет следующая проблема - не будет срабатывать условие. потому как если все заполнить то в запрос идет нужное, но выбирает всю базу. а в условии фигурирует только поле minsquare и больше ничего...
блин... отличный скрипт для взлома базы данных вашего сервера...
вам обязательно нужно почить статьи о создании защищенных от взлома системм, а то в поле minprice_values можно записать почти любой кусок SQL кода...
там ломать нечего :) там нету ничего только вот эта пробная база и все :) я б почитал только боюсь что не пойму нифига - раз и два как бы это все заставить работать а? :)
koresaram
07-08-2006, 16:27
тьфу (много мата) работает тама блин все. это я в другую графу смотрел и подставлял в форму числа которые были заведомо меньше значений в базе (перепутал с ценой там числа на порядок меньше) поэтому он мне и выдавал всю базу что все объекты подходили по условию :) поехал я дальше условия составлять, а про безопасность мы еще поговорим :)
XCodeR
mysql нормализует параметры в запросе автоматически. Для него нет разницы, в кавычках или без них вы обращаетесь к числовому полю.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.