Форум программистов, компьютерный форум, киберфорум
Наши страницы

PHP для начинающих

Войти
Регистрация
Восстановить пароль
 
Uni_programist
1 / 1 / 0
Регистрация: 11.08.2016
Сообщений: 180
Завершенные тесты: 1
#1

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

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

Здравствуйте!
Решил сделать регистрацию с подтверждением пароля по 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 (PHP):

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

Как сделать подтверждение по Email? - PHP
Всем привет! На сайте хочу сделать такую функцию: подтверждение при входе. $code = mt_rand(10000, 99999); Делает рандомные числа....

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

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

Пункт Email в регистрации - PHP
Здравствуйте Форумчане у меня сформировался вопросец! Как сделать форму ввода Email в &lt;input&gt; такого вида Email@Почтовый...

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

5
Phantom-84
73 / 72 / 18
Регистрация: 15.09.2017
Сообщений: 369
18.05.2018, 12:05 #2
execute
0
Para bellum
Эксперт PHP
3127 / 2890 / 638
Регистрация: 06.01.2011
Сообщений: 8,440
18.05.2018, 12:09 #3
Забыли до echo написать:
PHP
1
$casuz->execute();
Добавлено через 13 секунд
Опоздал.
1
Phantom-84
73 / 72 / 18
Регистрация: 15.09.2017
Сообщений: 369
18.05.2018, 12:16 #4
Логин в активационной ссылке - это лишнее. Замените хотя бы на id, также передаваемый в отдельном параметре.

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

Форму из одной-двух кнопок не можете вывести? А код активации выполняйте в ответ на POST-запрос.
0
Вчера, 13:23
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
Вчера, 13:23
Привет! Вот еще темы с ответами:

Как сделать проверку на подлинность email'a при регистрации? - PHP
Вопрос такой, как сделать проверку на подлинность email'a при регистрации? То-есть на почту отправляется письмо, в котором есть ссылка,...

Заменить все email в этом тексте на '[email]' - PHP
Дан текст. Заменить все email в этом тексте на ''. Например, 'пишите мне на itmathrepetitor@gmail.ru по любому вопросу' преобразуется в...

Вывод уведомления о успешной регистрации(не удачной) на странице с формой регистрации - PHP
Здравствуйте, не получается сделать вывод сообщения на странице с формой регистрации. &lt;?php $dbc = mysqli_connect('...', '...',...

Подтверждение действия - PHP
Ребят вот кнопка: &lt;input type=button class=&quot;buttons; ngstop&quot; value=&quot;Стоп&quot; OnClick=&quot;document.getElementById('action').value='cd...


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

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

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