Forum Webscript.Ru

Программирование => PHP => Тема начата: quest от 26 Февраля 2006, 13:17:36

Название: Всплываюшее окно один раз в сутки.
Отправлено: quest от 26 Февраля 2006, 13:17:36
Вот захотел сделать такое чудо..
Но совершенно беспонятия как, единственное место где могут помочь- это здесь..
Вобщем, что нужно:
Нужно, чтобы новое окошко открывалась одному ИП один раз в сутки. А вообще идеально было бы, сделать такую фитчу, чтобы не каждому открывалось один раз в сутки, а через какое то определенное кол-во людей.
Всем кто поможет огрооомное человеческое спасибо.. :rolleyes:
Название: Всплываюшее окно один раз в сутки.
Отправлено: for_i_0 от 26 Февраля 2006, 21:28:48
Причем тут PHP ?
Самые основы. Как работает PHP. (http://phpfaq.ru/na_tanke)
Название: Всплываюшее окно один раз в сутки.
Отправлено: quest от 26 Февраля 2006, 22:33:52
а на каком другом языке можно так сделать?
Название: Всплываюшее окно один раз в сутки.
Отправлено: andymc от 26 Февраля 2006, 22:47:44
Забавно.
Человек-то дейтсвительно не знает, как сделать такую простую вещь. И вроде как помочь-то не трудно, а просто... неинтересно мне это.
Вот буквально за пару секунд я в голове набросал решение и... неинтересно.
Да! Чувак, давай-ка ты сам реши эту задачку. Тебе же будет полезнее. Вот честно. Представь логичекси, что надо сделать, как, и попробуй. Это ведь действительно не сложно. Надо только знать пару простых функций и мыслить логически.
Название: Всплываюшее окно один раз в сутки.
Отправлено: quest от 26 Февраля 2006, 23:01:08
andymc
Помоги пожалуйста.
Ведь еслиб я был бы великим программёром, я даже не написал бы сюда. Глупо говорить подумай, я думал- результат 0. Вообще такое чудо многим пригодится. Набросай решение в письменном виде пожалуйста )
Название: Всплываюшее окно один раз в сутки.
Отправлено: for_i_0 от 26 Февраля 2006, 23:15:05
quest
Java Script + Cookie
Название: Всплываюшее окно один раз в сутки.
Отправлено: andymc от 27 Февраля 2006, 00:51:44
Полчаса сидел, написал вот это.
function makeForOne(){
// в этой функции нужно написать, что делать
echo "Это будет выполняться только 1 раз в день для 1 юзера";
};
// эта функция делает основные операции
function check($ip){
$truncateAfter0=false; // очищать ли список ip в 0 часов каждый день
$file=\'saver.txt\'; // файл для сохранения IP
if (!file_exists($file)) {
$fo=fopen($file,\'w+\');
} else {
$fo=fopen($file,\'a+\');
};
$now=time();
$array=file($file);
if (sizeof($array)>0){
$truncTime=trim($array[0])+86400;
if (date("G",$now)==\'0\'&&$truncateAfter0&&$truncTime<$now){
// время, когда надо снова очищать файл

$fo=fopen($file,\'w+\');
fwrite($fo,"$now\\n");
};
foreach ($array as $key=>$value){
if (trim($value)!="") {
$array2=explode("|",trim($value));
// если время для IP истекло, т.е. прошло 86400 секунд
if ($array2[1]==trim($ip)&&$array2[0]<$now) {
makeForOne();
break;
};
// или если IP вообще ещё не сохранён
if ($array2[1]!=trim($ip)) {
makeForOne();
$expired=$now+86400;
fwrite($fo,"\\n$expired|$ip");
break;
};
};
};
} else {
makeForOne();
$expired=$now+86400;
fwrite($fo,"\\n$expired|$ip");
};
fclose($fo);
};
// узнаём IP текущего пользователя b проверяем
$ip=$_SERVER[\'REMOTE_ADDR\'];
check($ip);
В функции  makeForOne надо написать, что делать (открыть окно).
!Код не оптимален. Прошу сильно не ругать. Надеюсь, кто-нибудь возьмётся и улучшит его.
Название: Всплываюшее окно один раз в сутки.
Отправлено: quest от 27 Февраля 2006, 15:25:42
Просто огромное человеческое спасибо..
Это мне и нужно было..
Ещё раз спасибо.
Название: Всплываюшее окно один раз в сутки.
Отправлено: fuza от 28 Февраля 2006, 20:01:19
да на яве с куками было бы проше реализовать, и не нада php заставлять думать ;)
Название: Всплываюшее окно один раз в сутки.
Отправлено: AlieN от 01 Марта 2006, 14:29:52
псих!!:)
Вот тебе более которкий вариант.

if(!$_COOKIE["vas"]){
setcookie("vas",mktime(),time()+3600*24);
echo \'\';
}
Название: Всплываюшее окно один раз в сутки.
Отправлено: andymc от 01 Марта 2006, 21:11:33
1. Задача была - "одному IP в сутки". Решение: сохранять и проверять IP. "Дважды два."
COOKIE каждого конкретного польователя никак не отвечают условиям задачи. Другое дело если бы задча была "одному пользователю с уникальной кукой в сутки".
2. COOKIE не поможет, если попытаться решить задачу №2 - "открывать окно через n пользователей".
3. И вообще cookie это не надёжно, если речь идёт о серъёзных вещах.
Название: Всплываюшее окно один раз в сутки.
Отправлено: AlieN от 02 Марта 2006, 00:49:10
сессии, хранить на стороне сервера.
Название: Всплываюшее окно один раз в сутки.
Отправлено: for_i_0 от 02 Марта 2006, 06:48:41
Цитировать
andymc:
3. И вообще cookie это не надёжно, если речь идёт о серъёзных вещах.


IP тем более.