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

ranaza12

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

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

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

Подскажите пожалуйста пример подобной фильтрации по дате и IP.
Заранее благодарен.
 
я не спец, но предполагаю что, в конец нужно добавить WHERE ip != '".$ip."'
 
я не спец, но предполагаю что, в конец нужно добавить WHERE ip != '".$ip."'
$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());
 
Последнее редактирование:
не увидал проверки даты, так же как и пояснения смысла данной проверки.
по сути заданного вопроса - уникальное поля для хранения IP и INSERT IGNORE
если необходимо обновлять дату в случаях когда IP уже есть в базе, тогда ON DUPLICATE KEY UPDATE
 
если записей в базе мало (~до 10 тыс) то лучше искать дубликаты средствами скл,
если много, то лучше выборкой в массив и искать дубликат соотвествующей функцией поиска в массиве, array_search напр.
 
Дело не в записях.
К примеру сегодня 29 октября, есть 1 запись с IP, как сделать так чтобы 29 октября 2 запись с тем же IP не добавилась. Но чтобы добавилась 30 октября, ну итд...
 
Просто сделай функцию отправки, а в ней напиши
Код:
function sendPost(  )
{
    $ip = func_get_arg (0);
    (bool) $temp = false;
    $temp = ( $ip != "тут запрос, на то есть за сегодня посты" ) ? true : false;
    return $temp;
}
// использование
sendPost( $_SERVER['REMOTE_ADDR'] ) ? /*тут код для отправки поста лучше функция*/ : 'вы уже отправили за сегодня макс. кол-во сообщений';
 
Просто сделай функцию отправки, а в ней напиши
Код:
function sendPost(  )
{
    $ip = func_get_arg (0);
    (bool) $temp = false;
    $temp = ( $ip != "тут запрос, на то есть за сегодня посты" ) ? true : false;
    return $temp;
}
// использование
sendPost( $_SERVER['REMOTE_ADDR'] ) ? /*тут код для отправки поста лучше функция*/ : 'вы уже отправили за сегодня макс. кол-во сообщений';
Хорошо, но я не использую функции, так как это задание Cron
 
Дело не в записях.
К примеру сегодня 29 октября, есть 1 запись с IP, как сделать так чтобы 29 октября 2 запись с тем же IP не добавилась. Но чтобы добавилась 30 октября, ну итд...

Уникальный индекс повесить на таблицу не вариант?

В мускуле что-то типа:
Код:
ALTER TABLE `ios_pos` ADD UNIQUE INDEX `ix_ios_pos` (`ip`, `time`);
 
Вариант без БД. Делал себе для опроса. Файл 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);
}
 
Назад
Сверху