Привет всем, сделал регистрацию со всеми проверками, но никак почему-то не получается подключить подтверждение по почте на эту регистрацию. Если кто-то сталкивался с такой же проблемой, помогите. Вся регистрация: PHP: <?php include ($_SERVER['DOCUMENT_ROOT']."/bd/bd.php"); if (isset($_POST['captcha_validation'])){$captcha_validation = $_POST['captcha_validation']; if ($captcha_validation == '') {unset($captcha_validation);}} if (isset($_POST['captcha'])){$captcha = $_POST['captcha'];} $data = $_POST; if( isset($data['do_signup']) ) { $errors = array(); if (preg_match("|^([a-z0-9_\.\-]{1,20})@([a-z0-9\.\-]{1,20})\.([a-z]{2,4})|is", strtolower($data['email']))) { if ($captcha == $captcha_validation) { if ( trim($data['login']) == '') { $errors[] = 'Введите логин!'; } if ( trim($data['email']) == '') { $errors[] = 'Введите майл!'; } if ( trim($data['password']) == '') { $errors[] = 'Введите Пароль!'; } if (R::count('users',"login=?",array($data['login'])) > 0 ) { $errors[] = 'Пользователь с таким логином уже существует!'; } if (R::count('users',"email=?",array($data['email'])) > 0 ) { $errors[] = 'Пользователь с таким Email уже существует!'; } } else {$errors[] = 'Не верно введена каптча или email!';} } else {$errors[] = 'Не верно введена каптча или email!';} if (empty($errors)) { $user = R::dispense('users'); $user ->login = $data['login']; $user ->email = $data ['email']; $user ->password = password_hash($data['password'],PASSWORD_DEFAULT); R::store($user); $Code = str_replace('=', '', base64_encode($_POST['email'])); mail($_POST['email'], 'Регистрация на BOOLLY.RU', "Спасибо за регистрацию на сайте BOOLLY.RU! \n\r Ваш логин:".$_POST['login']."\n\r Ваш пароль: ".$_POST['password'], " \r\nСсылка для активации: http://www.boolly.ru/profile/activate/code/".substr($Code, -5).substr($Code, 0, -5), "From: Регистрация <robot@boolly.ru>",'-frobot@boolly.ru'); $myMail = '4clash.com@gmail.com'; mail($myMail, 'Новый пользователь', 'Почта нового пользователя: '.$_POST['email'], "From: Регистрация <robot@boolly.ru>", '-frobot@boolly.ru'); header("Location: login.php"); echo '<div class="Page"> <div style="color:green;">Вы зарегистрированы, можете авторизоваться!</div> </div>'; }else { echo '<div style="color:red;">'.array_shift($errors).'</div>'; } } require ($_SERVER['DOCUMENT_ROOT']."/bd/bd.php"); else if ($Module == 'activate' and $Param['code']) { if (!$_SESSION['USER_ACTIVE_EMAIL']) { $Email = base64_decode(substr($Param['code'], 5).substr($Param['code'], 0, 5)); if (strpos($Email, '@') !== false) { mysqli_query($connection, "UPDATE `users` SET `active` = 1 WHERE `email` = '$Email'"); $_SESSION['USER_ACTIVE_EMAIL'] = $Email; echo "E-mail <b>".$Email."</b> подтвержден.","/index"; } else echo "E-mail не подтвержден.","/index"; } else echo "E-mail <b>".$_SESSION['USER_ACTIVE_EMAIL']."</b> подтвержден.","/index"; } ?> Где тут проблема?
@Vitte мне интересно у тебя редирект срабатывает? А то я парюсь парюсь везде где хочу перенаправить юзера ругаетсяся мол заголовки были отправлены.
@Fell-x27 Может и решит, но все же эта ошибка будет оставаться на месте, этой функцией мы всего лишь ее припрячем да и все, наверное)
Нет. Прячутся ошибки оператором "@". А эта функция включает механизм буферизации вывода, в следствие чего PHP начинает сам следить за тем, чтобы заголовки были отданы перед контентом. Все выдаваемые заголовки он отдает на выход клиенту, а весь остальной контент заворачивает в буфер, после чего отдает содержимое буфера. Таким образом, в каком бы порядке не шли контент и заголовки, клиенту они будут отданы так, как нужно. И ошибка отправки заголовков после контента исчезнет. Не замаскируется, а именно исчезнет, так как будет разрулена причина ее возникновения. Этот механизм, в первую очередь, как раз сделан для того, чтобы веб-разработчик мог абстрагироваться от загонов HTTP-протокола и не ломать себе об него позвоночник, уродуя архитектуру приложения. Ну а кроме этой фичи, оно несет много интересных применений. Буферы могут быть вложенными, буфер в буфере, ими можно управлять, считывать их статус, вручную схлопывать их, уничтожать не забирая контент, или забирать не закрывая, да мало ли. Но это уже продвинутый уровень. А базовый уровень работы с буферизацией - это ob_start() в начале кода и..все. Ничего не надо закрывать руками и отправлять, PHP автоматически схлопывает и сбрасывает клиенту все буферы по окончании работы приложения. Ну и в общем-то, буферизацию вывода можно включить в PHP на уровне конфига. --- Добавлено --- И да. Возьми за правило - видишь неизвестную функцию, сразу в документации гугли про нее. Не строй предположений. Разбирайся как работает. Программирование не про предположения. Оно про знания.
Но только не когда ты отдаешь потоковый контент или крупный файл. Я как-то при трансляции видео в fullHD забыл буферы схлопнуть - так у меня пых как подкошенный лег по лимиту памяти. А без буферов отдает что угодно, не протекая. Те же стримы отрабатывают на 3-мегабайтовом лимите как часы. Но это до крайности специфичный кейс. В 99.99% случаев же ob_start - великое благо.