[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Отправка запроса в БД при нажатии на ссылочку
Undertaker
Решил сделать так что бы при нажатии ссылку отправлялся запрос в базу для передвижения игрока по локациям, но вот незадача заругался на меня скрипт, говорит Notice: Undefined index: query in C:\xampp\htdocs\prov.php on line 4, или для более удобного понимания вот на эту строку:
if($_GET["query"] == "update"){
что ему не нравиться?
Код приведён здесь:

include('cone.php');
session_start(); //стартуем сессию
$login = $_SESSION['login']; //Заносим логин в переменную
if($_GET["query"] == "update"){
$query = mysql_query("update `users` set `town`='3' where `login`= '$login'"); //. $_GET["login"]);
}
echo '<A HREF="game.php?query=update" >Покецентр</A> |';


P.S. $_session я использовал для более удобного выведения логина через $_GET вывести не удалось(((

_____________
Из отчета службы безопасности:
... по поводу взлома китайцами сервера Пентагона:
1) Каждый китаец попробовал один пароль.
2) Каждый второй пароль был - maodzedun.
3) На 657983241-й попытке сервер согласился что у него пароль - maodzedun
Valick
Цитата
что ему не нравиться?

Цитата
Notice: Undefined index: query

он говорит о том что нет такой переменной $_GET["query"]
__
а вообще несколько запутанный алгоритм

_____________
Стимулятор ~yoomoney - 41001303250491
NitroGenerate
Вы проверяете переменную в файле.
Давайте рассмотрим файл prov.php как отдельный и полностью рабочий (если он таковой, то вы сможете его открыть на пряму http://site.ru/prov.php )(если он лежит в корне )
Открывая его напрямую http://site.ru/prov.php мы не определяем ему переменную get - $_GET["query"], НО у вас в файле стоит проверка этой переменной, файл открывает массив гет с ключем query и что он обнаруживает!? А ничего, нет там.
Но если мы откроем этот файл так: http://site.ru/prov.php?query=update ... О чудо, ошибка исчезла. - А почему?
Все просто, вы передали в GET массив ключ query с текстом update, теперь ваш скрипт видит нашу GET переменную и спокойно обрабатывает.

Выход такой, прежде чем работать с переменными GET, их необходимо определять(проверять наличие, содержание и тд.)
Undertaker
Valick
Цитата
а вообще несколько запутанный алгоритм

Я просто другого не знаю, может есть более простые методы?



_____________
Из отчета службы безопасности:
... по поводу взлома китайцами сервера Пентагона:
1) Каждый китаец попробовал один пароль.
2) Каждый второй пароль был - maodzedun.
3) На 657983241-й попытке сервер согласился что у него пароль - maodzedun
Undertaker
NitroGenerate
Цитата
О чудо, ошибка исчезла. - А почему?

Да ты шаман, спасибо однако))) Может быть тогда вдогонку подскажешь у меня есть запрос:
update `users` set `town`='$r' where `login`= '$login'

и несколько ссылок
echo '<A HREF="prov.php?query=update" >Центр</A> |
<A HREF="prov.php?query=update" >Супермаркет</A> |
<A HREF="prov.php?query=update" >Научный Институт</A> '

Как можно к каждой ссылке число привязать определённое что бы оно в $r записывалось... Думаю так

<A HREF="prov.php?query=update&$r=5" >Супермаркет</A> |
или есть более лёгкий способ?

_____________
Из отчета службы безопасности:
... по поводу взлома китайцами сервера Пентагона:
1) Каждый китаец попробовал один пароль.
2) Каждый второй пароль был - maodzedun.
3) На 657983241-й попытке сервер согласился что у него пароль - maodzedun
Undertaker
Решил сам
$r=@$_GET['r'];
if(@$_GET["query"] == "update"){
$query = mysql_query("update `users` set `town`='$r' where `login`= '$login'"); //. $_GET["login"]);
}
echo '<A HREF="prov.php?query=update&r=1" >Покецентр</A> |
<A HREF="prov.php?query=update&r=3" >Супермаркет</A> |
<A HREF="prov.php?query=update&r=4" >Научный Институт</A>'
;

правда notice выходят, отключил через @...

_____________
Из отчета службы безопасности:
... по поводу взлома китайцами сервера Пентагона:
1) Каждый китаец попробовал один пароль.
2) Каждый второй пароль был - maodzedun.
3) На 657983241-й попытке сервер согласился что у него пароль - maodzedun
NitroGenerate
$r=@$_GET['r'];
if(@$_GET["query"] == "update"){
$query = mysql_query("update `users` set `town`='$r' where `login`= '$login'"); //. $_GET["login"]);
}
echo '<A HREF="prov.php?query=update&r=1" >Покецентр</A> |
<A HREF="prov.php?query=update&r=3" >Супермаркет</A> |
<A HREF="prov.php?query=update&r=4" >Научный Институт</A>'
;

$_GET['r'] переменной может и не быть.
тогда в $r запишется пустота.
И будет запрос:
update `users` set `town`='' where `login`= '$login'

И тем самым вы уничтожите город, у пользователя.
Опять же, нужна проверка правильности.
Вначале скрипта, все переменные, которые в дальнейшем вы будите использовать проверяйте на наличие и на правильное заполнение.
то есть если это r там должны быть только цифры. Если значения нет то прекращать дальнейшую работу со страничкой. Иначе можно такого наворотить...
Пример обращения к файлу, уничтожающему город:
http://site.ru/prov.php?query=update
bestxp
Цитата
$r=@$_GET['r'];
if(@$_GET["query"] == "update"){
  $query = mysql_query("update `users` set `town`='$r' where `login`= '$login'"); //. $_GET["login"]);
}


херня твой способ

правильно
$query = isset($_GET['query']) ? $_GET['query'] : false;
$r= isset($_GET['r']) ? $_GET['r'] : false;
if($r !== false && $query !== false){
$r = mysql_real_escape_string($r); //sql inj remove
$query = mysql_query("update `users` set `town`='$r' where `login`= '$login'");
}
Undertaker
bestxp
Цитата
херня твой способ

Да согласен, я бы даже сказал костыль, но именно для этого я его и выложил, что бы осудили, и натолкнули как надо делать)



_____________
Из отчета службы безопасности:
... по поводу взлома китайцами сервера Пентагона:
1) Каждый китаец попробовал один пароль.
2) Каждый второй пароль был - maodzedun.
3) На 657983241-й попытке сервер согласился что у него пароль - maodzedun
Undertaker
NitroGenerate
Воспользовался советом и поставил проверку, теперь город не "испортиться" от такого запроса
Даже такие запросы как
http://localhost/location.php?query=update&r=1,5

и
http://localhost/location.php?query=update
не способны положить отсутствующее число

_____________
Из отчета службы безопасности:
... по поводу взлома китайцами сервера Пентагона:
1) Каждый китаец попробовал один пароль.
2) Каждый второй пароль был - maodzedun.
3) На 657983241-й попытке сервер согласился что у него пароль - maodzedun
Быстрый ответ:

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