1. Задавайте здесь вопросы о коде, которые не подходят в другие разделы, такие как:
    Дизайн > Верстка
    PHP > Как сделать на PHP
    Скрыть объявление

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

Тема в разделе "Web Coding", создана пользователем DRUG_ADDICT, 17 дек 2007.

Статус темы:
Закрыта.
Модераторы: latteo
  1. DRUG_ADDICT

    DRUG_ADDICT Создатель

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

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

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

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

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

    Спасибо всем!!!
     
  2. terkin

    terkin

    Регистр.:
    9 дек 2006
    Сообщения:
    513
    Симпатии:
    162
    Ну в Mysql можно сделать выборку по дням
    этот пример выберет все записи за последние 3 дня, думаю тебе нужно в эту сторону копать
     
    DRUG_ADDICT нравится это.
  3. DRUG_ADDICT

    DRUG_ADDICT Создатель

    Регистр.:
    9 янв 2007
    Сообщения:
    33
    Симпатии:
    12
    Так для поддержания всеобщего иммунитета:
    Расскажу так:

    ДОПУСТИ!: чел зарегистрировался 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 { } или как ак ??? ваще не догоняю! Может существует какаято формула Энштейна а ? Плиз помогите! Мене это все уже голову ВЗРЫВАЕТ!
     
  4. RomAndry

    RomAndry Постоялец

    Регистр.:
    21 ноя 2007
    Сообщения:
    102
    Симпатии:
    24
    ну самое простое, что должно прийти в голову для начала, это проверять не в базе, а сразу с помощью PHP.
    1. проверка нужна когда юзер нажимает на ссылке в письме.
    1.1. получаем дату из базы
    1.2. получаем текущую дату
    2. проверка периода
    2.1. если период истек - действия (не забываем удалить эту запись, если крон еще не успел)
    2.2. если все ок - действия
    3. по крону (раз в сутки) удаляем записи у которых истек срок.
    MySQL::date

    что из этого тебе НЕ понятно?
     
    DRUG_ADDICT нравится это.
  5. bueno

    bueno Читатель

    Заблокирован
    Регистр.:
    7 май 2007
    Сообщения:
    236
    Симпатии:
    69
    мне вот почемуто тоже кажется, что проблему решать надо на уровне 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 - успел..

    вообщем, пологаю все..
     
    DRUG_ADDICT нравится это.
  6. DRUG_ADDICT

    DRUG_ADDICT Создатель

    Регистр.:
    9 янв 2007
    Сообщения:
    33
    Симпатии:
    12
    Ну да в принципе можно и так как вы говорите...

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

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

    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. bueno

    bueno Читатель

    Заблокирован
    Регистр.:
    7 май 2007
    Сообщения:
    236
    Симпатии:
    69
    ну вообще то это просто время в секундах c 1 января 1970, 00:00:00 по гринвичу - только так время в никсах и хранится.. например php функция date() просто позволяет форматировать ее..

    и sql может возвращать дату в unix формате - UNIX_TIMESTAMP() деректива называется..
    http://dev.mysql.com/doc/refman/4.1/en/date-and-time-functions.html#function_unix-timestamp
    просто если ты используешь поле вида "timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP" тебе вовсе не надо засекать в php дату внесения записи - sql поцессор сам это сделает: -1 операция.. да и чтоб узнать истекло ли время тебе только грамотный запрос а субд нужен - опять же меньше скриптования => меньше вероятность ошибки в коде.. да и высчитывать ничего не надо - субд сама все посчитает.. :)
     
Статус темы:
Закрыта.