Отправить email только один раз php

238
12 марта 2017, 07:45

Добрый день! Возможно это дупликат вопроса, но я не нашел ответа.

Начинается все с формы регистрации:

Потом в массиве POST отправляются данные из полей email, name, gender и password. Форма имеет атрибут method: post и action: confirm.php.

Суть такая: есть файл confirm.php и в нем функция mail(). Так вот при каждом обновлении страницы email посылается снова. Надо чтобы email не приходил после каждого обновления страницы. Вот код:

session_start(); 
$email = htmlspecialchars($_POST['email']); 
$name = htmlspecialchars($_POST['name']); 
$gender = htmlspecialchars($_POST['gender']); 
$password = htmlspecialchars($_POST['password']); 
unset($_POST['fruit']); 
unset($_POST['register']); 
function createRandomStringValidationCode($randomstring){ 
	$randomstring = substr(str_shuffle("0123456789abcdefghijklmnopqrstuvwxyz"), 30); 
	return($randomstring); 
} 
 
$randomCode = createRandomStringValidationCode($randomCode); 
$_SESSION['user'] = array( 
    'email' => $email, 
    'name' => $name, 
    'password' => $password, 
    'gender' => $gender, 
	'validation' => $randomCode, 
); 
$to; $subject; $message; $headers; $from; 
function sendMail(){ 
	$headers = "Content-type: text/plain; charset: UTF-8"."\r\n"; 
	$to = $_SESSION['user']['email']; 
	$from = "rayeugen@gmail.com". "\r\n"; 
	$subject = "Thanks for youre registration on Eugen Ray\"s Website"; 
	$message = "Thanks for your registration"." ".$_SESSION['user']['name']." "."\nTo continue usage of Eugen Ray\"s Website, you'll have toe enter code given below on validation page.\nHere's your validation code:"." ".$_SESSION['user']['validation']."\nWish you all the best.\nEugen Ray"; 
	mail($to, $subject, $message, $from, $headers); 
} 
 
sendMail(); 
if(empty($_POST)){ 
	header("Location: register"); 
}

Answer 1

Всё равно не показали код confirm.php, так что могу только сказать как надо было бы сделать, а вы уже меняйте в своем коде.

Когда пользователь отправил данные на страницу confirm.php вы их проверили, записали в базу и отправили письмо, и после всех этих действий нужно отправить пользователя на другую страницу, где то вот тут добавьте редирект:

sendMail();
//Сразу после отправки почты судя по вашему коду
//header("Location: index.php");exit();

А так получается он остается на confirm.php и при обновлении страницы снова и снова отправляет POST данные на страницу и письмо отправляется.

А если добавите в конце регистрации редирект он на эту страницу уже не попадет и письмо отправляться не будет, а если сам захочет зайти на страницу сработает ваше условие:

if(empty($_POST)){
    header("Location: register");
}
READ ALSO
Привязать QProgressBar к расчетам

Привязать QProgressBar к расчетам

В программе производится много расчетов в базе данных(сначала исходная таблица разбивается на подтаблицы, после чего в каждой подтаблице...

248
Импорт csv в SQLite | Qt C++

Импорт csv в SQLite | Qt C++

Нужно импортировать csv файлы в БД под управлением QSLite с использованием Qt C++? Парсинг не вариантВ гугле толком ничего не нашел

372
Выборка из массива меньших массивов и условие пересечения оных - C++

Выборка из массива меньших массивов и условие пересечения оных - C++

Не могу разобраться с синтаксисом, подскажитеИ правильный ли алгоритм?

198
Самая минималистская IDE для C++ [требует правки]

Самая минималистская IDE для C++ [требует правки]

Ищу самую минималистскую IDE для C++ с вот такими требованиями:

236