Временой интервал или что то типа того...

Статус
В этой теме нельзя размещать новые ответы.

DRUG_ADDICT

Создатель
Регистрация
9 Янв 2007
Сообщения
33
Реакции
12
Я не начинающий программист в PHP но создаю тему сдесь хотя не уверен что она должна быть сдесь... скорее все в этой теме: PHP Pro
Если вы уже разбираетесь в языке, но хотите помочь другим/нужна помощь - то вам сюда.
т.к. сюда заходят те кто реально поможет, только вот кому? если все новички уходят сюда => :)))))) а в эту тему: PHP для начинающих
Раздел для тех кто только начинает изучать язык.

сдесь заходят начинающие... хых...
но все же в ПЕРВОМ написано что для ПОМОЩИ заходить... Обращаюсь к модерам и админам ОБРАТИТЕ на это внимание!!! как то малость туповато у вас темы именуются... сори... бес обит... :confused:

Вообщем все это был оффтоп

тепрь по теме!!!

Люди добрые пишу я скрипт подтверждения регистрации все уже написал практически осталось тока сделать это: а именно: например юзверь зарегистрировался 15 числа ему дается 3 дня на подтверждения регистрации тоесть вставить сЦылку пройти по ней и подтвердить регистрацию введя пароль.... все что связано с паролями с SQL запросами все это я написал написать я не могу только вот ту часть которая отвечает за время тоесть за "3 дня" которые даются пользователю... вроде бы не чего сложного но на самом то деле... что то вот лично я как это сделать не могу догадаться и прошу вас о ПОМОЩИ!!! если есть исходники или может вы знаете какуюто формулу или как это все логически выглядить опишите пропишите на словах даже русских помогите и подскажите пожалуйста!!! :bc:

Спасибо всем!!!
 
Ну в Mysql можно сделать выборку по дням
WHERE TO_DAYS(NOW())-TO_DAYS(stat.date)<3
этот пример выберет все записи за последние 3 дня, думаю тебе нужно в эту сторону копать
 
Так для поддержания всеобщего иммунитета:
Расскажу так:

ДОПУСТИ!: чел зарегистрировался 15 ($dara_reg) числа, ЕМУ дается 3 дня чтобы он подтвердил регистрацию, тоесть конечная дата это 18 число ($end_data:(

PHP:
$data_bd = $row[2]; //Берем дату регистрации с базы имеет вид как - 15.12.07

$data = explode(":",$data_bd); //вытаскиваем день а именно число "15"

$end_data = $data[0] + 3; // получаем конечную дату "18"

$time = time(); // получаем настоящую дату в виде "временной метки"

$time_f = date("d.m.Y",$time); // преобразуем временную метку в "наш" формат времени или хз как он называется... в виде 31.12.07

$time_d1 = explode(":",$time_d); // берем снова число настоящего времени оно будет "X" - ну или пусть -"31"

В итоги у нас есть: 15 - начало регистрации, 18 - собсно конец и X или 31 - это время которое щас ну допустим было бы оно щас :))) вообщем хочу подметить кто не понял 31 число может быть АБСОЛЮТНО ЛЮБЫМ числом от 1 до 31 вот так ;)

А ТЕПРЬ ВНИМАНИЕ! КАК КАК вот это все составарить там с помощью конструкции может быть if ( ){ } else { } или как ак ??? ваще не догоняю! Может существует какаято формула Энштейна а ? Плиз помогите! Мене это все уже голову ВЗРЫВАЕТ!
 
ну самое простое, что должно прийти в голову для начала, это проверять не в базе, а сразу с помощью PHP.
1. проверка нужна когда юзер нажимает на ссылке в письме.
1.1. получаем дату из базы
1.2. получаем текущую дату
2. проверка периода
2.1. если период истек - действия (не забываем удалить эту запись, если крон еще не успел)
2.2. если все ок - действия
3. по крону (раз в сутки) удаляем записи у которых истек срок.
Для просмотра ссылки Войди или Зарегистрируйся

что из этого тебе НЕ понятно?
 
  • Заблокирован
  • #5
мне вот почемуто тоже кажется, что проблему решать надо на уровне sql..

думаю примерно так:

1. при регистрации ты выдаешь юзеру ссылку с уникальным иднетификатором

2. при этом заносишь этот иднетификатор в базу в периодически очищаемую (по сроку устаревания записи, в твоем случае 3 дня) таблицу. в таблице, кроме полей с начальными данными (имя, мыло и т.п.) присутствуют поля
Код:
reg_ident varchar(32) NOT NULL default '',
reg_date timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
в reg_ident заносишь, собсна, иднетификатор регистрации, а в reg_date автоматом занесется дата и время регистрации

3. при активации ссылки делаешь, например, так
Код:
SELECT IF((DAYOFYEAR(NOW())-DAYOFYEAR(reg_date))<4, 0, 1) AS is_registered FROM user_pre_register_table WHERE reg_ident = "$php_formated_reg_ident"

4. ну а далее уже выполнив запрос можешь проверить возвратил ли что запрос, т.е. был ли мальчик, и если да, то что вернул is_registered: 0 - проспал, 1 - успел..

вообщем, пологаю все..
 
Ну да в принципе можно и так как вы говорите...

Но вот мне щас один крутой чел подсказал иначе сделать...

А это при регистрации пользователя дата когда он стал регистрироваться заносится в базу и записывается не просто как дата а как временная метка:

PHP:
time(); 
//как известно временная метка НЕ КОГДА не может быть 
//уменьшатся она всегда в "+" всегда идет прибавления одной секунды.. 
//точнее это отчет по секундный с 70-х годов, тогда когда ещё Линукс Торвальдс ходил в грошек!
//Там уже больше 1.1 миллиарда секунд.
//(я кстати этого даже и не знал до этого пока мне не подсказал крутой чел сиошник в аске)

Чтоб сразу упростить... ммм... я делаю так:

PHP:
$data = time();
$end_data = $data + 24 * 60 * 60 * 3;
// дату сегодняшнюю на тот момент когда тип регистрируется я + 24часа * 60мин * 60сек * 3дня

получаю конечную дату в секундах. записываю в базу... после когда чел посещает сайт с целью подтверждения регистрации его конечная дата сравнивается с настоящей датой в секундах опять же (временная метка). и:

PHP:
$data = time();
IF ($data > $end_data){
echo "3 дня прошло иди **х"; 
} else {
echo "Регистрация подтверждена";
}

Вот и все! Вопрос решен тему клосед всем Спасибо, и жму всем + репутЭйшен! :)
 
  • Заблокирован
  • #7
ну вообще то это просто время в секундах c 1 января 1970, 00:00:00 по гринвичу - только так время в никсах и хранится.. например php функция date() просто позволяет форматировать ее..

и sql может возвращать дату в unix формате - UNIX_TIMESTAMP() деректива называется..

просто если ты используешь поле вида "timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP" тебе вовсе не надо засекать в php дату внесения записи - sql поцессор сам это сделает: -1 операция.. да и чтоб узнать истекло ли время тебе только грамотный запрос а субд нужен - опять же меньше скриптования => меньше вероятность ошибки в коде.. да и высчитывать ничего не надо - субд сама все посчитает.. :)
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху