![]() |
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]() ![]() ![]() |
|
Nitronka |
|
||||||
![]() Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 16.4.2008 Где: Казань Репутация: нет Всего: нет |
База данных bank создана с помощью phpMyAdmin 2.6.1. MySQL 5.0.45 Apache/2.2.4
В базе таблица users имеет тип InnoDB. При первоначальном внесении новой записи выполняется следующий запрос:
где:
Значение 0 в запросе имеет тот смысл, что пока пользователь не активирует свой аккаунт через отправленное ему письмо, содержащее $uniq_id, значение поля status в таблице users сохраняется равным нулю.После активации необходимо изменить это значение на 1. Делается это следующим образом:
Несмотря на то, что после работы сценария выдаётся: Ваша учетная запись активирована. Обновление в таблице не происходит, как был ноль в status, так он и остаётся. Более того, при попытке намеренно заново активировать аккаунт,где status я сделал =1 через этот же запрос Update только средствами phpMyAdmin, всеравно выводится: Ваша учетная запись активирована. а по логике должно быть: Ваша учетная запись уже активирована. Не понимаю,что происходит,где что не так сделал????! |
||||||
|
|||||||
Kirsan |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 4.11.2008 Где: г.Волжский, Волго градская обл. Репутация: нет Всего: 1 |
Попробуйте в консоли выполнить UPDATE-запрос. Вероятно, вернётся какая-либо ошибка или что-то в этом роде. Тогда более понятны станут причины странного поведения скрипта.
p.s. в таком виде этот скрипт позволит злоумышленникам удалить всю таблицу с пользавателями в считанные минуты. НИКОГДА нельзя данные из массивов $_GET и $_POST направлять сразу в запрос. В них может храниться что угодно, в том числе и SQL-инъекции. |
|||
|
||||
Nitronka |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 16.4.2008 Где: Казань Репутация: нет Всего: нет |
У меня стоит Denwer, поэтому я не совсем понимаю как вызвать консоль MySQL Спасибо за совет! В принципе я не передаю данные напрямую, просто здесь я привёл упрощённый вариант скрипта, опустив проверку посредством регул-выражений. честно говоря,над защитой я пока основательно не думал - надо решить вопрос с регистрацией. есть предположение,что это связано с типом таблицы InnoDB (мне необходима поддержка транзакций), и вследствии этого не сохраняются изменения. |
|||
|
||||
Kirsan |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 4.11.2008 Где: г.Волжский, Волго градская обл. Репутация: нет Всего: 1 |
Консоль доступна и в phpMyAdmin (см. скриншот).
В скрипте закомментируйте строку
а то, что напечатает var_dump($sql), скопируйте в phpMyAdmin туда, где указано на скриншоте. Там же выполните запрос и посмотрите, что вернётся. Присоединённый файл ( Кол-во скачиваний: 4 ) ![]() |
|||
|
||||
Nitronka |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 16.4.2008 Где: Казань Репутация: нет Всего: нет |
Вот что напечатал var_dump($sql):
а вот что вернул запрос в phpMyAdmin: Затронутые ряды: 0 (Запрос занял 0.0009 сек) SQL-запрос: UPDATE users SET `status` =1 WHERE ( uniq_id = '68042cfef052c4c1f5cf348764a65e51' AND STATUS =0 ) без изменений... |
|||
|
||||
Kirsan |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 4.11.2008 Где: г.Волжский, Волго градская обл. Репутация: нет Всего: 1 |
Затронутые ряды: 0
Значит не обновилась ни одна строка. Попробуйте там же выполнить запрос
Если ничего не вернёт, то значит что-то с WHERE частью запроса. Сверяйте то, что запрашивается с тем, что в базе. Это сообщение отредактировал(а) Kirsan - 22.4.2009, 00:05 |
|||
|
||||
Nitronka |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 16.4.2008 Где: Казань Репутация: нет Всего: нет |
Вот с этого мне и следовало начинать!!!!! ![]() uniq_id в таблице имело тип varchar(10), а генерируемый и затем используемый везде uniq_id имеет гораздо большую длину! Поэтому при первом внесении данных в базу "отрезался" хвост строки, поэтому и select ничего не выдал. Поменял длину на varchar(50) - сразу всё заработало! Спасибо за помощь! ![]() |
|||
|
||||
![]() ![]() ![]() |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | PHP: Базы Данных | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |