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

Фанат

oncle terrible
Команда форума
zIP
если ты хочешь научиться что-то делать, то САМОЕ ГЛАВНОЕ при этом - понимать, что именно ты делаешь.
а если у тебя случайно что-то получилось, и ты совершенно не понимаешь, почему оно работает, то какая польза в этом учении?

-~{}~ 12.04.06 11:29:

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

zIP

Новичок
Это правда. Беда с алгоритмами. Попробою начать с начала.
 

Фанат

oncle terrible
Команда форума
самое смешное - что да, работает.
вот только открывать файл на запись столько раз, сколько строк в файле - не многовато?

скобки-то нужны не для красоты.
и расставлять их надо не от балды. а со смыслом.
они не тебе нужны. а программе.
чтобы она знала, что когда ТЫ ХОЧЕШЬ, чтобы она делала.
А для себя надо ставить ОТСТУПЫ.
Вот как должна выглядеть твоя кривая функция:
PHP:
function getip($dt) {
  $file=file("data.dat");
  foreach($file as $string) 
    if($dt==rtrim($string)) { 
      return false;
    } else 
      $file=fopen("data.dat",'a');
  fputs($file,$dt."\r\n");
  fclose ($file);
}
две совсем лишние скобки я оттуда выкинул
 

zIP

Новичок
Автор оригинала: Фанат
PHP:
function getip($dt) {
  $file=file("data.dat");
  foreach($file as $string) 
    if($dt==rtrim($string)) { 
      return false;
    } else 
      $file=fopen("data.dat",'a');
  fputs($file,$dt."\r\n");
  fclose ($file);
}
две совсем лишние скобки я оттуда выкинул
Так я вроде же так и сделал с начала?

Шестой пост на предыдущей странице. Просто там это было не в виде функции.

Или я вообще ничего не понимаю.
 

Фанат

oncle terrible
Команда форума
ты так и сделал.
эта функция не перестала быть менее кривой.
я в ней ничего не менял.
в её СУТИ. неправильной.

я поменял только ОФОРМЛЕНИЕ.
показал тебе, что отступф очень помогают программисту.
они показывают, что за чем выполняется.
 

zIP

Новичок
Эта функция кривая в целом или ее нужно немного подправить?
 

Andreika

"PHP for nubies" reader
zIP
объясни плиз всю логику функции построчно... $file=file("data.dat"); в объяснениях можно пропустить
 

zIP

Новичок
Автор оригинала: Фанат
да, твой код неправильный.
ты запись делаешь внутри цикла.
а надо её вынести наружу.
Есть два варианта, как я понял.
1) Просто обрывать цикл. Я вроде так сначала и сделал.
2) Сижу и думаю как вынести.
 

sage

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

Фанат

oncle terrible
Команда форума
sage
если ты думаешь, что это вариант без цикла - ты очень сильно заблуждаешься.

человеку надо не строку найти.
а писать на пхп научиться.
а ты ему говоришь - не учись! просто используй готовое. Зачем?

-~{}~ 12.04.06 13:35:

zIP
вариант - ОДИН.
обрывать цикл, или не обрывать, но у тебя должно быть ДВА действия.
Первое - поиск.
Второе - запись.
поиск ты делаешь в цикле.
запись - после поиска.

что тут непонятного?

-~{}~ 12.04.06 13:35:

ты этот код в функцию оформил ради return?
 

zIP

Новичок
Автор оригинала: Фанат
что тут непонятного?

-~{}~ 12.04.06 13:35:

ты этот код в функцию оформил ради return?
Я не могу сообразить как вынести из цикла цапись. В моем представлении она делаеться если не соблюдаеться условие if{}. Или делаеться постоянно.

Как мне вернуть из цикла значение при котором должна делаться запись я не могу понять. Если я закрываю цикл перед else
PHP:
foreach($file as $string) {
if($dt==rtrim($string)) {
return false;
}
}
else
То у меня соответственно ничего не получаеться.

А функция - просто нужна именно такая функция. Вот и пытаюсь сразу сделать функцию.
В общем сижу и думаю. Где-то я в корне не верно представляю проблему.
 

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');
fputs($file,$ip."\r\n");
fclose ($file);
}
 

Фанат

oncle terrible
Команда форума
нет, не совсем.
но алгоритм правильный

-~{}~ 12.04.06 14:08:

зачем тебе здесь функция?
 

zIP

Новичок
Я же говорил, что просто нужна.

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

А в чем ошибка? Намек плз.
 

zIP

Новичок
Да нет, не правильно поняли. Нужно в движок вставить. В нескольких местах. Вот я и начал именно с функции.
 

Фанат

oncle terrible
Команда форума
что это за движок, в котором надо в нескольких местах проверять отсутствие IP в файле?
где это ещё тебе нужно, кроме записи нового в базу?

-~{}~ 12.04.06 14:20:

почему функция называется getip?

-~{}~ 12.04.06 14:21:

ты перед записью прверить не забыл - а надо ли что-то записывать?
 

zIP

Новичок
Php-nuke. У меня к ней три пристройки(не в качестве модуля) - схема корявая, но работоспособная и я ее постоянно подправляю.

Надо вставить по такой функции в каждую пристройку и в саму нюку. Зачем это надо действительно очень долго бъяснять. Схема еще более корявая чем эта функция.
 

McSimm

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

Функция (входной параметр)
{
....прочитать файл;
....цикл для каждой строки файла
....{
........если входной параметр в этой строке, то { уйти из функции }
........иначе { запомнить ненадолго входной параметр (зачем-то) }
....}
....// цикл закончен, раз мы здесь, значит входной параметр в файле не был найден
....дописать входной параметр в файл
}
 
Сверху