Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Срочные ссылки  (Прочитано 15058 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Svekor
Интересующийся

ru
Offline Offline

« : 26-05-2019 13:56 » 

Здравствуйте читающие. Пытаюсь сделать ссылку на Denwer со сроком жизни. Нашел урок в интернете, но и оригинал и мои все правки выдают какую ни будь ошибку. Кто сможет подскажите пожалуйста, что здесь не так ?
Код: (PHP)
$query = $db->prepare{
    "INSERT INTO pending_users (username, token, tstamp) VALUES (?, ?, ?)"
};
$query->execute{
    array(
        $username,
        $token,
        $_SERVER["REQUEST_TIME"]
    )
};

$url = "http://example.com/activate.php?token=$token";

///////

$message = <<<ENDMSG
        Thank you for signing up at our site.  Please go to
$url to activate your account.
ENDMSG
;

mail($address, "Activate your account", $message);

///////

// получаем токен
if (isset($_GET["token"]) && preg_match('/^[0-9A-F]{40}$/i', $_GET["token"])) {
    $token = $_GET["token"];
}
else {
    throw new Exception("токен не валиден.");
}
 
В таком исполнении пишет - ,, Неустранимая ошибка: Uncaught исключение исключение с сообщением 'токен не валиден.- в ... Z:\home\site-15 \ www \ index.php: 34 трассировка стека: #0 {main},,
// проверяем токен
$query = $db->prepare("SELECT username, tstamp FROM pending_users WHERE token = ?");
$query->execute(array($token));
$row = $query->fetch(PDO::FETCH_ASSOC);
$query->closeCursor();

if ($row) {
    extract($row);
}
else {
    throw new Exception("токен не валиден.");
}

// активируем пользовательский аккаунт
// ...

// удаляем токен из базы
$query = $db->prepare{
    "DELETE FROM pending_users WHERE username = ? AND token = ? AND tstamp = ?"};
$query->execute(
    array(
        $username,
        $token,
        $tstamp
    )
);

// 1 день в секундах = 60 секунд * 60 минут * 24 часа
$delta = 86400;

// проверка
if ($_SERVER["REQUEST_TIME"] - $tstamp > $delta) {
    throw new Exception("время жизни токена истекло.");
}
// активируем пользовательский аккаунт
// ...
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 26-05-2019 18:22 » 

Попробуйте правильно оформить пост, чтобы понять какой порядок вызова ваших методов
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Svekor
Интересующийся

ru
Offline Offline

« Ответ #2 : 27-05-2019 09:22 » 

Спасибо ребята, буду пробовать.
Записан
Svekor
Интересующийся

ru
Offline Offline

« Ответ #3 : 27-05-2019 14:48 » 

Может кто подскажет уроки в интернете по написанию истекающих URL адресов.  С этим кодом не получается, я его уже несколько дней пробую в разных правках, все равно выдает какую ни будь ошибку.
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #4 : 27-05-2019 19:46 » 

Svekor, попробуй словами самому себе объяснить, что это должно делать и как это будет работать. Поверь, никаких уроков не нужно, только чуть-чуть логики.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #5 : 28-05-2019 05:31 » 

Svekor, попробуй словами самому себе объяснить, что это должно делать и как это будет работать. Поверь, никаких уроков не нужно, только чуть-чуть логики.

Если упорядочить стартпост, то все станет на свои места
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Svekor
Интересующийся

ru
Offline Offline

« Ответ #6 : 30-05-2019 14:11 » 

Здравствуйте, я так понимаю что все кроется здесь - Код: (PHP) if (isset($_GET["token"]) && preg_match('/^[0-9A-F]{40}$/i', $_GET["token"])) {
    $token = $_GET["token"];
Записан
Svekor
Интересующийся

ru
Offline Offline

« Ответ #7 : 31-05-2019 14:57 » 

 Здравствуйте, сейчас пробую частями, вот переделал начало кода, ошибку не пишет.
Код: (PHP)
$token = md5(uniqid($username, true));
if ($err=="")
                {
mysql_query (
 "INSERT INTO pending_users (username, token, tstamp) VALUES ('".$username."','".$token."','".$tstamp."', )"
);

А вот следующая часть выдает ошибку - ,, Предупреждение: mysqli_query () ожидает, что параметр 1 будет строкой, массивом, заданным в on line 74.
Код: (PHP)
 mysql_query(
    array(
        '".$username."',
        '".$token."',
        $_SERVER["REQUEST_TIME"]
    )
); //// on line 74
  Что здесь не так ? пока не могу понять. Кто знает подскажите.
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #8 : 31-05-2019 20:55 » 

https://www.php.net/manual/ru/function.mysql-query.php
Читай внимательно.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Svekor
Интересующийся

ru
Offline Offline

« Ответ #9 : 01-06-2019 05:24 » 

RXL - Большое спасибо, все переделал. Ошибка ушла.
Записан
Svekor
Интересующийся

ru
Offline Offline

« Ответ #10 : 01-06-2019 15:26 » 

Добрый вечер, следующая часть кода пишет - ,, Fatal error: Uncaught exception 'Exception' with message 'токен не валиден.' in register.php:96 Stack trace: #0 {main} thrown ,,

Код: (PHP)
else {
    throw new Exception ("токен не валиден.");
}

Я сегодня читал , пробовал разные варианты - либо все так, либо все ломает. Что здесь то не так?  Или ошибка может быть ниже .... ? Кто в силе подскажите.
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #11 : 02-06-2019 06:54 » 

Добрый вечер, следующая часть кода пишет - ,, Fatal error: Uncaught exception 'Exception' with message 'токен не валиден.' in register.php:96 Stack trace: #0 {main} thrown ,,

Код: (PHP)
else {
    throw new Exception ("токен не валиден.");
}

Я сегодня читал , пробовал разные варианты - либо все так, либо все ломает. Что здесь то не так?  Или ошибка может быть ниже .... ? Кто в силе подскажите.
Ну... так вы же сами вызывает обработчик  - хотите без фатальных ошибок? echo
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Svekor
Интересующийся

ru
Offline Offline

« Ответ #12 : 02-06-2019 07:14 » 

Честно говоря не совсем понял ответа, но если поменять else на echo - ошибку пишет такую же.
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #13 : 02-06-2019 11:12 » 

Добрый вечер, следующая часть кода пишет - ,, Fatal error: Uncaught exception 'Exception' with message 'токен не валиден.' in register.php:96 Stack trace: #0 {main} thrown ,,

Код: (PHP)
else {
    throw new Exception ("токен не валиден.");
}

Я сегодня читал , пробовал разные варианты - либо все так, либо все ломает. Что здесь то не так?  Или ошибка может быть ниже .... ? Кто в силе подскажите.

Код: (PHP)
else {
    echo "токен не валиден.";
}

Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Svekor
Интересующийся

ru
Offline Offline

« Ответ #14 : 02-06-2019 14:56 » 

Нет, что то не так. В таком варианте - просто выводит на экран в постоянном режиме ,,токен не валиден,, Да ладно - начал все сначала.  Почему первая часть кода пишет - ,,Фатальная ошибка: звонок в функции-члена подготовить() на не-объект,,
Код: (PHP)
$query = $db->prepare(
    "INSERT INTO pending_users (username, token, tstamp) VALUES (?, ?, ?)"
);
Я пробовал другие варианты, ошибка уходит, но БД запись не идет. Это часть кода из урока. Я попробовал по своему - запись в БД идет.
Код: (PHP)
mysql_query("INSERT INTO `pending_users` (`username`, `tstamp`,`token`) VALUES ('".$login."','".$tstamp."', '".md5($token)."')");
Честно говоря не удобно и надоедать на форуме, но поймите - очень нужно сделать.  Я прошу подскажите, что в изначальной части кода не так ?
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #15 : 02-06-2019 17:25 » 

а где строка подключения к базе?
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Svekor
Интересующийся

ru
Offline Offline

« Ответ #16 : 03-06-2019 05:36 » 

Это файл register.php, регистрация пользователя работает. Я думаю, что здесь причина в том - все  делается на Denwer, а в нем нет библиотеки PDO. Не так ли ?
Записан
Svekor
Интересующийся

ru
Offline Offline

« Ответ #17 : 03-06-2019 06:01 » 

Да я сейчас вставил код
Код: (PHP)
try {
    $db = new PDO(DB_DRIVER.":host=".DB_HOST.";dbname=".DB_NAME,DB_USER, DB_PASS);
} catch (PDOException $e) {
    echo "Error: " . $e->getMessage();
}
в форму регистрации, пишет ошибку - ,,Error: could not find driver ,, А как установить Не понял
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #18 : 03-06-2019 07:52 » 

Видимо тут константа DB_DRIVER не определена. Замени ее на строку. Читай в доке о PDO.

Бездумной копипастой много не наделаешь. Пора читать документацию и самоучители!
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Svekor
Интересующийся

ru
Offline Offline

« Ответ #19 : 03-06-2019 15:15 » 

Согласен на все сто, я сегодня как раз и изучал PDO, делал пробные уроки.
Записан
Svekor
Интересующийся

ru
Offline Offline

« Ответ #20 : 04-06-2019 14:24 » 

Здравствуйте еще раз, хорошо когда есть где что почитать, а вот сейчас дошел до
Код: (PHP)
// 1 день в секундах = 60 секунд * 60 минут * 24 часа
$delta = 86400;

// проверка
if ($_SERVER["REQUEST_TIME"] - $tstamp > $delta) {
    throw new Exception("время жизни токена истекло.");
}

// активируем пользовательский аккаунт
и тут выдает ошибку ,,Error on line 61: parse error, unexpected T_VARIABLE($delta), expecting ')'! ,, Что здесь $delta не так ? где, что можно почитать ? Подскажите пожалуйста.
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #21 : 04-06-2019 22:32 » 

Нередко синтаксическая ошибка в том же файле, написанная выше, сбивает парсер и он ругается совсем не там. Ищи выше по коду пропущенную скобку.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Svekor
Интересующийся

ru
Offline Offline

« Ответ #22 : 05-06-2019 07:51 » new

Понял, спасибо
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines