Strict Standards: Resource ID#35 used as offset, casting to integer (35) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/fm.class.php on line 401

Strict Standards: Resource ID#37 used as offset, casting to integer (37) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/fm.class.php on line 401

Strict Standards: Resource ID#38 used as offset, casting to integer (38) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/fm.class.php on line 401
ТвойWeb :: Версия для печати :: Скрипт День рождения [2]
ТвойWeb » WebMaster класс » JavaScript » Скрипт День рождения

Страниц (3): « 1 [2] 3 »
 

11. Zerh - 28 Февраля, 2008 - 11:50:18 - перейти к сообщению
Блин дорогой Furax выручай!!! Юзеры постоянно обновляют страничку и в базе твориться беспредел!!! Как решить вопрос? И еще можно ли поставить ограничение, типа один раз денюху ввел и досвидание(при следующей попытке скажит извини ты уже в базе регестрировался!). +для полного счастья кнопочка "база", где можно будет просмотреть денюхи всех зарегеных юзеров. Извини за надоедлевость но я сам уже 3 дня пытаюся освоить php, но увы это не реально, а скрипт нужен уже сейчас, так что все надежда только на этот форум!
12. Furax - 28 Февраля, 2008 - 21:09:30 - перейти к сообщению
После
CODE:
if (!isSet($dates[$month][$day]))
$dates[$month][$day] = array();
добавляем:
CODE:
if (array_search($_POST['nick'], $dates[$month][$day[) !== FALSE)
{
echo 'День рождения уже есть в базе!';
return;
}


По второму вопросу - это уже надо наворачивать скрипт регистрации, хотя, если устроит простой вариант (с cookie-файлами), то можно сделать так:
CODE:
if (isSet($_COOKIE['added']))
{
setCookie('added', 'true', time()+365*24*60*60);
?>Вы не можете добавить больше, чем один день рождения!<?php
}
else
{
?> Тут код формы добавления и сама функция добавления <?php
}
В конце функции addRecord() (после строчки "fclose($file);"Подмигивание добавляем:
CODE:
setCookie('added', 'true', time()+365*24*60*60);


База делается просто:
CODE:
$dates = unserialize(file_get_contents('birthdays.txt'));

foreach ($dates as $month => $monthContent)
foreach ($monthContent as $date => $dateContent)
print "<b>$date.$month:</b> " . implode(', ', $dateContent) . '<br>';
13. Zerh - 29 Февраля, 2008 - 08:56:17 - перейти к сообщению
Furax пишет:
После
CODE:
if (!isSet($dates[$month][$day]))
$dates[$month][$day] = array();
добавляем:
CODE:
if (array_search($_POST['nick'], $dates[$month][$day[) !== FALSE)
{
echo 'День рождения уже есть в базе!';
return;
}

после этого скрипт перестает работать Огорчение

Furax пишет:

Это не обновление. Ты, видимо, внёс именинника, а потом давил "Обновить". Вот браузер каждый раз и передавал POST-поля для добавления именинника, а скрипт добавлял. Попробуй закрыть браузер, а потом снова зайти на страницу - и обновляй сколько хочешь!

Если боишься этого эффекта в будущем - просто раздели страницы добавления и отображения.


Как разделить страницы добавления и отображения. Пользователи все время повторяют эту ошибку: вводят свои данные а потом по 10 раз жмут обновить страничку!
14. Furax - 29 Февраля, 2008 - 09:10:22 - перейти к сообщению
Zerh
CODE:
if (array_search($_POST['nick'], $dates[$month][$day]) !== FALSE)
15. Zerh - 29 Февраля, 2008 - 09:40:07 - перейти к сообщению
я вставил эту строчку после
CODE:

if (!isSet($dates[$month][$day]))
$dates[$month][$day] = array();

теперь добавляеть число и месяц, а ник не добавляеться(как-будто при заполнении формы это поле оставили пустым)
16. Furax - 29 Февраля, 2008 - 10:57:45 - перейти к сообщению
Полный код должен быть таким:
CODE:
<form action="/" method="post">
День: <input name="day" size="2" maxlength="2"><br>
Месяц: <input name="month" size="2" maxlength="2"><br>
Ник: <input name="nick"><br>
<input type="submit" value="OK">
</form>

<?php

function addRecord()
{
if (! (isSet($_POST['day']) && isSet($_POST['month']) && isSet($_POST['nick'])))
return;
if (($_POST['day'] != (string)(int)$_POST['day']) || ($_POST['month'] != (string)(int)$_POST['month']))
{
echo 'Неверно введена дата рождения!';
return;
}

$day=(int)$_POST['day'];
$month=(int)$_POST['month'];

$monthSizes = array(0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
if (! (isSet($monthSizes[$month]) && ($day >= 1) && ($day <= $monthSizes[$month])))
{
echo 'Неверная дата!';
return;
}

if (!preg_match('/\w{1,100}/', $_POST['nick']))
{
echo 'Недопустимый ник!';
return;
}

$dates = unserialize(file_get_contents('birthdays.txt'));

if (!isSet($dates[$month]))
$dates[$month] = array();

if (!isSet($dates[$month][$day]))
$dates[$month][$day] = array();

if (array_search($_POST['nick'], $dates[$month][$day]) !== FALSE)
{
echo 'День рождения уже есть в базе!';
return;
}

$dates[$month][$day][] = $_POST['nick'];

$file = fopen('birthdays.txt', 'w');
fwrite($file, serialize($dates));
fclose($file);
}

addRecord();
?>
17. Zerh - 29 Февраля, 2008 - 12:19:35 - перейти к сообщению
так и есть, но все равно именниники добавляються через запятую. Слушай а может можно сделать так чтоб при нажатии на кнопку ок, пользователь возвращялся на главную страничку, а ссылка " добавить мой день рождения" стала для него невидимой?
а он видел только сегодня именниники: вася петя и я!
18. Furax - 29 Февраля, 2008 - 23:02:58 - перейти к сообщению
Zerh
Можно всё... Я только не понимаю, почему у тебя именинники добавляются через запятую при обновлении страницы, когда у меня всё пучком.

Редирект делается так: в нужном месте вставь
CODE:
header('location: index.php');
19. admroot - 03 Мая, 2010 - 02:46:01 - перейти к сообщению
почему то у меня не работает... Значит я создал таблицу в базе birthday в таблице 3 поля name (varchar255), day (int2), month (int2). Да то что поле name я просто поменял nick (в скрипте тоже попраил). При попытке добавить новую запись в бд - пишет неверная дата... помогите плиз

вот линк premier-produkt.ru
20. Леголегс - 03 Мая, 2010 - 15:40:21 - перейти к сообщению
admroot пишет:
таблицу в базе

Т.е. ты используешь вариант скрита с первой страницы, который с sql?
admroot пишет:
При попытке добавить новую запись в бд - пишет неверная дата
Оно так пишет, если ты пытаешься добавить 35ое марта или 30ое февраля.
admroot пишет:
вот линк
Не работает. 500ая ошибка.

Форум на AlfaSpace.NET


Powered by ExBB
ExBB FM 1.0 RC1 by TvoyWeb.ru
InvisionExBB Style converted by Markus®

[Script Execution time: 0.0404]     [ Gzipped ]



Notice: ob_end_flush(): failed to send buffer of ob_gzhandler (1) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/page_tail.php on line 33