Svekor
Интересующийся
Offline
|
|
« : 26-05-2019 13:56 » |
|
Здравствуйте читающие. Пытаюсь сделать ссылку на Denwer со сроком жизни. Нашел урок в интернете, но и оригинал и мои все правки выдают какую ни будь ошибку. Кто сможет подскажите пожалуйста, что здесь не так ? $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
|
|
« Ответ #1 : 26-05-2019 18:22 » |
|
Попробуйте правильно оформить пост, чтобы понять какой порядок вызова ваших методов
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Svekor
Интересующийся
Offline
|
|
« Ответ #2 : 27-05-2019 09:22 » |
|
Спасибо ребята, буду пробовать.
|
|
|
Записан
|
|
|
|
Svekor
Интересующийся
Offline
|
|
« Ответ #3 : 27-05-2019 14:48 » |
|
Может кто подскажет уроки в интернете по написанию истекающих URL адресов. С этим кодом не получается, я его уже несколько дней пробую в разных правках, все равно выдает какую ни будь ошибку.
|
|
|
Записан
|
|
|
|
RXL
|
|
« Ответ #4 : 27-05-2019 19:46 » |
|
Svekor, попробуй словами самому себе объяснить, что это должно делать и как это будет работать. Поверь, никаких уроков не нужно, только чуть-чуть логики.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
Sla
|
|
« Ответ #5 : 28-05-2019 05:31 » |
|
Svekor, попробуй словами самому себе объяснить, что это должно делать и как это будет работать. Поверь, никаких уроков не нужно, только чуть-чуть логики.
Если упорядочить стартпост, то все станет на свои места
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Svekor
Интересующийся
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
Интересующийся
Offline
|
|
« Ответ #7 : 31-05-2019 14:57 » |
|
Здравствуйте, сейчас пробую частями, вот переделал начало кода, ошибку не пишет. $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. mysql_query( array( '".$username."', '".$token."', $_SERVER["REQUEST_TIME"] ) ); //// on line 74 Что здесь не так ? пока не могу понять. Кто знает подскажите.
|
|
|
Записан
|
|
|
|
RXL
|
|
« Ответ #8 : 31-05-2019 20:55 » |
|
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
Svekor
Интересующийся
Offline
|
|
« Ответ #9 : 01-06-2019 05:24 » |
|
RXL - Большое спасибо, все переделал. Ошибка ушла.
|
|
|
Записан
|
|
|
|
Svekor
Интересующийся
Offline
|
|
« Ответ #10 : 01-06-2019 15:26 » |
|
Добрый вечер, следующая часть кода пишет - ,, Fatal error: Uncaught exception 'Exception' with message 'токен не валиден.' in register.php:96 Stack trace: #0 {main} thrown ,, else { throw new Exception ("токен не валиден."); } Я сегодня читал , пробовал разные варианты - либо все так, либо все ломает. Что здесь то не так? Или ошибка может быть ниже .... ? Кто в силе подскажите.
|
|
|
Записан
|
|
|
|
Sla
|
|
« Ответ #11 : 02-06-2019 06:54 » |
|
Добрый вечер, следующая часть кода пишет - ,, Fatal error: Uncaught exception 'Exception' with message 'токен не валиден.' in register.php:96 Stack trace: #0 {main} thrown ,, else { throw new Exception ("токен не валиден."); } Я сегодня читал , пробовал разные варианты - либо все так, либо все ломает. Что здесь то не так? Или ошибка может быть ниже .... ? Кто в силе подскажите. Ну... так вы же сами вызывает обработчик - хотите без фатальных ошибок? echo
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Svekor
Интересующийся
Offline
|
|
« Ответ #12 : 02-06-2019 07:14 » |
|
Честно говоря не совсем понял ответа, но если поменять else на echo - ошибку пишет такую же.
|
|
|
Записан
|
|
|
|
Sla
|
|
« Ответ #13 : 02-06-2019 11:12 » |
|
Добрый вечер, следующая часть кода пишет - ,, Fatal error: Uncaught exception 'Exception' with message 'токен не валиден.' in register.php:96 Stack trace: #0 {main} thrown ,, else { throw new Exception ("токен не валиден."); } Я сегодня читал , пробовал разные варианты - либо все так, либо все ломает. Что здесь то не так? Или ошибка может быть ниже .... ? Кто в силе подскажите. else { echo "токен не валиден."; }
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Svekor
Интересующийся
Offline
|
|
« Ответ #14 : 02-06-2019 14:56 » |
|
Нет, что то не так. В таком варианте - просто выводит на экран в постоянном режиме ,,токен не валиден,, Да ладно - начал все сначала. Почему первая часть кода пишет - ,,Фатальная ошибка: звонок в функции-члена подготовить() на не-объект,, $query = $db->prepare( "INSERT INTO pending_users (username, token, tstamp) VALUES (?, ?, ?)" ); Я пробовал другие варианты, ошибка уходит, но БД запись не идет. Это часть кода из урока. Я попробовал по своему - запись в БД идет. mysql_query("INSERT INTO `pending_users` (`username`, `tstamp`,`token`) VALUES ('".$login."','".$tstamp."', '".md5($token)."')"); Честно говоря не удобно и надоедать на форуме, но поймите - очень нужно сделать. Я прошу подскажите, что в изначальной части кода не так ?
|
|
|
Записан
|
|
|
|
Sla
|
|
« Ответ #15 : 02-06-2019 17:25 » |
|
а где строка подключения к базе?
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Svekor
Интересующийся
Offline
|
|
« Ответ #16 : 03-06-2019 05:36 » |
|
Это файл register.php, регистрация пользователя работает. Я думаю, что здесь причина в том - все делается на Denwer, а в нем нет библиотеки PDO. Не так ли ?
|
|
|
Записан
|
|
|
|
Svekor
Интересующийся
Offline
|
|
« Ответ #17 : 03-06-2019 06:01 » |
|
Да я сейчас вставил код 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
|
|
« Ответ #18 : 03-06-2019 07:52 » |
|
Видимо тут константа DB_DRIVER не определена. Замени ее на строку. Читай в доке о PDO.
Бездумной копипастой много не наделаешь. Пора читать документацию и самоучители!
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
Svekor
Интересующийся
Offline
|
|
« Ответ #19 : 03-06-2019 15:15 » |
|
Согласен на все сто, я сегодня как раз и изучал PDO, делал пробные уроки.
|
|
|
Записан
|
|
|
|
Svekor
Интересующийся
Offline
|
|
« Ответ #20 : 04-06-2019 14:24 » |
|
Здравствуйте еще раз, хорошо когда есть где что почитать, а вот сейчас дошел до // 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
|
|
« Ответ #21 : 04-06-2019 22:32 » |
|
Нередко синтаксическая ошибка в том же файле, написанная выше, сбивает парсер и он ругается совсем не там. Ищи выше по коду пропущенную скобку.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
Svekor
Интересующийся
Offline
|
|
« Ответ #22 : 05-06-2019 07:51 » |
|
Понял, спасибо
|
|
|
Записан
|
|
|
|
|