Проверка IP по датам перед вставкой в таблицу

Тема в разделе "Как сделать...", создана пользователем ranaza12, 25 окт 2015.

  1. ranaza12

    ranaza12 Создатель

    Регистр.:
    11 июл 2012
    Сообщения:
    8
    Симпатии:
    2
    Задача следующая , с текстового документа (txt) берутся данные и вносятся в таблицу.
    Но проблема в том что нужно запретить повторные IP.

    На сколько я понимаю выборка идет следующим образом
    1- Проверяем дату
    2- Проверяем существует в базе уже IP по указанной дате
    3- Разрешаем вставку

    Вставка в таблицу: [$query = "INSERT INTO ios_pos (id,time,ip) VALUES('".$id."','".$time."','".$ip."')";]

    Подскажите пожалуйста пример подобной фильтрации по дате и IP.
    Заранее благодарен.
     
  2. javx

    javx

    Регистр.:
    28 авг 2015
    Сообщения:
    521
    Симпатии:
    239
    я не спец, но предполагаю что, в конец нужно добавить WHERE ip != '".$ip."'
     
  3. ranaza12

    ranaza12 Создатель

    Регистр.:
    11 июл 2012
    Сообщения:
    8
    Симпатии:
    2
    $query = "SELECT id FROM ios_pos WHERE id = ".$v_id;
    $result = mysql_query($query, dbconnect());
    $row=mysql_fetch_row($result);
    if($row[0])
    continue;

    $query = "INSERT INTO ios_pos (id,time,ip) VALUES('".$id."','".$time."','".$ip."')";
    $mysqlresult=MySQL_Query("select * from `ios_user` WHERE `email`='$v_name'", dbconnect());
    $UID=MySQL_result($mysqlresult,0,'ID');

    $result = mysql_query($query, dbconnect());
     
    Последнее редактирование: 25 окт 2015
  4. stealthdebuger

    stealthdebuger Механик

    Administrator
    Регистр.:
    25 авг 2008
    Сообщения:
    624
    Симпатии:
    1.379
    не увидал проверки даты, так же как и пояснения смысла данной проверки.
    по сути заданного вопроса - уникальное поля для хранения IP и INSERT IGNORE
    если необходимо обновлять дату в случаях когда IP уже есть в базе, тогда ON DUPLICATE KEY UPDATE
     
    murlo нравится это.
  5. Eugeny1985

    Eugeny1985 Создатель

    Регистр.:
    5 фев 2015
    Сообщения:
    11
    Симпатии:
    2
    если записей в базе мало (~до 10 тыс) то лучше искать дубликаты средствами скл,
    если много, то лучше выборкой в массив и искать дубликат соотвествующей функцией поиска в массиве, array_search напр.
     
  6. ranaza12

    ranaza12 Создатель

    Регистр.:
    11 июл 2012
    Сообщения:
    8
    Симпатии:
    2
    Дело не в записях.
    К примеру сегодня 29 октября, есть 1 запись с IP, как сделать так чтобы 29 октября 2 запись с тем же IP не добавилась. Но чтобы добавилась 30 октября, ну итд...
     
  7. Oops2

    Oops2 Писатель

    Регистр.:
    7 янв 2015
    Сообщения:
    0
    Симпатии:
    0
    Просто сделай функцию отправки, а в ней напиши
    Код:
    function sendPost(  )
    {
        $ip = func_get_arg (0);
        (bool) $temp = false;
        $temp = ( $ip != "тут запрос, на то есть за сегодня посты" ) ? true : false;
        return $temp;
    }
    // использование
    sendPost( $_SERVER['REMOTE_ADDR'] ) ? /*тут код для отправки поста лучше функция*/ : 'вы уже отправили за сегодня макс. кол-во сообщений';
    
     
  8. ranaza12

    ranaza12 Создатель

    Регистр.:
    11 июл 2012
    Сообщения:
    8
    Симпатии:
    2
    Хорошо, но я не использую функции, так как это задание Cron
     
  9. rockerzz

    rockerzz Создатель

    Регистр.:
    12 янв 2013
    Сообщения:
    13
    Симпатии:
    1
    Уникальный индекс повесить на таблицу не вариант?

    В мускуле что-то типа:
    Код:
    ALTER TABLE `ios_pos` ADD UNIQUE INDEX `ix_ios_pos` (`ip`, `time`);
    
     
  10. interdividend

    interdividend Создатель

    Регистр.:
    23 дек 2014
    Сообщения:
    19
    Симпатии:
    2
    Вариант без БД. Делал себе для опроса. Файл ip1.dat не забудьте создать
    PHP:
    $ip$_SERVER['REMOTE_ADDR']; //получаем ip адрес
    $ip_file file_get_contents("ip1.dat");//читаем содержимое файла ip адресов и помещаем в строку
    $ip_abbr explode(","$ip_file);//получаем в массив имеющиеся ip адреса
    //сравниваем ip с уже записанными
    if(условие) {
    foreach(
    $ip_abbr as $value
    if (
    $ip == $value) {echo "<p><b><font color=red> Дубль </font></b></p>";
    exit;
    }
    else {
    $validate "1";
    }
    }
    // ваш запрос
    if ($validate == "1") {
    mysql_query("ваш запрос");
    }
    // запись
    if(условие) {
      
    $ip_adr fopen("ip1.dat","a++");
        
    flock($ip_adr,LOCK_EX);
    fputs($ip_adr"$ip".",");
    fflush($ip_adr);
        
    flock($ip_adr,LOCK_UN);
    fclose($ip_adr);
    }