За последние 24 часа нас посетили 16472 программиста и 1551 робот. Сейчас ищут 2088 программистов ...

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

Тема в разделе "PHP и базы данных", создана пользователем Vitte, 22 июн 2017.

  1. Vitte

    Vitte Активный пользователь

    С нами с:
    30 янв 2017
    Сообщения:
    113
    Симпатии:
    5
    Привет всем, сделал регистрацию со всеми проверками, но никак почему-то не получается подключить подтверждение по почте на эту регистрацию. Если кто-то сталкивался с такой же проблемой, помогите.
    Вся регистрация:
    PHP:
    1.  <?php include ($_SERVER['DOCUMENT_ROOT']."/bd/bd.php");    
    2.       if (isset($_POST['captcha_validation'])){$captcha_validation = $_POST['captcha_validation']; if ($captcha_validation == '') {unset($captcha_validation);}}
    3.       if (isset($_POST['captcha'])){$captcha = $_POST['captcha'];}
    4.   $data = $_POST;
    5.   if( isset($data['do_signup']) )
    6. {
    7.   $errors = array();
    8.   if (preg_match("|^([a-z0-9_\.\-]{1,20})@([a-z0-9\.\-]{1,20})\.([a-z]{2,4})|is",
    9. strtolower($data['email']))) {
    10.      if ($captcha == $captcha_validation)
    11.        {
    12.   if ( trim($data['login']) == '')
    13.   {
    14.     $errors[] = 'Введите логин!';
    15.   }
    16.  
    17.   if ( trim($data['email']) == '')
    18.   {
    19.     $errors[] = 'Введите майл!';
    20.   }
    21.  
    22.   if ( trim($data['password']) == '')
    23.   {
    24.     $errors[] = 'Введите Пароль!';
    25.   }
    26.  
    27.   if (R::count('users',"login=?",array($data['login']))  > 0 )
    28.    {
    29.     $errors[] = 'Пользователь с таким логином уже существует!';
    30.    }
    31.     if (R::count('users',"email=?",array($data['email']))  > 0 )
    32.    {
    33.     $errors[] = 'Пользователь с таким Email уже существует!';
    34.    }
    35. } else {$errors[] = 'Не верно введена каптча или email!';}
    36. } else {$errors[] = 'Не верно введена каптча или email!';}
    37.  
    38.   if (empty($errors)) {
    39.  
    40.   $user = R::dispense('users');
    41.   $user ->login = $data['login'];
    42.   $user ->email = $data ['email'];
    43.   $user ->password = password_hash($data['password'],PASSWORD_DEFAULT);
    44.  
    45.   R::store($user);
    46.  
    47.   $Code = str_replace('=', '', base64_encode($_POST['email']));
    48.  
    49.   mail($_POST['email'], 'Регистрация на BOOLLY.RU',
    50.     "Спасибо за регистрацию на сайте BOOLLY.RU! \n\r Ваш логин:".$_POST['login']."\n\r Ваш пароль: ".$_POST['password'],
    51.     " \r\nСсылка для активации: http://www.boolly.ru/profile/activate/code/".substr($Code, -5).substr($Code, 0, -5),
    52.     "From: Регистрация <robot@boolly.ru>",'-frobot@boolly.ru');
    53.  
    54.   $myMail = '4clash.com@gmail.com';
    55.    
    56.   mail($myMail, 'Новый пользователь', 'Почта нового пользователя: '.$_POST['email'], "From: Регистрация <robot@boolly.ru>", '-frobot@boolly.ru');
    57.  
    58.   header("Location: login.php");
    59.   echo '<div class="Page"> <div style="color:green;">Вы зарегистрированы, можете авторизоваться!</div> </div>';
    60.  
    61.  
    62.   }else {
    63.   echo '<div style="color:red;">'.array_shift($errors).'</div>';
    64.  
    65. }
    66.  
    67. }
    68.    require ($_SERVER['DOCUMENT_ROOT']."/bd/bd.php");
    69.   else if ($Module == 'activate' and $Param['code']) {
    70.   if (!$_SESSION['USER_ACTIVE_EMAIL']) {
    71.   $Email = base64_decode(substr($Param['code'], 5).substr($Param['code'], 0, 5));
    72.   if (strpos($Email, '@') !== false) {
    73.   mysqli_query($connection, "UPDATE `users` SET `active` = 1 WHERE `email` = '$Email'");
    74.   $_SESSION['USER_ACTIVE_EMAIL'] = $Email;
    75.   echo "E-mail <b>".$Email."</b> подтвержден.","/index";
    76. }
    77.   else echo "E-mail не подтвержден.","/index";
    78. }
    79.   else echo "E-mail <b>".$_SESSION['USER_ACTIVE_EMAIL']."</b> подтвержден.","/index";
    80. }
    81.     ?>
    Где тут проблема?
     
  2. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    где код который ожидает ключ активации по ссылке profile/activate/code/ ?
     
  3. Vitte

    Vitte Активный пользователь

    С нами с:
    30 янв 2017
    Сообщения:
    113
    Симпатии:
    5
    А где он должен быть
     
  4. abrdabr

    abrdabr Новичок

    С нами с:
    28 янв 2017
    Сообщения:
    774
    Симпатии:
    65
    @Vitte смотри адресс страницы регистрации и список всех инклудов и реквиемов сюда
     
  5. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    @Vitte мне интересно у тебя редирект срабатывает?
    А то я парюсь парюсь везде где хочу перенаправить юзера ругаетсяся мол заголовки были отправлены.
     
  6. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.770
    Адрес:
    :сердА
    ob_start() в начале кода решит твои проблемы.
     
  7. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    @Fell-x27
    Может и решит, но все же эта ошибка будет оставаться на месте, этой функцией мы всего лишь ее припрячем да и все, наверное)
     
  8. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.770
    Адрес:
    :сердА
    Нет. Прячутся ошибки оператором "@". А эта функция включает механизм буферизации вывода, в следствие чего PHP начинает сам следить за тем, чтобы заголовки были отданы перед контентом. Все выдаваемые заголовки он отдает на выход клиенту, а весь остальной контент заворачивает в буфер, после чего отдает содержимое буфера.

    Таким образом, в каком бы порядке не шли контент и заголовки, клиенту они будут отданы так, как нужно. И ошибка отправки заголовков после контента исчезнет. Не замаскируется, а именно исчезнет, так как будет разрулена причина ее возникновения.

    Этот механизм, в первую очередь, как раз сделан для того, чтобы веб-разработчик мог абстрагироваться от загонов HTTP-протокола и не ломать себе об него позвоночник, уродуя архитектуру приложения. Ну а кроме этой фичи, оно несет много интересных применений. Буферы могут быть вложенными, буфер в буфере, ими можно управлять, считывать их статус, вручную схлопывать их, уничтожать не забирая контент, или забирать не закрывая, да мало ли. Но это уже продвинутый уровень.

    А базовый уровень работы с буферизацией - это ob_start() в начале кода и..все. Ничего не надо закрывать руками и отправлять, PHP автоматически схлопывает и сбрасывает клиенту все буферы по окончании работы приложения.

    Ну и в общем-то, буферизацию вывода можно включить в PHP на уровне конфига.
    --- Добавлено ---
    И да. Возьми за правило - видишь неизвестную функцию, сразу в документации гугли про нее. Не строй предположений. Разбирайся как работает. Программирование не про предположения. Оно про знания.
     
  9. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    @_ne_scaju_
    не-не
    обстарт маст хэв
    и не тормозит
    и вложенность поддерживает
     
  10. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    @Fell-x27
    я сразу вбил в мануал, не известную для меня функцию и прочитал)
     
  11. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.770
    Адрес:
    :сердА
    Но только не когда ты отдаешь потоковый контент или крупный файл. Я как-то при трансляции видео в fullHD забыл буферы схлопнуть - так у меня пых как подкошенный лег по лимиту памяти. А без буферов отдает что угодно, не протекая. Те же стримы отрабатывают на 3-мегабайтовом лимите как часы. Но это до крайности специфичный кейс. В 99.99% случаев же ob_start - великое благо.
     
  12. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    для страничек, да