За последние 24 часа нас посетили 18910 программистов и 1632 робота. Сейчас ищут 954 программиста ...

Взять врем и занести в бд

Тема в разделе "PHP для новичков", создана пользователем Колбася, 20 ноя 2012.

  1. Колбася

    Колбася Активный пользователь

    С нами с:
    12 дек 2011
    Сообщения:
    722
    Симпатии:
    0
    Подскажите вот есть сайт - на нем люди постят фото
    хочу сделать систему, при которой юзеры могли постить фото раз в 15 минут при том что юзеры не регестрируются - ограничение идет по айпи .
    Хочу использовать mysql для отсчёта времени
    вот юзер постит фото...
    пишу
    Код (PHP):
    1.      $ip=$_SERVER['REMOTE_ADDR']; 
    2.      mysql_query("INSERT INTO `posters` (`ip`,`reason_ban`,`time_before_new_post`) VALUES ('".$ip."','".$reason_ban_text."','NOW()')"); 
    Подскажите как дописать это?
    В бд вот так
    Код (PHP):
    1. CREATE TABLE IF NOT EXISTS `posters` (
    2.   `ip` varchar(15) CHARACTER SET utf8 NOT NULL,
    3.   `reason_ban` varchar(255) CHARACTER SET utf8 NOT NULL,
    4.   `time_before_new_post` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00'
    5. ) ENGINE=MyISAM DEFAULT CHARSET=cp1251;
    6.  
    7. --
    8. -- Dumping data for table `posters`
    9. --
    10.  
    11. INSERT INTO `posters` (`ip`, `reason_ban`, `time_before_new_post`) VALUES
    12. ('127.0.0.1', '', '0000-00-00 00:00:00'),
    13. ('127.0.0.1', '', '0000-00-00 00:00:00');
    14.  
    Добавлено спустя 37 секунд:
    ПОдскжите как проще сделать со временем, тут какая-то ошибка.
    Простенько бы
     
  2. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.251
    Адрес:
    там-сям
    а где проверка? в поле таймстамп было бы логично хранить отметку даты-времени пользовательского постинга, по факту.
    а проверять надо прошло ли нужное количество времени с последнего постинга. что может быть проще? открой доки по временным типам mysql массу подходящих примеров найдешь.

    Добавлено спустя 10 минут 3 секунды:
    p.s. использовать айпишник конечно не айс. с одним адресом могут быть тысячи пользователей. если твоя целевая группа имеет какую-то географическую привязку, тогда совсем не годится!
    если работать с анонимными пользователями, то надо или неистребляемый evercookie или еще какой сильный способ определения уникальности.
     
  3. Колбася

    Колбася Активный пользователь

    С нами с:
    12 дек 2011
    Сообщения:
    722
    Симпатии:
    0
    так можно время получить?
    Код (PHP):
    1. $time=date("l dS of F Y h:I:s A"); 
    Добавлено спустя 2 минуты 41 секунду:а вот я сделал время в бд вот так - DATETIME и вписал 0000-00-00 00:00:00
    норм?

    Добавлено спустя 1 минуту 41 секунду:
    Научите меня по дате выбивать из бд дайте ссыль или ключевые слова как поискать
     
  4. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.251
    Адрес:
    там-сям
    Честно — я никогда не использовал запись из PHP в MySQL timestamp ))) Прелесть этого типа, что он может сам заполняться текущий временем при записи.
    Всё что нужно — написать запрос к MySQL без параметров, который будет смотреть разницу между отметкой времени и "сейчас".

    КОЛБАСЯ, ДОКИ ПОЧИТАЙ УЖЕ НАКОНЕЦ. НЕЛЬЗЯ ПРОГРАММИРОВАТЬ НЕ ПРИХОДЯ В СОЗНАНИЕ.

    Добавлено спустя 11 минут 58 секунд:
    Пример: есть такая таблица
    Код (Text):
    1.  
    2. CREATE TABLE `comments` (
    3.   `id` int(10) NOT NULL AUTO_INCREMENT,
    4.   `comment` varchar(100) NOT NULL,
    5.   `posted` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    6.   PRIMARY KEY (`id`),
    7.   KEY (`posted`)
    8. );
    Поле id - автоинкрементный ключ, его не надо заполнять при insert. Аналогично posted - заполняется само текущим временем при вставке или изменении записи. Смотри пример INSERT ниже.

    Как его можно использовать?
    Получить каменты в обратном хронологическом порядке:
    Код (Text):
    1.  
    2. SELECT `id`, `comment`, `posted`, TIMESTAMPDIFF(SECOND, `posted`, CURRENT_TIMESTAMP()) AS `ago`
    3. FROM `comments`
    4. ORDER BY `posted` DESC
    здесь вычисляемое поле ago будет показывать сколько секунд назад произошел камент.

    Вооруженные этим знанием, мы можем оформить запрос "был ли камент за последние, допустим, 15 минут?"
    Сами данные не нужны, только факт их наличия — это и есть нужная тебе проверка перед созданием новой записи!!!
    Код (PHP):
    1. $result = mysql_query("SELECT 1 FROM `comments` WHERE TIMESTAMPDIFF(MINUTE, `posted`, CURRENT_TIMESTAMP()) < 15");
    2. if (mysql_num_rows($result))
    3.     die('Не торопись! Не прошло 15 минут с последнего комментария');
    4.  
    5. $comment = mysql_real_escape_string($_POST['COMMENT']);
    6. mysql_query("INSERT INTO `comments`(`comment`) VALUES('{$comment}')"); // posted заполнится автоматически
    7.  
    Пример очень условный, на то он и пример. Но он показывает, что работая мы можем не париться с форматированием времени при передаче PHP <-> MySQL. Все нужные действия выполняются на стороне базы данных.
     
  5. Колбася

    Колбася Активный пользователь

    С нами с:
    12 дек 2011
    Сообщения:
    722
    Симпатии:
    0
    Вот Артыч мне б так научиться с маскулем фигачить...

    Добавлено спустя 2 минуты 36 секунд:
    ООО :)так приятно когда по нику ^^^^^^^^