|
|
|
| Привет! Пишу регистрацию пользователей. Схема следующая:
<?php
if (isset($_COOKIE['check']))
{
echo 'Регистрироваться можно только 1 раз в сутки';
}
else {
// обработка данных, если ошибок нет записываем в базу данные
// при успешном добавлении данных в базу переменная $ok = 'true'
}
if($ok == 'true') { // если пользовательские данные успешно добавлены
setcookie ("check", "1", time() + 86400); // вот тут проблема...
}
?>
<!-- здесь HTML форма добавления данных -->
|
как я могу присвоить cookie если успешный результат регистрации пользователя у меня осуществляется после объявления headers заголовков? | |
|
|
|
|
|
|
|
для: tima2010
(16.12.2011 в 15:54)
| | >как я могу присвоить cookie если успешный результат регистрации пользователя у меня
>осуществляется после объявления headers заголовков?
Имеется в виду после вывода в окно браузера? Дело в том, что отправка HTTP-заголовков не мешает отправке других HTTP-заголовков (в данном случае Set-Cookie). | |
|
|
|
|
|
|
|
для: cheops
(16.12.2011 в 16:16)
| | Да но я получаю ошибку:
Вида: Warning: Cannot modify header information - headers already sent by | |
|
|
|
|
|
|
|
для: tima2010
(16.12.2011 в 16:20)
| | если заголовки пытаетесь отправить после этой строки "echo 'Регистрироваться можно только 1 раз в сутки'; ", то будет выводится данное предупреждение. | |
|
|
|
|
|
|
|
для: Slo_Nik
(16.12.2011 в 16:22)
| | то есть если вообще что либо до объявления COOKIES выводится на экран то будет ошибка
В том то и проблема что страница выглядит так:
-Код страницы
--Код проверки данных
--Создаем переменную с успехом регистрации
--Если переменная успеха есть ставим куку
--Форма отображения данных
-Код страницы
|
По идеи нужно сделать так:
---------Если переменная успеха есть ставим куку
-Код страницы
--Код проверки данных
--Создаем переменную с успехом регистрации
--Форма отображения данных
-Код страницы
|
но как я узнаю успешно выполнилась операция или нет, если она объявляется после проверки условия есть она или нет ? | |
|
|
|
|
|
|
|
для: tima2010
(16.12.2011 в 16:28)
| | отличный код, всё понятно до мелочей ))))
"--Создаем переменную с успехом регистрации" вот в этом месте используете header()? | |
|
|
|
|
|
|
|
для: Slo_Nik
(16.12.2011 в 16:41)
| | извиняюсь за столь непонятное описание.
Да там использую headers()
Более цивильный код:
<?php
if($ok == 'true') { // если пользовательские данные успешно добавлены
setcookie ("check", "1", time() + 86400);
}
?>
<!DOCTYPE>
<html>
<head>
<title></title>
</head>
<body>
Вводный текст...
<?php
if (isset($_COOKIE['check']))
{
echo 'Регистрироваться можно только 1 раз в сутки';
}
else {
// обработка данных, если ошибок нет записываем в базу данные
// если все хорошо ->
$ok = 'true';
}
?>
<!-- здесь HTML форма добавления данных -->
</body>
</html>
|
| |
|
|
|
|
|
|
|
для: tima2010
(16.12.2011 в 16:48)
| | и где же в более цивильном коде использование header()? )))
ошибка гласит о том, что заголовки уже отправлены, то есть у Вас есть вывод информации в браузер, или где то затаился коварный пробел ))))
У Вас есть и html и echo перед header(), вот Вам и причина предупреждения | |
|
|
|
|
|
|
|
для: Slo_Nik
(16.12.2011 в 17:02)
| | Спасибо! попробую разобраться почему ошибка! А разве условие сработает? если переменная еще не существует, а я ее уже проверяю. Тут вся проблема у меня в этом. | |
|
|
|
|
|
|
|
для: tima2010
(16.12.2011 в 17:48)
| | Ну так делайте сначала все проверки, а потом уже страницу отдавайте. | |
|
|
|
|
|
|
|
для: tima2010
(16.12.2011 в 17:48)
| | Да тут и разбираться нечего, я написал в чём у Вас проблема, скорей всего.
можно использовать вместо header()
<html><head><meta http-equiv="refresh" content='0; url=адрес_страницы_куда_переход /></head></html> предупреждения не будет | |
|
|
|
|
|
|
|
для: tima2010
(16.12.2011 в 15:54)
| | пользователь может почистить куки и регистрироваться столько, сколько ему захочется раз в сутки... | |
|
|
|
|
|
|
|
для: Slo_Nik
(16.12.2011 в 16:19)
| | да эта смешная "защита" делается просто для того чтобы она была, а тот кому очень нужно всегда найдет лазейку | |
|
|
|
|
|
|
|
для: Slo_Nik
(16.12.2011 в 16:19)
| | можно проверять по ip, когда пользователь регится, записывать в таблицу его ip. И потом просто если какой-то человек захочет зарегиться, он данные отправляет и перед запросом вставку в таблицу стоит еще один запрос на выборку поля IP из таблицы пользователей для сравнения и если его IP обнаружится в базе, то отменяем регистрацию, бла бла какой-то бред написал, лучше кодом :)
<?
$proverka = mysql_query("SELECT id FROM users");
$proverka2 = mysql_fetch_array($proverka);
do
{
/* ищем совпадения ip пользователя с ip в таблице users */
if($proverka2['ip'] == $_SERVER['REMOTE_ADDR']) {exit("<p align='center'>Вы уже регистрировались!</p>");}
}
while($proverka2 = mysql_fetch_array($proverka));
/* IP пользователя не найден в базе, делаем запись в бд */
mysql_query("INSERT INTO users (name,surname, ip) VALUES('$name', '$surname', '$_SERVER['REMOTE_ADDR']')")
?>
|
Ну так сказать тоже защита неизящна, но человеку придется подумать как ip сменить :) Да и если есть желание, думаю можно сделать возможную регистрацию через сутки, как ты хочешь. Тут вместо куки пользователя выступает его ip, мне кажется так лучше будет + гемороя с ошибками не будет! | |
|
|
|
|
|
|
|
для: ladan
(16.12.2011 в 22:53)
| | а как быть с динамическими ip ? | |
|
|
|
|
|
|
|
для: Slo_Nik
(17.12.2011 в 00:02)
| | вот у меня динамический ip, выключил, включил модем и защита от регистрации полетела :) но кому надо тот все равно зарегистрируется, обойдя любую защиту, просто если через ip ограничение делать, то все же защита получше чем куки, я так думаю...
А можно, вместо ip проверять почту..., что самое оптимальное. Пользователь регистрируется, идет запись в бд + организовать модерацию(активацию) через его почту(подтверждение регистрации), как-то так. Будет потребность сделать регистрацию, пойду таким путем :) Да и кому охото будет 50 ящиков создавать | |
|
|
|
|
|
|
|
для: ladan
(17.12.2011 в 00:06)
| | >вот у меня динамический ip.......................
и не только у Вас может быть такой ip, и другой человек, который пользуется услугами одного и того же провайдера вместе с Вами не сможет в этот день зарегистрироваться, ни разу....
это как на depositfile раньше было, заходишь скачать какую-то мелочь, а тебе сообщают, что "с Вашего ip уже идёт скачка....", хотя и на заходил и не качал я с этого сайта уже неделю например...)))
>А можно, вместо ip проверять почту..., что самое оптимальное.
тоже не согласен. у меня оплачен хостинг и есть возможность создать неограниченное кол-во почтовых аккаунтов.... было бы только желание и время... хотя можно написать скрипт и пить чай, пока создаются ящики .... | |
|
|
|
|
|
|
|
для: Slo_Nik
(17.12.2011 в 00:52)
| | >тоже не согласен. у меня оплачен хостинг и есть возможность создать неограниченное кол-во почтовых аккаунтов.... было бы только желание и время... хотя можно написать скрипт и пить чай, пока создаются ящики ....
Ну если так рассуждать, то вообще никакой защиты ставить не нужно :)) Вы и еще 1-2% на земле смогут написать скрипт, а так большинство людей- обычные пользователи пк :) | |
|
|
|
|
|
|
|
для: ladan
(17.12.2011 в 00:06)
| | Почта проверяется, нужно просто скрыть форму регистрации если сегодня пользователь уже регистрировался... | |
|
|
|