0 / 0 / 0
Регистрация: 22.12.2016
Сообщений: 8
1

Запрет повторного нажатия на ссылку активации в e-mail

21.02.2017, 15:28. Показов 768. Ответов 3
Метки нет (Все метки)

Здравствуйте! Не могу никак понять в какую сторону копать. Есть форма:
Кликните здесь для просмотра всего текста
HTML5
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
<form class="BRMeet" action="form.php" method="post" name="BRMeet">
<fieldset><legend>Personal Information:</legend>
<label for="scieTitle"><span class="rd fz14">*</span> Scientific Title:</label><input type="text" name="scieTitle" id="scieTitle"><!-- required-->
<label for="fName"><span class="rd fz14">*</span> First Name:</label><input type="text" name="fName" id="fName"><!-- required-->
<label for="lName"><span class="rd fz14">*</span> Last Name:</label><input type="text" name="lName" id="lName"><!-- required-->
<label for="mobPh"><span class="rd fz14">*</span> Mobile phone (with country prefix):</label><input type="tel" name="mobPh" id="mobPh"><!-- required-->
<label for="eMail"><span class="rd fz14">*</span> E-mail:</label><input type="text" name="eMail" id="eMail"><!--email required-->
</fieldset>
<fieldset><legend>Information about Organization:</legend>
<label for="orgName"><span class="rd fz14">*</span> Organization:</label><input type="text" name="orgName" id="orgName"><!-- required-->
<label for="depName"><span class="rd fz14">*</span> Department:</label><input type="text" name="depName" id="depName"><!-- required-->
<label for="posName"><span class="rd fz14">*</span> Position in&nbsp;Department:</label><input type="text" name="posName" id="posName"><!-- required-->
<label for="orgPh"><span class="rd fz14">*</span> Phone (with country prefix):</label><input type="tel" name="orgPh" id="orgPh"><!-- required-->
<label for="orgFax">Fax (with country prefix):</label><input type="tel" name="orgFax" id="orgFax">
<label for="orgSite">Website:</label><input type="url" name="orgSite" id="orgSite">
<label for="orgStreet"><span class="rd fz14">*</span> Street/Number:</label><input type="text" name="orgStreet" id="orgStreet"><!-- required-->
<label for="orgCity"><span class="rd fz14">*</span> Town/City:</label><input type="text" name="orgCity" id="orgCity"><!-- required-->
<label for="orgCode"><span class="rd fz14">*</span> Postal/ZIP Code:</label><input type="text" name="orgCode" id="orgCode"><!-- required-->
<label for="orgCountry"><span class="rd fz14">*</span> Country:</label><input type="text" name="orgCountry" id="orgCountry"><!-- required-->
</fieldset>
<fieldset><legend>Comments (if necessary):</legend>
<label for="cmmnts">Your Comments:</label><textarea name="cmmnts" id="cmmnts"></textarea>
</fieldset>
<fieldset style="text-align:center;"><legend>Actions with Form:</legend>
<input type="submit" value="Submit Form"><input type="reset" value="Clear Form">
</fieldset>
</form>

После ее заполнения и нажатия submit данные заносятся в БД и одновременно пользователю уходит сообщение с активационной ссылкой. (файл form.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
<?
include 'db.php';
$db_scieTitle = $_REQUEST['scieTitle'];
$db_fName = $_REQUEST['fName'];
$db_lName = $_REQUEST['lName'];
$db_regDate = date("Y-m-d H:i:s");
$db_mobPh = $_REQUEST['mobPh'];
$db_eMail = $_REQUEST['eMail'];
$db_orgName = $_REQUEST['orgName'];
$db_depName = $_REQUEST['depName'];
$db_posName = $_REQUEST['posName'];
$db_orgPh = $_REQUEST['orgPh'];
$db_orgFax = $_REQUEST['orgFax'];
$db_orgSite = $_REQUEST['orgSite'];
$db_orgStreet = $_REQUEST['orgStreet'];
$db_orgCity = $_REQUEST['orgCity'];
$db_orgCode = $_REQUEST['orgCode'];
$db_orgCountry = $_REQUEST['orgCountry'];
$db_cmmnts = $_REQUEST['cmmnts'];
 
$result = mysql_query("SELECT id FROM participants WHERE email='$db_eMail'");
$myrow = mysql_fetch_array($result);
if (!empty($myrow['id'])) {
exit ('<p class="rd btxt cntr">Sorry!<br/>The&nbsp;e-mail that you fill in&nbsp;the&nbsp;form already exists in&nbsp;the&nbsp;database.<br/>Please, choose another e-mail for&nbsp;registration!</p>');
}
$insert_sql = "INSERT INTO participants (reg_date, scie_title, first_name, last_name, mob_phone, email, organization, department, position, phone, fax, w_site, adress, city, zip_code, country, comment)" . "VALUES('{$db_regDate}', '{$db_scieTitle}', '{$db_fName}', '{$db_lName}', '{$db_mobPh}', '{$db_eMail}', '{$db_orgName}', '{$db_depName}', '{$db_posName}', '{$db_orgPh}', '{$db_orgFax}', '{$db_orgSite}', '{$db_orgStreet}', '{$db_orgCity}', '{$db_orgCode}', '{$db_orgCountry}', '{$db_cmmnts}');";
mysql_query($insert_sql);
echo '<p class="rd btxt cntr">You have successfully completed the&nbsp;form! Check your email! We have sent you an&nbsp;activation link!</p>';
 
$activ = mysql_query("SELECT id FROM participants WHERE email='$db_eMail'");
$id_activ = mysql_fetch_array($activ);
$activation = md5($id_activ['id']);
$subject = "Registration Confirmation";
$message = "Hello, $db_fName! Thank you for filling Registration Form for Participation in 23rd Annual Meeting of the Baltic Sea Region Program on Occupational Health and Safety on XIV OHRNC-2017 site.\nIn order to confirm the entered information, you need to activate your e-mail.\nTo activate your e-mail, click the link: http://congr2017/eng/balt-reg-safe-meet/form/activation.php?email=".$db_eMail."&act=".$activation."\nSincerely, Administration http://congr2017/";//содержание сообщение
mail($db_eMail, $subject, $message, "Content-type:text/plain; Charset=windows-1251\r\n");
?>

файл 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
25
26
<?
include 'db.php';
if(isset($_GET['act']) AND isset($_GET['email'])) {
$act = $_GET['act'];
$act = stripslashes($act);
$act = htmlspecialchars($act);
 
$db_eMail = $_GET['email'];
$db_eMail = stripslashes($db_eMail);
$db_eMail = htmlspecialchars($db_eMail);
}
else{
exit('<p class="cntr rd">You have entered the&nbsp;page without confirmation code!</p>');
}
$activ = mysql_query("SELECT id FROM participants WHERE email='$db_eMail'"); //извлекаем идентификатор пользователя с данным e-mail
$id_activ = mysql_fetch_array($activ);
$activation = md5($id_activ['id']);
$db_authDate = date("Y-m-d H:i:s");
if ($activation == $act) {//сравниваем полученный из url и сгенерированный код
mysql_query("UPDATE participants SET auth='1', auth_date='$db_authDate', hash='$activation' WHERE email='$db_eMail'");
echo '<p class="cntr">Your e-mail address has been successfully activated on&nbsp;'.$db_authDate.'!<p>';
}
else {
echo '<p class="cntr rd"><span class="btxt">Error!</span> Your account is not activated. Please, try again or&nbsp;contact the&nbsp;site administrator.</p>';
}
?>


Необходимо реализовать вывод ошибки о повторном нажатии ссылки активации из письма, вроде того, как это реализовано на данном сайте.
Запрет повторного нажатия на ссылку активации в e-mail

Понимаю, что надо проверять пустой или не пустой hash, и соответственно выдавать сообщение, но никак не получается, данные все равно обновляются, как будто происходит повторная активация (этого кода нет в activation.php).

Буду очень признательна за все возможные идеи.
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.02.2017, 15:28
Ответы с готовыми решениями:

Запрет повторного нажатия кнопки при отправки формы
Здравствуйте При отправки формы, пользователь успевает нажать кнопку несколько раз. Нужно - чтобы...

Запрет повторного добавления в Combobox
Создал я комбобокс как сделать так чтобы он повторно не добавлял элемент. А добавил 1 раз в самой...

Запрет повторного просмотра страницы
нужно чтобы пользователь мог просмотреть страницу сайта только один раз в 24 часа я понимаю что...

Запрет повторного входа пользователей
Всем , здравствуйте. Исходные данные: Проект на MVS 2015. Авторизация пользователей работает...

3
576 / 514 / 253
Регистрация: 26.09.2010
Сообщений: 2,597
22.02.2017, 01:46 2
Цитата Сообщение от Marrusa1001 Посмотреть сообщение
Буду очень признательна за все возможные идеи.
надо сделать проверку по таблице в которую пишите активацию participants

например

PHP
1
2
3
4
5
6
7
$check = mysql_query("SELECT `auth` FROM `participants` WHERE email='$db_eMail'");
$row_check = mysqli_fetch_array($check);
if ($row_check['auth'] == '1') {
echo "Вы уже активировались!";
}else {
mysql_query("UPDATE participants SET auth='1', auth_date='$db_authDate', hash='$activation' WHERE email='$db_eMail'");
}
0
0 / 0 / 0
Регистрация: 22.12.2016
Сообщений: 8
22.02.2017, 09:14  [ТС] 3
Виталюска, спасибо, попробую!

Добавлено через 47 минут
Виталюска, еще раз спасибо! Помогло... Если вдруг кому-то нужно, выкладываю готовый 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
25
26
27
28
29
30
31
32
33
34
<?
include 'db.php';
if(isset($_GET['act']) AND isset($_GET['email'])) {
$act = $_GET['act'];
$act = stripslashes($act);
$act = htmlspecialchars($act);
 
$db_eMail = $_GET['email'];
$db_eMail = stripslashes($db_eMail);
$db_eMail = htmlspecialchars($db_eMail);
}
else{
exit('<p class="cntr rd">You have entered the&nbsp;page without confirmation code!</p>');
}
$activ = mysql_query("SELECT id FROM participants WHERE email='$db_eMail'"); //извлекаем идентификатор пользователя с данным e-mail
$id_activ = mysql_fetch_array($activ);
$activation = md5($id_activ['id']);
if ($activation == $act) {//сравниваем полученный из url и сгенерированный код
$checkAuth = mysql_query("SELECT auth FROM participants WHERE email='$db_eMail'");
$rowCheckAuth = mysql_fetch_array($checkAuth);
$db_authDate = date("Y-m-d H:i:s");
if ($rowCheckAuth['auth'] == '1') {
$checkAuthDate = mysql_query("SELECT auth_date FROM `participants` WHERE email='$db_eMail'");
$rowCheckAuthDate = mysql_fetch_array($checkAuthDate);
echo '<p class="cntr">You have already activated on&nbsp;'.$rowCheckAuthDate['auth_date'].'! See you at&nbsp;the&nbsp;event.<p>';
}else {
mysql_query("UPDATE participants SET auth='1', auth_date='$db_authDate', hash='$activation' WHERE email='$db_eMail'");
echo '<p class="cntr">Your e-mail address has been successfully activated on&nbsp;'.$db_authDate.'!<p>';
}
}
else {
echo '<p class="cntr rd"><span class="btxt">Error!</span> Your account is not activated. Please, try again or&nbsp;contact the&nbsp;site administrator.</p>';
}
?>
0
576 / 514 / 253
Регистрация: 26.09.2010
Сообщений: 2,597
22.02.2017, 15:55 4
Цитата Сообщение от Marrusa1001 Посмотреть сообщение
$checkAuth = mysql_query("SELECT auth FROM participants WHERE email='$db_eMail'");
$rowCheckAuth = mysql_fetch_array($checkAuth);
$db_authDate = date("Y-m-d H:i:s");
if ($rowCheckAuth['auth'] == '1') {
$checkAuthDate = mysql_query("SELECT auth_date FROM `participants` WHERE email='$db_eMail'");
$rowCheckAuthDate = mysql_fetch_array($checkAuthDate);
тут второй запрос лишний, можно было использовать только первый
добавив в запрос
PHP
1
$checkAuth = mysql_query("SELECT auth, auth_date FROM participants WHERE email='$db_eMail'");
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.02.2017, 15:55

Запрет повторного вызова OnClick
как сделать так что бы свойство OnClick выполнялось только один раз. То есть при втором нажатие оно...

Запрет повторного запуска приложения
Добрый день! Подскажите пож-та как реализовать запрет повторного запуска приложения, если оно...

Запрет повторного запуска программы
Можете сказать почему он не работает? Вторая копия программы все равно запускается! --- HANDLE...

Запрет повторного запуска приложения
во время открытия приложения оно должно проверить запущена другая копия или нет, если да то...


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

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

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