[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Исключить повторную регистрацию
Страницы: 1, 2
inpost
В любом браузере можно отключить переадресацию, к примеру, и нажать Ф5. Можно нажать кнопку назад, так же попадём на страницу отправки формы.
То есть переадресация - это не выход, если не хотим хранить дубли.
Я использую метод как с капчей, создаём ключ, в скрипте проверяем его наличие в сессии и в переденных данных, если совпадает -ключ удаляем, операцию производим. Если ключа нет - простая переадресация. Итого ни Ф5, ни несколько нажатых кнопок "отправить" не создадут дубли.
Сюда же можно на JS написать скрипт, который после первого нажатия на кнопку отправить - будет блокировать событие: onsubmit для формы.
Сюда же добавить проверку данные при внесении в БД, чтобы дублей не было от желания вручную создать дубль.
Сюда же выше замеченную переадресацию добавить.

Вроде всё, этого должно хватить, чтобы дублей не было.

_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
Wladim
Обработчик формы add_avtor.php
<?PHP
session_name("serv");
session_start();
$ses_zontik =& $_SESSION['serv'];
ini_set('display_errors',1);
error_reporting(E_ALL);
if (isset ($_GET['avtor_key'])) {$avtor_key = $_GET['avtor_key'];}
if (!isset ($avtor_key)) {$avtor_key = 1;}
$imgstr = "kcaptcha/?".session_name()."=".session_id();
if (!preg_match("|^[\d]+$|", $avtor_key))
{
exit ("<p>Неверный формат запроса! Проверьте URL!</p>");
}
include './blocks/db.php';
if (isset($_GET['cat'])) {$cat = $_GET['cat'];}
if (!isset($cat)) {$cat = 1;}
require './config.php';
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<
html>
<
head>
<
meta http-equiv='refresh' content='20; URL=index.php'>
<
title>Результат регистрации</title>
<
link href="style.css" rel="stylesheet" type="text/css">
</
head>
<
body>
<
table width="98%" border="0" align="center" class="main_border">
<!--
Подключаем шапку сайта-->
<?php include './blocks/header.php'; ?>
<tr><td>
<
table width="100%" border="0">
<
tr>
<!--
Подключаем левый блок сайта-->
<?php include './blocks/lefttd.php'; ?>
<td width="709" valign="top" bgcolor="#ffffff">
<!--
Подключаем центральный блок сайта-->
<
p>
<
h3 align="center">Результат регистрации Автора</h3>
</
p>
<?php
require './libs/options.php';
require './libs/functions.php';
if ($_SERVER['REQUEST_METHOD'] == 'POST')
{
$fam = trim($_POST['fam']);
$avt_name = trim($_POST['avt_name']);
$otch = trim($_POST['otch']);
$loga = trim($_POST['loga']);
$passw = trim($_POST['passw']);
$passw2 = trim($_POST['passw2']);
$eml = trim($_POST['eml']);
if ($fam == '')
{
die("Поле 'Фамилия' не заполнено<br />\n");
}
elseif (!preg_match("/^[а-яёА-ЯЁ_]{3,}$/", $fam))
{
die("В поле 'Фамилия' введены недопустимые символы<br />\n");
}
if ($avt_name == '')
{
die("Поле 'Имя' не заполнено<br />\n");
}
elseif (!preg_match("/^[а-яёА-ЯЁ_]{3,}$/", $avt_name))
{
die("В поле 'Имя' введены недопустимые символы<br />\n");
}
if ($otch == '')
{
die("Поле 'Отчество' не заполнено<br />\n");
}
elseif (!preg_match("/^[а-яёА-ЯЁ_]{3,}$/", $otch))
{
die("В поле 'Отчество' введены недопустимые символы<br />\n");
}
if ($loga == '')
{
die("Поле 'Логин' не заполнено<br />\n");
}
elseif (!preg_match("/^\w{3,}$/", $loga))
{
die("В поле 'Логин' введены недопустимые символы<br />\n");
}
if ($eml == '')
{
die("Поле 'E-mail' не заполнено<br />\n");
}
elseif (!preg_match("/^[a-zA-Z0-9_\.\-]+@([a-zA-Z0-9\-]+\.)+[a-zA-Z]{2,6}$/", $eml))
{
die("Указанный 'E-mail' имеет недопустимый формат<br />\n");
}
if ($passw == '' || $passw2 == '')
{
die("Поле 'Пароль' не заполнено<br />\n");
}
elseif($passw !== $passw2)
{
die("Поля 'Пароль' и 'Повтор пароля' не совпадают<br />\n");
}
elseif(!preg_match("/^\w{3,}$/", $passw))
{
die("В поле 'Пароль' введены недопустимые символы<br />\n");
}
$passw = md5($passw);
$timestamp = time();
}
// ИСКЛЮЧИТЬ ОШИБКУ ДУБЛИРОВАНИЯ АВТОРОВ
$zapros="SELECT * FROM z_avtors WHERE loga='$loga' AND passw='$passw'";
$result=mysql_query($zapros);
if (!$result) die('Invalid query: '.mysql_error());
$rows = $rows=mysql_num_rows($result);
if($rows != 0)
{
echo "Такой автор уже существует.";
exit;
}

$loga = mysql_real_escape_string($loga);
$passw = mysql_real_escape_string($passw);

$zapros="INSERT LOW_PRIORITY INTO z_avtors (fam,avt_name,otch,loga,passw,passw2,eml)
VALUES ('
$fam','$avt_name','$otch','$loga','$passw','$passw2','$eml')";
$result=mysql_query($zapros);
if (!$result) die('Invalid query: '.mysql_error());
$zapros="INSERT LOW_PRIORITY INTO z_anketa (avtor_key,fam,avt_name,otch,eml)
VALUES (
$avtor_key,'$fam','$avt_name','$otch','$eml')";
$result=mysql_query($zapros);
if (!$result) die('Invalid query: '.mysql_error());
else
{
echo "<p align='center' class='post_222'>Анкета успешно создана.</p>";
}
exit;
?>
</td>
</
tr>
<!--
Подключаем нижний блок сайта-->
<
table bgcolor="#CBB392" width="100%" border="0" cellpadding="0" cellspacing="0">
<
tr>
<?php
include './blocks/footer.php';
?>
</tr></table>
</
table>
</
td></tr>
</
body></html>


_____________
в Начале было СЛОВО, а потом - словоЗАслово и ... как поехало! http://a-plagiata.net/service/
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.