Проверка на отсутствие строки

zIP

Новичок
Автор оригинала: Фанат
ты перед записью прверить не забыл - а надо ли что-то записывать?
Если я правильно понял, то проверяем так:

PHP:
function getip($dt) {
  $file=file("data.dat");
      foreach($file as $string) {
        if($dt==rtrim($string)) {
          return false;
          }
       else {
     $ip = $dt;
  }
}
  $file=fopen("data.dat",'a');
      if ($ip = $dt) {
         fputs($file,$ip."\r\n");
       fclose ($file);
      }
      else {
   fclose ($file);
 }
}
-~{}~ 12.04.06 14:43:

Автор оригинала: McSimm
Извиняюсь, может так поможет.
Это копия текста функции из сообщения 12.04.06 14:02 (немножко другими словами)
........иначе { запомнить ненадолго входной параметр (зачем-то) }
}
А как сделать без запоминания входного параметра?

else $ip = true;

и проверка перед записью

if ($ip = true) {...}

Так можно?
 

Фанат

oncle terrible
Команда форума
$file=fopen("data.dat",'a');
ПОЧЕМУ это у тебя всегда делается ДО того, как ты узнаешь - будем что-то писать, или нет?

-~{}~ 12.04.06 14:49:

PHP:
function not_in_file($dt) { 
  $file=file("data.dat"); 
  foreach($file as $string) { 
    if($dt==rtrim($string)) { 
      return false; 
    } 
  }
  return true; 
}
 

zIP

Новичок
Автор оригинала: Фанат
кстати, вот это:

$file=file("data.dat");
$s = count($file);

лишнее.
догадаешься - почему? или подсказать?
Если есть цикл, то можно подсчитать количество проходов цикла. Так?
Я попробовал это сделать так:
PHP:
function getip($dt) {
global $s;
  $file=file("data.dat");
$s = 0;
      foreach($file as $string) {
$s++;
        if($dt==rtrim($string)) {
          return false;
          } .......
Но в этом алгоритме есть маленькая проблема - счетчик сначала считает число проходов без добавленной строки, а потом, когда строка добавляеться, то результат получаеться больше на единицу.
Вот я и думаю как сделать, что бы он выдавал только окончательный результат.

Все, понял.

надо просто прибавить к $s единицу, если происходит следующее действие:
PHP:
     $s = $s+1;
    $file=fopen("data.dat",'a');
      fputs($file,$ip."\r\n");
    fclose ($file);
 

Фанат

oncle terrible
Команда форума
если есть массив, то можно просто посчитать количество его элементов.
но можно и счётчик.

Вот я и думаю как сделать, что бы он выдавал только окончательный результат.
господи, какие вселенские проблемы-то.
в зависимости от того - найдено-не найдено - прибавить или не прибавить единичку.
 

zIP

Новичок
Уже дошло. Спасибо за все.

-~{}~ 13.04.06 12:04:

PHP:
function not_in_file($dt) {
global $s;
  $file=file("data.dat");
    $s = 0;
      foreach($file as $string) {
    $s++;
        if($dt==rtrim($string)) {
      return false;
    }
  }
  return true;
}

if (not_in_file($dt)){
$s = $s+1;
    $file=fopen("data.dat",'a');
      fputs($file,$dt."\r\n");
    fclose ($file);
}
 

CCCP_MOCKBA

Новичок
все верно, только запись в файл лучше делать в функции, ты будешь повторять этот кусок кода и где-то точно ошибешься.

функция имя($параметр) {
чтение из файла;
циклом проходим все прочитаные ip {
если текущий ip равен входному параметру {
выход ничего добавлять не нужно
}
}
запись ip в файл, так как в файле нет такого ip
}

посмотри функцию in_array()
 

zIP

Новичок
PHP:
$dt=getenv("REMOTE_ADDR");
function not_in_file($dt) {
  $file=file("data.dat");
    $s = 0;
      foreach($file as $string) {
    $s++;
        if($dt==rtrim($string)) {
      return false;
    }
  }
$s = $s+1;
    $file=fopen("data.dat",'a');
      fputs($file,$dt."\r\n");
    fclose ($file);

    $file=fopen("count.dat",'w');
      fputs($file,$s);
    fclose ($file);
}

$all_ip = file_get_contents("count.dat");
echo "$all_ip";
 
Сверху