Форум программистов, компьютерный форум, киберфорум
Наши страницы
PHP для начинающих
Войти
Регистрация
Восстановить пароль
 
Uni_programist
1 / 1 / 1
Регистрация: 11.08.2016
Сообщений: 257
Завершенные тесты: 1
#1

Подтверждение регистрации по email

18.05.2018, 11:56. Просмотров 193. Ответов 7
Метки нет (Все метки)

Здравствуйте!
Решил сделать регистрацию с подтверждением пароля по email. Наверное все было бы хорошо. Но почему-то UPDATE не сработал, но ответ положительный. Вот файл register.php, который занимается регистрацией и отправкой письма на указанную почту
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
<?php
    session_start();
    header("Content-Type: text/html; charset=utf-8");
    include "DataBaze.php";
    $post_data= filter_input_array(INPUT_POST,[
         'name'=>FILTER_SANITIZE_STRING,
         'familiya'=>FILTER_SANITIZE_STRING,
         'login'=>FILTER_SANITIZE_STRING,
         'telephonenumber'=>FILTER_SANITIZE_STRING,
         'email'=>FILTER_VALIDATE_EMAIL,
         'password'=>[
            'filter'=>FILTER_VALIDATE_REGEXP,
            'options'=>['regexp'=>'/.{5,}/']
         ],
     ]);
     if($post_data){
         $empty_fields= array_filter (($post_data= array_map('trim',$post_data)), function($a) {
             return empty($a);
         });
     if (count($empty_fields)){
         echo '<script type="text/javascript">alert("Поля обязательны для заполнения!");document.location.href = "/reg/";</script>'; 
         print_r($empty_fields);
     }
     else{
         $sth= $DataBaze->prepare("SELECT COUNT(*)FROM `users`  WHERE `login`=? OR `telephonenumber`=? OR `email`=?");
         $sth->execute([
                 $post_data['login'],
                 $post_data['telephonenumber'],
                 $post_data['email'],
             ]);
     if ($sth->fetchColumn(0)){
          echo '<script type="text/javascript">alert("Пользователь с такими данными уже числислится. Проверку прошли ЛОГИН  EMAIL НОМЕР ТЕЛЕФОНА");document.location.href = "/reg/";</script>'; 
     }
     else {
         
         $ip= $_SERVER['REMOTE_ADDR'];
                              $images="https://hb.bizmrg.com/images_j99522iv/6.jpg";
         $dok= "845nh8s9ze5t";
         $nanodok= "35y6ru6y562335745st47rwebriudsrg1";
         $serverdok= "otjhirhgorij40ty409b98yh98ywertb9c8rbieyr23b9ysqsj10";
         $autoc="12345678910";
         $code= SHA1($dok.$serverdok.$post_data['email'].$nanodok.$autoc.$post_data['login']);
         $subject = "Подтверждение регистрации";
         $massage= "Здравствуйте! Спасибо за регистрацию на сайте Программирование! Что бы в дальнейшем пользоваться всеми функциями сайта Вам нужно активировать свой email. Для этого перейдите по ссылке http://aminpahn.beget.tech/reg/act.php?login=".$post_data['login']."&secret_key=".$code." С уважением, Администрация aminpahn.beget.tech";
         mail($post_data['email'], $subject, $massage);
         $sth= $DataBaze->prepare("INSERT INTO `users`(`name`,`familiya`,`login`,`telephonenumber`,`email`,`email_verify`,`password`,`ip`,`img`)
                                     VALUES(:name,:familiya,:login,:telephonenumber,:email,:email_verify,:password,:ip,:img)");
         $sth->bindValue(':name',$post_data['name'],\PDO::PARAM_STR);
         $sth->bindValue(':familiya',$post_data['familiya'],\PDO::PARAM_STR);
         $sth->bindValue(':login',$post_data['login'],\PDO::PARAM_STR);
         $sth->bindValue(':telephonenumber', $post_data['telephonenumber'],\PDO::PARAM_STR);
         $sth->bindValue(':email',$post_data['email'],\PDO::PARAM_STR);
         $sth->bindValue(':email_verify',$code,\PDO::PARAM_STR);
         $sth->bindValue(':password', password_hash($post_data['password'], PASSWORD_DEFAULT),\PDO::PARAM_STR);
         $sth->bindValue(':ip', $ip,\PDO::PARAM_STR);
         $sth->bindValue(':img',$images,\PDO::PARAM_STR);
         if ($sth->execute() ){
          echo '<script type="text/javascript">alert("Регистрация пользователя успешно завершена!");document.location.href = "/reg/";</script>'; 
          
             
         }           
     }
     }
     }
?>
Теперь файл act.php, который занимается проверкой значений и готовит вердикт:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<?php
     include "DataBaze.php";
     session_start();
     if (isset($_GET['login'])) {
         $login =$_GET['login']; }
     else {
         exit ("Ошибка! Похоже, какие-то данные были утеряны при передачи их на сервер. Утерянная информация:ЛОГИН. Сожалеем об этом :( ");
     }     
     if (isset($_GET['secret_key'])){
         $code= $_GET['secret_key'];
     }
     else {
         exit("Ошибка! Похоже, какие-то данные были утеряны при передачи их на сервер. Утеренная информация: СЕКРЕТНЫЙ КЛЮЧ. Сожалеем об этом :( ");
     }
     $dok= "845nh8s9ze5t";
         $nanodok= "35y6ru6y562335745st47rwebriudsrg1";
         $serverdok= "otjhirhgorij40ty409b98yh98ywertb9c8rbieyr23b9ysqsj10";
         $autoc="12345678910";
         $activetrue= $DataBaze->prepare("SELECT `email` FROM `users` WHERE `login`=?");
         $activetrue->execute([$login]);
         $row_chash= $activetrue->fetch(PDO::FETCH_ASSOC);
         $codekeygen= SHA1($dok.$serverdok.$row_chash['email'].$nanodok.$autoc.$login);
         if ($codekeygen == $code) {
             $ok= "YES";
             $casuz= $DataBaze->prepare("UPDATE `users` SET `email_verify`= :email_verify WHERE `login`= :login");
             $casuz->bindParam(':email_verify',$ok);
             $casuz->bindParam(':login',$login);
             echo "Ваш Е-мейл подтвержден! Теперь вы можете зайти на сайт под своим логином! <a href='/'>Главная    страница</a>";
         }
         else{
             echo "Иногда, так бывает! Неизвестная ошибка, но уверяю Вас, что мы сделаем все возможное, что бы предотвратить это откровенное безобразие!";
         }
?>
Ответ после перехода с email: "Ваш Е-мейл подтвержден! Теперь вы можете зайти на сайт под своим логином!
Но ключ в БД должен быть заменен на слов YES, но этого не происходит... Я не понимаю почему? Буду благодарен за помощь в этом вопросе.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.05.2018, 11:56
Ответы с готовыми решениями:

Подтверждение EMAIL
доброе время суток. я новенький.. помогите разобраться какая здесь ошибка.. ...

Как сделать подтверждение по Email?
Всем привет! На сайте хочу сделать такую функцию: подтверждение при входе. ...

Подтверждение регистрации по почте
Здравствуйте, я решил добавить к себе на сайт регистрацию с подтверждением...

Подтверждение регистрации (отправка почты с токеном)
Всем привет, уже как видно из названия темы, речь пойдет о отправке письма....

Пункт Email в регистрации
Здравствуйте Форумчане у меня сформировался вопросец! Как сделать форму ввода...

7
Phantom-84
239 / 198 / 58
Регистрация: 15.09.2017
Сообщений: 958
18.05.2018, 12:05 #2
execute
0
Para bellum
Эксперт PHP
4046 / 3017 / 962
Регистрация: 06.01.2011
Сообщений: 8,849
18.05.2018, 12:09 #3
Забыли до echo написать:
PHP
1
$casuz->execute();
Добавлено через 13 секунд
Опоздал.
1
Phantom-84
239 / 198 / 58
Регистрация: 15.09.2017
Сообщений: 958
18.05.2018, 12:16 #4
Логин в активационной ссылке - это лишнее. Замените хотя бы на id, также передаваемый в отдельном параметре.

Добавлено через 5 минут
И лучше по ссылке в ответ на GET-запрос выводить кнопку подтверждения.
0
Uni_programist
1 / 1 / 1
Регистрация: 11.08.2016
Сообщений: 257
Завершенные тесты: 1
18.05.2018, 15:51  [ТС] #5
Para bellum, спасибо, действительно работает.
Phantom-84,
Цитата Сообщение от Phantom-84 Посмотреть сообщение
Логин в активационной ссылке - это лишнее. Замените хотя бы на id, также передаваемый в отдельном параметре.
А как это можно сделать, если пользователь (по сути), еще не числится в БД? И как вывести такую кнопочку? Буду очень благодарен.
0
Phantom-84
239 / 198 / 58
Регистрация: 15.09.2017
Сообщений: 958
19.05.2018, 13:23 #6
В смысле не числится? Где тогда хранятся его регистрационные данные? Даже если они хранятся в "предварительной" таблице, используйте id из нее.

Форму из одной-двух кнопок не можете вывести? А код активации выполняйте в ответ на POST-запрос.
0
Uni_programist
1 / 1 / 1
Регистрация: 11.08.2016
Сообщений: 257
Завершенные тесты: 1
22.05.2018, 18:29  [ТС] #7
Phantom-84, я имею ввиду то что, ну вот код регистрации. Строка 45 отправляет письмо, н при отправке используются данные не из БД, а введенные пользователем лишь потом идет запрос INSERT.
PHP
1
2
3
mail($post_data['email'], $subject, $massage);
         $sth= $DataBaze->prepare("INSERT INTO `users`(`name`,`familiya`,`login`,`telephonenumber`,`email`,`email_verify`,`password`,`ip`,`img`)
                                     VALUES(:name,:familiya,:login,:telephonenumber,:email,:email_verify,:password,:ip,:img)");
Получается, что пользователь ещё не числится в БД.
0
Phantom-84
239 / 198 / 58
Регистрация: 15.09.2017
Сообщений: 958
22.05.2018, 19:27 #8
Сделайте так, чтобы числился
0
22.05.2018, 19:27
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.05.2018, 19:27

Как сделать проверку email на корректность в форме регистрации?
Добрый вечер. Делаю форму регистрации на php, хотел бы узнать, каким методом...

Как сделать проверку на подлинность email'a при регистрации?
Вопрос такой, как сделать проверку на подлинность email'a при регистрации?...

Заменить все email в этом тексте на '[email]'
Дан текст. Заменить все email в этом тексте на ''. Например, 'пишите мне на...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru