Страниц (3): [1] 2 3 » |
|
Описание: скрипт День рождения |
Поиск в теме | Версия для печати |
Furax |
Отправлено: 20 Февраля, 2008 - 23:20:38
|
Бледнотик
Покинул форум
Сообщений всего: 1472
Дата рег-ции: Март 2007
Откуда: Иркутск, Сибирь, СССР
Карма 32
|
Да, это задача php, т. к. js не имеет доступа к серверной части.
Так... Если делать через базу данных, где есть таблица birthdays с полями day, month, nick соответствующих типов, то можно провернуть нечто вот в таком роде:
Страница добавления даты:
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[$size])))
{
echo 'Неверная дата!';
return;
}
if (!preg_match('/\w{1,100}/', $_POST['nick']))
{
echo 'Недопустимый ник!';
return;
}
mysql_query("INSERT INTO birthdays (day, month, nick) VALUES ($day, $month, '$_POST[nick]')");
}
addRecord();
?>
На странице вывода сегодняшних дней рождения:
CODE:$result = mysql_query('SELECT nick FROM birthdays WHERE (day = DAYOFMONTH(NOW())) AND (month = MONTH(NOW())) ORDER BY nick');
if (mysql_num_rows($result))
{
$nicks=array();
while ($row = mysql_fetch_row($result)) $nicks[] = $row[0];
echo 'Именинники: ' . implode(', ', $nicks);
}
else
echo 'Сегодня именинников нет'; (Отредактировано автором: 20 Февраля, 2008 - 23:21:05) |
|
|
Furax |
Отправлено: 21 Февраля, 2008 - 21:00:16
|
Бледнотик
Покинул форум
Сообщений всего: 1472
Дата рег-ции: Март 2007
Откуда: Иркутск, Сибирь, СССР
Карма 32
|
Zerh
Тогда ИМХО проще всего загонять в массив. В файле birthdays.txt в начале должно лежать:(Это результат выполнения serialize(array()).)
Естественно, если данные должны быть защищены, нужно делать уже php-файл.
Страница добавления: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();
$dates[$month][$day][] = $_POST['nick'];
$file = fopen('birthdays.txt', 'w');
fwrite($file, serialize($dates));
fclose($file);
}
addRecord();
?>
Страница отображения:CODE:<?php
$dates = unserialize(file_get_contents('birthdays.txt'));
$month = (int)date('m');
$day = (int)date('d');
if (isSet($dates[$month]) && isSet($dates[$month][$day]))
echo 'Именинники: ' . implode(', ', $dates[$month][$day]);
else
echo 'Сегодня именинников нет';
?> |
|
|
Furax |
Отправлено: 23 Февраля, 2008 - 23:54:59
|
Бледнотик
Покинул форум
Сообщений всего: 1472
Дата рег-ции: Март 2007
Откуда: Иркутск, Сибирь, СССР
Карма 32
|
Zerh
Это не обновление. Ты, видимо, внёс именинника, а потом давил "Обновить". Вот браузер каждый раз и передавал POST-поля для добавления именинника, а скрипт добавлял. Попробуй закрыть браузер, а потом снова зайти на страницу - и обновляй сколько хочешь!
Если боишься этого эффекта в будущем - просто раздели страницы добавления и отображения.
По второму вопросу - вот эта строчка:CODE:if (!preg_match('/\w{1,100}/', $_POST['nick'])) должна быть заменена наCODE:if (!preg_match('/[a-zA-Zа-яА-Я\-]{1,100}/', $_POST['nick'])) |
|
|
|
Поиск в теме | Версия для печати |
Страниц (3): [1] 2 3 » |
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0, скрытых: 0) |
« JavaScript » |
Все гости форума могут просматривать этот раздел. Только администраторы и модераторы могут создавать новые темы в этом разделе. Только администраторы и модераторы могут отвечать на сообщения в этом разделе.
|
|
|