Похоже я напортачил чутка, не ту переменную проверяем измени запрос сделай таким:
Code
$q = mysql_query("SELECT * FROM `podarki` WHERE `key` = '$id' AND okkey = '0'") or die(mysql_error());
Весь листинг кода:
Code
<?php error_reporting(E_ALL);
if (isset($_GET['id'])) { //а если okkey != 0, то значит подарок уже активирован! $id = $_GET['id']; $q = mysql_query("SELECT * FROM `podarki` WHERE `key` = '$id' AND okkey = '0'") or die(mysql_error()); $arr = mysql_fetch_assoc($q); if (!empty($arr[id])) { echo "подарок зачислен!"; $u = mysql_query("UPDATE `podarki` SET okkey = '1' WHERE id = '$arr[id]'"); /* дальше ваша фантазия! добавляйте юзеру подарок так: mysql_query("UPDATE `users` SET ... WHERE id='$arr[id_u]'"); */ } else { echo "аррр...либо id не верный либо уже активирован подарок! debug: id($id)";} } else { echo "Нет id в get!"; } ?>
пусто!)
Сообщение отредактировал gmmmm - Среда, 08 Августа 2012, 12:56
$podarok = mysql_query("UPDATE `users` SET donat = '50' WHERE id='$arr[id]'");
замени на $podarok = mysql_query("UPDATE `users` SET donat = '50' WHERE id='$arr[id_u]'"); В $arr[id] мы храним идентификатор таблицы подарков, а в id_u id юзеров пусто!)
экранирование ковычек - далеко не панацея, гугл выдаст способы обхода. Имхо, код надо сразу же писать по-правилам, чтобы потом с очумелыми глазами не шерстить все что понаписал... Как минимум - раз известно, что переменная будет числом - привести ее принудительно к инту. Кстати даже в уроке, что в вашей подписи, не заметил фильтрации переменных, получаемых постом, правда может действительно чего проглядел... Не стоит приучать людей откладывать на потом то что нужно делать сразу. Человеческий фактор - вот основная проблема приложений на пхп. Тут не доглядел, тут позабыл, тут схалтурил - в результате слив в шару проекта, бд с вашими юзерами и их логинами\паролями, которые они везде юзают, и вайп самого проекта... Сам через такое прошел, теперь only jsp xD
существуют иные способы отправить строку в запрос, тот же url-encoding, тот же hex, в общем, нюансов много, и подходить к этой проблеме нужно комплексно. Стоит вспомнить о том, что дырами, в свое время, болел и вконтакте, и фейсбук, и мейл.ру, и множество других гигантов. Достаточно посмотреть на крупные движки форумов, тот же вб, казалось бы, такой крупный проект, а скули находили на протяжении всей его истории. Я не говорю что все продукты на пхп дрявые, тот же дле сейчас вроде со всех сторон укреплен, но и он в своей истории имеет несколько неприятных дырок. Что уж говорить о любительских наработках... Вообще довольно неприятно, когда львиную долю времени приходится думать не о своей софтине, а о хитрожопых пользователях, которые норовят ее грохнуть ява-сервлеты и asp.net таким не болеют, человеческий фактор на порядок меньше, что не может не радовать...
Я же не телепат, может где-то ошибка в запросе к бд. Вообще так-то ошибку пока не вижу логически
Quote
$podarok = mysql_query("UPDATE `users` SET donat = '50' WHERE id='$arr[id_u]'");
это Обновляем юзеров ставим значение колонки donat = 50 если id (?это идентификатор юзера?) id записанного юзера (?а юзер правильно в instalize.php при генерации key INSERT'ится?) пусто!)