Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.95/21: Рейтинг темы: голосов - 21, средняя оценка - 4.95
0 / 0 / 5
Регистрация: 24.01.2016
Сообщений: 227

Активация аккаунта по email

11.11.2016, 14:49. Показов 4599. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Не получается настроить код чтобы при нажатие на кнопку "зарегистрироваться" отправлялось сообщение активации на электронную почту. В комментариях я использовал то что нашел в интернете по методу отправки на эл. почты активации

Не стал писать весь код так как слишком много, что можно запутаться.
Вложения
Тип файла: zip send_mail.zip (4.8 Кб, 4 просмотров)
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
11.11.2016, 14:49
Ответы с готовыми решениями:

Активация аккаунта
Доброго времени суток. Предположим есть скрипт регистрации, после прохождения отправляется сообщение на мыло для активации, с помощью вот...

Активация аккаунта
Всем доброго времени суток! Написал функцию, которая позвволяется активировать аккаунт: function activate($email, $email_code) { ...

Активация аккаунта
Приветствую всех. Решил попрактиковаться в написании сайта с использованием MVC паттерна. В общем за основу взял урок на хабре...

14
0 / 0 / 5
Регистрация: 24.01.2016
Сообщений: 227
11.11.2016, 20:40  [ТС]
Что я уже запутался как его писать и что нужно подставлять

Добавлено через 3 часа 16 минут
Может кто-то подскажет как сделать верификацию учетной записи, у меня не получается

Добавлено через 43 минуты
registration.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
66
67
68
69
70
include_once("connect.php");
 
if (isset($_POST['submit'])) {
 
    $errors = [];
 
    if (empty($_POST['password'])) {
        $errors[] = "Введите пароль";
    } elseif (! preg_match("/^\w{6,20}$/", $_POST['password'])) {
        $errors[] = "Пароль слишком короткий! Пароль должен быть не менее 6 символов!";
    }
 
    if (empty($_POST['email'])) {
        $errors[] = "Введите E-mail!";
    } elseif (! preg_match("/^[\w\.\-]+@[a-zA-Z0-9]+\.[a-zA-Z]{2,6}$/", $_POST['email'])) {
        $errors[] = "E-mail имеет недопустимый формат! Например, name@gmail.com!";
    }
 
    $sql = "SELECT id FROM user WHERE email='".mysql_real_escape_string($_POST['email'])."'";
    $query = mysql_query($sql) or die(mysql_error());
    if (mysql_num_rows($query) > 0) {
        $errors[] = "Пользователь с таким e-mail зарегистрирован!";
    }
 
    if (empty($errors)) {
 
        $LastName = htmlspecialchars($_POST['LastName']);
        $name     = htmlspecialchars($_POST['name']);
        $floor     = $_POST['floor'];
        $email    = ($_POST['email']);
        $password = md5 ($_POST['password']);
        $phone    = $_POST['phone'];
        $data     = $_POST['data'];
        $country  = $_POST['country'];
        $region   = $_POST['region'];
        $city     = $_POST['city'];
        $rdate    = date ("Y-m-d H:i:s");
 
        $redex="/^[\w\.\-]+@[a-zA-Z0-9]+\.[a-zA-Z]{2,6}$/";
 
        if (preg_match($redex, $email)) {
        $password=md5($password);
        $activation=md5($email.time());
        $count=mysql_query($link, "SELECT id FROM user WHERE email='@email'");
        if (mysql_num_rows($count)<1) 
        {
        mysql_query($link, "INSERT INTO user (LastName, name, floor, email, password, phone, data, country, region, city, rdate, activation) VALUES('$LastName', '$name', '$floor', '$email', '$password', '$phone', '$data', '$country', '$region', '$city', '$rdate', '$activation')";
        $result = mysql_query($sql) or die(mysql_error());
        include "send_mail.php";
        $to=$email;
        $subject="Проверка E-mail-а";
        $body="Здравствуйте!<br><br> Активация! Пожалуйста перейдите по ссылке для активанции вашего аккаунта. <br><br> <a href='".base_url.'activation/'.$activation."'>".$base_url."activation/".$activation."</a>";
        send_mail($to, $subject, $body);
        $msg="Регистрация прошла успешно! Пройдите активацию через email.";
        else{
        $msg='Данный email уже занят.';
        }
        else
       {
       $msg= "Не валидеый email"
        }
 
        echo "$msg <br>
        <a href='/Proekt/index.php'>На главную</a>";
        echo "<font color='green'>Вы успешно зарегистрировались</font><br><a href='/Proekt/index.php'>На главную</a>";
        exit;
            }
         }
    }
}
sendmail.php где идет отправка письма на e-mail
PHP
1
2
3
4
5
6
<?php 
    function send_mail($to, $subject, $body)
    {
        mail($to, $subject, $message);
    }
?>
activation.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
<?php 
    include("connect.php");
    $msg="";
    if (!empty($_GET['code']) $$ isset($_GET['code'])) {
        $code=mysql_real_escape_string($_GET['code']);
        $c=mysql_query($link, "SELECT id FROM user WHERE activation='$code'");
 
        if (mysql_num_rows($c) > 0) {
            $count==mysql_query($link, "SELECT id FROM user WHERE activation='$code' and status='0'");
 
            if (mysql_num_rows($count)==1) {
                mysql_query($link, "UPDATE user SET status='1' WHERE activation='$code'");
                $msg="Ваш аккаунт активирован";
            }
            else{
                $msg= "Ваш акканут уже активирован";
            }
        }
        else{
            $msg="Неверный код активации";
        }
    }
?>
<?php echo $msg; ?>
Связь с баззой connect.php

PHP
1
2
3
4
5
6
7
8
9
10
$host='localhost';
    $db='my';
    $user_mysql='root';
    $pass_mysql='';
    $link=mysql_connect($host, $user_mysql, $pass_mysql) or die("<center><h1>Don't connect with database!!!</h1></connect>");
    mysql_query("set character_set_client='utf8'");
    mysql_query("set character_set_results='utf8'");
    mysql_query("set collation_connecrion='utf8_general_ci'");
    mysql_select_db($db, $link) or die("<center><h1>ERROR CONNECT DATABASE!!!</h1></center>");
    $base_url='http//site/email_activation/';
Только в интернете мне было непонятно ссылку откуда берут в переменной $base_url не смог догадатся и в статье об этом не пишут

Добавлено через 1 час 47 минут
Я сделал тестовый и начал переписывать код как представлено на сайте С теми данными которые передаются, но не получается выходит такая ошибка
Warning: mysqli_query() expects parameter 1 to be mysqli, resource given in C:\OpenServer\domains\site\Proekt\verifi cation\index.php on line 25

Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, null given in C:\OpenServer\domains\site\Proekt\verifi cation\index.php on line 26

Warning: mysqli_query() expects parameter 1 to be mysqli, resource given in C:\OpenServer\domains\site\Proekt\verifi cation\index.php on line 28
0
3012 / 1446 / 262
Регистрация: 16.03.2008
Сообщений: 6,444
Записей в блоге: 2
11.11.2016, 22:55
Ну так в тексте предупреждения четко написано, что первый, параметр должен быть объект mysqli, а вы передаете нечто другое. Сверьтесь с докой
0
0 / 0 / 5
Регистрация: 24.01.2016
Сообщений: 227
12.11.2016, 10:55  [ТС]
voral, в том то и дело я не понимаю что тут не так, тут все вроде бы нормально написано
0
Эксперт PHP
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,904
12.11.2016, 13:34
Rusline18, покажите участок кода, который выдаёт ошибки. В вашем изначальном коде нигде нет mysqli.
0
12.11.2016, 13:44

Не по теме:

Rusline18, вы знаете, что такое ООП?

0
0 / 0 / 5
Регистрация: 24.01.2016
Сообщений: 227
12.11.2016, 17:03  [ТС]
Jodah,
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
include("connect.php");
$msg="";
if (!empty($_POST['email']) &&($_POST['email']) && !empty($_POST['password'])&& isset($_POST['password'])) 
{
 
    $LastName = htmlspecialchars($_POST['LastName']);
    $name     = htmlspecialchars($_POST['name']);
    $floor     = $_POST['floor'];
    $email    = mysql_real_escape_string($_POST['email']);
    $password = md5 ($_POST['password']);
    $phone    = $_POST['phone'];
    $data     = $_POST['data'];
    $country  = $_POST['country'];
    $region   = $_POST['region'];
    $city     = $_POST['city'];
    $rdate    = date ("Y-m-d H:i:s");
 
    $regex="/^[\w\.\-]+@[a-zA-Z0-9]+\.[a-zA-Z]{2,6}$/";
 
    if (preg_match($regex, $email)) 
    {
        $password=md5($password);
        $activation=md5($email.time());
        $count=mysqli_query($link, "SELECT id FROM usertest WHERE email='$email'");
        if (mysqli_num_rows($count)<1) 
        {
            mysqli_query($link, "INSERT INTO user (LastName, name, floor, email, password, phone, data, country, region, city, rdate, activation) VALUES('$LastName', '$name', '$floor', '$email', '$password', '$phone', '$data', '$country', '$region', '$city', '$rdate', '$activation')");
0
Эксперт PHP
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,904
12.11.2016, 18:29
Rusline18, предполагаю, что в connect.php вы подключаетесь через mysql_, а надо через mysqli_.

И на 9-ой строке тоже на mysqli замените. mysql и mysqli - это разные драйвера.
0
0 / 0 / 5
Регистрация: 24.01.2016
Сообщений: 227
12.11.2016, 20:07  [ТС]
Jodah, пробовал, не получается

Добавлено через 19 минут
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
include("connect.php");
if (isset($_POST['submit'])) 
    {
        $msg=[];
        if (empty($_POST['password'])) 
        {
            $msg[]="Введите пароль";
        } 
        elseif (!preg_match("/^\w{6,20}$/", $_POST['password'])) 
        {
            $msg[]="Пароль слишком короткий! Пароль должен быть не менее 6 символов!";
        }
        if (empty($_POST['email'])) 
            {
                $msg[] = "Введите E-mail!";
            } 
            elseif (! preg_match("/^[\w\.\-]+@[a-zA-Z0-9]+\.[a-zA-Z]{2,6}$/", $_POST['email'])) 
            {
            $msg[] = "E-mail имеет недопустимый формат! Например, name@gmail.com!";
            }
        $sql="SELECT id FROM usertest WHERE email='$email'";
        $query=mysql_query($sql) or die(mysql_error());
        if (mysql_num_rows($query)>0) {
            $msg[]="Пользователь с таким E-mail зарегестрирован!";
            }
 
            if (empty($msg)) 
                {
            
                $LastName = htmlspecialchars($_POST['LastName']);
                $name     = htmlspecialchars($_POST['name']);
                $floor     = $_POST['floor'];
                $email    = mysql_real_escape_string($_POST['email']);
                $password = md5 ($_POST['password']);
                $phone    = $_POST['phone'];
                $data     = $_POST['data'];
                $country  = $_POST['country'];
                $region   = $_POST['region'];
                $city     = $_POST['city'];
                $rdate    = date ("Y-m-d H:i:s");
                $activation= md5($email.time());
 
                $sql="INSERT INTO usertest (LastName, name, floor, email, password, phone, data, country, region, city, rdate, activation) VALUES ('$LastName', '$name', '$floor', '$email', '$password', '$phone', '$data', '$country', '$region', '$city', '$rdate', '$activation')";
                $result=mysql_query($sql) or die(mysql_error());
                }
            include "send_mail.php";
            $to=$email;
            $subject="Проверка E-mail";
            $body= "Здравствуйте! Вы только, что зарегистрировались на сайте wwww.growth.ru. Пожалуйста перейдите по сслыки для активации вашей учетной записи <a href= 'www.growth.com/mail_activation/".$activation."'>".$base_url."activation/".$activation."</a>";
            send_mail($to, $subject, $body);
            $msg="Регистрация прошла успешно! Пройдите активацию через email.";
            }
            else
            {
            $msg="Данный email уже занят.";
            }
        echo "$msg";
Вот код который работает. Все заново переписал, с тем который работал, немного доработал его и правильно теперь все засунул. Только сейчас нужно проверить на отправку письма и код активации

Добавлено через 10 минут
Jodah, Только у меня вторая еще проблема, то что при указание email-а одного и того же, он все равно выводит регистрация успешна завершилась! Пройдите активацию через email
0
930 / 846 / 190
Регистрация: 28.11.2013
Сообщений: 3,621
12.11.2016, 20:42
Это не проблема. Вы сами это запрограммировали. Отправка письма и вывод этого сообщения никак не связаны с empty($msg).

Добавлено через 3 минуты
И на будущее: логика добавления новой записи должна быть другой, а именно нужно сделать поле email юником, вставлять запись и затем нормально проверять результат этой операции, а не как у вас.
1
0 / 0 / 5
Регистрация: 24.01.2016
Сообщений: 227
12.11.2016, 20:59  [ТС]
miketomlin, не совсем понял

Добавлено через 1 минуту
miketomlin, msg надо поменять? Второй момент, я пробовал сделать unique, но в phpMyAdmin не нашел как его поставить

Добавлено через 11 минут
miketomlin, все нашел уникальный ключ

Добавлено через 2 минуты
miketomlin, а с empty($msg) я не совсем понял
0
930 / 846 / 190
Регистрация: 28.11.2013
Сообщений: 3,621
12.11.2016, 21:21
Посмотрите, на какой код эта проверка распространяется.

Вообще это все элементарные вещи. Начинать нужно всегда с написания алгоритма. И быть внимательным при его переводе в программный код.
1
0 / 0 / 5
Регистрация: 24.01.2016
Сообщений: 227
12.11.2016, 22:00  [ТС]
miketomlin, Все я нашел ответ наконец-то по этому поводу
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
include_once("connect.php");
if (isset($_POST['submit'])) 
    {
        $msg='';
        $errors=[];
        if (empty($_POST['password'])) 
        {
            $errors[]="Введите пароль";
        } 
        elseif (!preg_match("/^\w{6,20}$/", $_POST['password'])) 
        {
            $errors[]="Пароль слишком короткий! Пароль должен быть не менее 6 символов!";
        }
        if (empty($_POST['email'])) 
            {
                $errors[] = "Введите E-mail!";
            } 
            elseif (! preg_match("/^[\w\.\-]+@[a-zA-Z0-9]+\.[a-zA-Z]{2,6}$/", $_POST['email'])) 
            {
            $errors[] = "E-mail имеет недопустимый формат! Например, name@gmail.com!";
            }            
                $LastName = htmlspecialchars($_POST['LastName']);
                $name     = htmlspecialchars($_POST['name']);
                $floor     = $_POST['floor'];
                $email    = mysql_real_escape_string($_POST['email']);
                $password = md5 ($_POST['password']);
                $phone    = $_POST['phone'];
                $data     = $_POST['data'];
                $country  = $_POST['country'];
                $region   = $_POST['region'];
                $city     = $_POST['city'];
                $rdate    = date ("Y-m-d H:i:s");
                $activation= md5($email.time());
 
                $sql=mysql_query("SELECT id FROM usertest WHERE email='$email'");
                if (mysql_num_rows($sql)<1) 
                {
                    $sql="INSERT INTO usertest (LastName, name, floor, email, password, phone, data, country, region, city, rdate, activation) VALUES ('$LastName', '$name', '$floor', '$email', '$password', '$phone', '$data', '$country', '$region', '$city', '$rdate', '$activation')";
                    $result=mysql_query($sql) or die(mysql_error());
 
                    include_once ("send_mail.php");
                    $to=$email;
                    $subject="Проверка E-mail";
                    $body= "Здравствуйте! Вы только, что зарегистрировались на сайте wwww.growth.ru. Пожалуйста перейдите по сслыки для активации вашей учетной записи <a href= 'www.growth.com/mail_activation/".$activation."'>".$base_url."activation/".$activation."</a>";
                    send_mail($to, $subject, $body);
                    $msg="Регистрация прошла успешно! Пройдите активацию через email.";
                }
            else
            {
            $msg="Данный email уже занят.";
            }
        }
        echo $msg;
Теперь мне нужно посмотреть с отправкой email-ов. Как понимаю это делается с помощью хостинга, а не по локалке

Добавлено через 32 секунды
И проверить изменяется статус у аккаунтов
0
930 / 846 / 190
Регистрация: 28.11.2013
Сообщений: 3,621
12.11.2016, 22:09
PHP
1
2
3
4
5
6
        if (empty($_POST['email'])) 
            {
                $errors[] = "Введите E-mail!";
            }
        ...
        $email    = mysql_real_escape_string($_POST['email']);
Это пародия на программирование. Для начала не мешает постигнуть смысл расстановки отступов.

Если решили таким образом потроллить местную публику, можете продолжать в том же духе.
0
14 / 50 / 3
Регистрация: 26.12.2009
Сообщений: 406
24.12.2016, 20:59
При чем тут ООП?

Не работает отправка почты? Ну так мучайтесь только с отправкой почты.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
24.12.2016, 20:59
Помогаю со студенческими работами здесь

Активация Аккаунта по e-mail
Всем, Доброго времени суток. Вот, встала задача, организовать регистрацию пользователей. Регистрация пошаговая. на первом шаге, ...

Активация аккаунта (после регистрации)
Всем привет ! Вот почему я обратился к Вам, вот этот вот скрипт почему то выполняется неверно ( Всегда пишет что &quot;Ваша учетная...

Реализовать регистрацию аккаунта на примере аккаунта почты
Добрый день уважаемый форумчане! Дошел до такого дела как регистрация аккаунтов программными средствами есть сайт outlook.com....

Отключение/включение (активация/де активация) одновременно всех (нескольких) компонентов на форме
Добрый день коллеги! Возник такой вопрос. Допустим, есть форма с множеством элементов ввода, кнопок, в общем всевозможных компонентов....

Email сервис не требующий подтверждения по номеру телефона и другому email
Доброго времени! Прошу прощения если не туда пишу! Несколько месяцев назад регистрировал почту на Gmail. Заходил пару раз, и оба...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru