Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
Страницы: (2) [1] 2  ( Перейти к первому непрочитанному сообщению )  
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> Проблема с активацией пользователей, Не могу найти ошибку в скрипте активации
lansdorf  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 13
Пользователь №: 42870
На форуме: 9 месяцев, 3 дня
Карма:




Здравствуйте!

Данный вопрос здесь уже поднимался, но так как автор темы видимо не сформулировал правильно суть проблемы, то его отправили учить web программирование и он оттуда не вернулся. Поэтому решение данной проблемы осталось неизвестно. Файлы там тоже приложены.

Я тоже столкнулся с данным скриптом и зашел в тупик, хочу с вами попробовать найти решение проблемы активации пользователей по ссылке, высылаемой на электронный адрес пользователя для подтверждения его регистрации, и может быть данный пример будет другим наукой.

Напомню, что пользователю после регистрации в браузерной игре высылается :

Подтвердить e-mail адрес : ".$con[3]."/activate.php?
code=".md5($_POST['r_login'].$_POST['r_pass'].date("z"))."


данный хеш сходится с $_GET['code'], котрый участвует в запросе

$user_sql_query = mysql_query("SELECT id FROM users WHERE check_mail = '0' and MD5(CONCAT(login,pass,'".date("z")."'))= '".$_GET['code']."' limit 0, 1", $full_base); файла активации.

В таблице user точно присутствует user с атрибутом check_mail равным нулю, но почему то результат этого запроса всегда равен одному и тому же значению, а именно Resource #id всегда одно и тоже, хотя у пользователя атрибут id в таблице users давно совсем другой.

Видимо поэтому выражение mysql_num_rows($user_sql_query) никогда не равно единице. И активация пользователя не происходит.

Даже подставляя правильное значение id прямо в запрос:

mysql_query("UPDATE users SET check_mail=1 WHERE id = '".$user_array['id']."'", $full_base); данные в таблице users не обновляются и регистрация остается не подтвержденной.

Что вы думаете по данному примеру, в чем тут может быть проблема, ведь никаких сообщений об ошибках в процессе работы не выводится.

Присоединённый файл ( Кол-во скачиваний: 1 )
Присоединённый файл  activate.php
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Игорь_Vasinsky  
[x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Лысый и злой
******

Профиль
Журнал
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 26054
Пользователь №: 21350
На форуме: 6 лет, 10 месяцев, 8 дней
Карма: 727

Не курю:
1 год, 3 месяца, 25 дней


Цитата
всегда равен одному и тому же значению, а именно Resource #id

круто. а вы что там рассчитывали увидеть?

в мануале так и написано
Цитата
mysql_query() возвращает дескриптор результата запроса (resource), или FALSE в случае ошибки.


Цитата
Видимо поэтому выражение mysql_num_rows($user_sql_query) никогда не равно единице.

если запрос верный и запись найдена - то будет, с чего вы взяли то что нет?

Цитата
Даже подставляя правильное значение id прямо в запрос:


а это как получено?

Цитата
$user_array['id']



вообще - если всё кажеться странным и не справедливым - по какой то причине - всегда помогает бутылка водки распечатка SQL запроса, что бы не казалось и не придвиделось - это проверяется

$sql = "SELECT id FROM users WHERE check_mail = '0' and MD5(CONCAT(login,pass,'".date("z")."'))= '".$_GET['code']."' limit 0, 1";

exit($sql);


и так далее - пока остаются подозрительно не работающие запросы в коде.

так же на вермя отладки - помогает отлов ошибок

$query = mysql_query($sql) or die(mysql_error());


Цитата
Что вы думаете по данному примеру, в чем тут может быть проблема,

так дело в руках и голове в 99% случаях.

Цитата
ведь никаких сообщений об ошибках в процессе работы не выводится.

ошибки тоже не всегда показывают себя. как ловить ошибки при работе с бд - я показал выше
а вообще - если дебажите код - то не ленитесь начинать его с

<?php
ini_set("display_errors", 1);
error_reporting(-1);


--------------------
Халявные ответы кончились.
Если нужен готовый код - готовьтесь заплатить.
Райкин тоже был артист

Возле дома был сарай
А когда всё хорошо
Можно просто покурить

user posted image
http://ufa102.xyz/
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Игорь_Vasinsky  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Лысый и злой
******

Профиль
Журнал
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 26054
Пользователь №: 21350
На форуме: 6 лет, 10 месяцев, 8 дней
Карма: 727

Не курю:
1 год, 3 месяца, 25 дней


Цитата
Данный вопрос здесь уже поднимался, но так как автор темы видимо не сформулировал правильно суть проблемы


топик 2014 года рождения))))
антиквариат собираете?


date("z")


ссылка для активации будет корректна тока на текущей день.


--------------------
Халявные ответы кончились.
Если нужен готовый код - готовьтесь заплатить.
Райкин тоже был артист

Возле дома был сарай
А когда всё хорошо
Можно просто покурить

user posted image
http://ufa102.xyz/
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
lansdorf  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 13
Пользователь №: 42870
На форуме: 9 месяцев, 3 дня
Карма:




Цитата
всегда равен одному и тому же значению, а именно Resource #id

Здесь я расчитывал увидеть значение id пользователя, который еще не активирован, тем более что он всего один.

а это как получено?

Цитата
$user_array['id']

А т.к. пользователь всего один, то его id я вижу в таблице.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Игорь_Vasinsky  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Лысый и злой
******

Профиль
Журнал
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 26054
Пользователь №: 21350
На форуме: 6 лет, 10 месяцев, 8 дней
Карма: 727

Не курю:
1 год, 3 месяца, 25 дней


lansdorf

У вас с рождения такой подход к ответу на вопросы? :lol:

смотрите логику получения данных из бд

//Формируем запрос
$sql = "select * from table";
//Отправили запрос в бд
$result = mysql_query($sql);
//если найдены строки, т.е. в ответе строк > 0
if(mysql_num_rows($result)>0){
//разбираем каждую строку в ассоциативный массив
while($row = mysql_fetch_assoc($result)){
//тут все поля из таблицы - которые вы в select прописали
echo $row['id'];
}
}

else{
echo 'Записей не найдено!';
}



вы запросы выводили сами? как они выглядят?
ошибки ловили - как я показал?


--------------------
Халявные ответы кончились.
Если нужен готовый код - готовьтесь заплатить.
Райкин тоже был артист

Возле дома был сарай
А когда всё хорошо
Можно просто покурить

user posted image
http://ufa102.xyz/
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
lansdorf  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 13
Пользователь №: 42870
На форуме: 9 месяцев, 3 дня
Карма:




Игорь_Vasinsky

Спасибо за участие и совет, все рецепты прописал.

Но ошибки так и не выводятся, как будто их нет.

Запрос на обновление данных срабатывает пока только когда вводится вручную в phpMyAdmin.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Kusss  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1394
Пользователь №: 28976
На форуме: 5 лет, 5 месяцев, 24 дня
Карма: 78




lansdorf
ini_set("display_errors",1);
error_reporting(E_ALL);
в самое начало скрипта, для вывода всех ошибок
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
lansdorf  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 13
Пользователь №: 42870
На форуме: 9 месяцев, 3 дня
Карма:




Запросы выводил сам.

$sql="SELECT id FROM users WHERE check_mail = '0' and MD5(CONCAT(login,pass,'".date("z")."'))= '".$_GET['code']."' limit 0, 1";

mysql_num_rows($sql)=0, хотя в таблице есть строка, соответствующая условиям запроса.

Поэтому $row['id'] не выводит.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Игорь_Vasinsky  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Лысый и злой
******

Профиль
Журнал
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 26054
Пользователь №: 21350
На форуме: 6 лет, 10 месяцев, 8 дней
Карма: 727

Не курю:
1 год, 3 месяца, 25 дней


Цитата
$sql="SELECT id FROM users WHERE check_mail = '0' and MD5(CONCAT(login,pass,'".date("z")."'))= '".$_GET['code']."' limit 0, 1";

ну чё ты даже не покажешь что в итоге из этого получается - то что ты в PMA суёшь.. эх.


выполни запрос в PMA

SELECT id FROM users WHERE check_mail = '0' and MD5(CONCAT(login,pass,'".date("z")."'))


--------------------
Халявные ответы кончились.
Если нужен готовый код - готовьтесь заплатить.
Райкин тоже был артист

Возле дома был сарай
А когда всё хорошо
Можно просто покурить

user posted image
http://ufa102.xyz/
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Kusss  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1394
Пользователь №: 28976
На форуме: 5 лет, 5 месяцев, 24 дня
Карма: 78




lansdorf
$code = mysql_real_escape_string($_GET['code']);
$sql="
SELECT
id
FROM
`users`
WHERE
`check_mail` = '0' AND
MD5(CONCAT(login,pass,'"
.date("z")."'))= '$code'
LIMIT
0, 1
"
;
$result = mysql_query($sql);
if (mysql_num_rows($result) > 0) {
echo 'Найдено '.mysql_num_rows($result).' строк';
} else {
echo 'Ничего не найдено';
}
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
lansdorf  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 13
Пользователь №: 42870
На форуме: 9 месяцев, 3 дня
Карма:




Kusss

Цитата (lansdorf @ 20.04.2016 - 13:39)
ini_set("display_errors",1);
error_reporting(E_ALL);


Да вставил. Один раз сообщило, насчет $date=date("d.m.y"); и все.

Буду искать.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Kusss  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1394
Пользователь №: 28976
На форуме: 5 лет, 5 месяцев, 24 дня
Карма: 78




покажи весь код, а не куски. может ты там "собак" напихал
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
lansdorf  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 13
Пользователь №: 42870
На форуме: 9 месяцев, 3 дня
Карма:




Извиняюсь, за задержку.

Цитата (Игорь_Vasinsky @ 20.04.2016 - 14:53)
выполни запрос в PMA

SELECT id FROM users WHERE check_mail = '0' and MD5(CONCAT(login,pass,'".date("z")."'))


Прикладываю картинку запроса .

PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
lansdorf  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 13
Пользователь №: 42870
На форуме: 9 месяцев, 3 дня
Карма:




Что то картинка исчезла. Сейчас исправлю.

Присоединённое изображение
Присоединённое изображение
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
lansdorf  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 13
Пользователь №: 42870
На форуме: 9 месяцев, 3 дня
Карма:




И вот картинка самой таблицы users, где видна строка с пользователем.

Присоединённое изображение
Присоединённое изображение
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

Опции сообщения  Включить смайлики?
 Включить подпись?
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темыСтраницы: (2) [1] 2  Ответ в темуСоздание новой темыСоздание опроса