Strict Standards: Resource ID#18 used as offset, casting to integer (18) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/fm.class.php on line 401

Strict Standards: Resource ID#23 used as offset, casting to integer (23) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/fm.class.php on line 401

Strict Standards: Resource ID#25 used as offset, casting to integer (25) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/fm.class.php on line 401

Strict Standards: Resource ID#26 used as offset, casting to integer (26) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/fm.class.php on line 401
ТвойWeb :: Чтение из файла всех строк
ТвойWeb ТвойWeb
Качественный Европейский хостинг
Форум для чайников
 Чат на форуме      Помощь      Поиск      Пользователи


 Страниц (1): [1]   

> Без описания
Alone
Отправлено: 22 Апреля, 2007 - 10:31:03
Post Id



Super Member


Покинул форум
Сообщений всего: 2393
Дата рег-ции: Дек. 2004  

Карма 8




Что-то не получается читать все строки в файле.
Ситуация такая:

Вот я записываю в файл строки с инфой:

CODE:
$text="$text|$name|$email|$date|$time|$today|";
$date=date("d.m.Y");
$time=date("H:i:s");
$today=mktime();

$file = fopen ("file.dat","a");
flock ($file,LOCK_EX);

fwrite ($file, "$text\r\n");

fflush ($file);
flock ($file,LOCK_UN);
fclose ($file);


В результате в файле file.dat появляются типа такие строки:

CODE:
бла-бла-бла|Николай|nik@mail.ru|20:12:34|35435435|
бла-бла-бла|Олег|nik@mail.ru|20:12:34|35435435|
бла-бла-бла|Лена|nik@mail.ru|20:12:34|35435435|
бла-бла-бла|Света|nik@mail.ru|20:12:34|35435435|
бла-бла-бла|Катя|nik@mail.ru|20:12:34|35435435|


Дальше я хочу чтобы если постят "бла-бла-бла|Николай|" - то выдавалось сообщение о том, что такая запись уже есть.

Я делаю следующее:

CODE:
$lines=file("file.dat");

$i=count($lines)-1;

$dtf=explode("|",$lines[$i]);
$txtback="$dtf[0]|$dtf[1]|";

$dtb=explode("|",$text);
$txtflud="$dtb[0]|$dtb[1]|";

if (($lastmsg+9)>$today)

if ($txtflud==$txtback)
echo "Кончай флудить!!!";


В этом случае читает только самую нижнюю сторку и сравнение идёт только с нею. А мне нужно чтобы сравение шло со всеми строками файла "file.dat". Пробовал делать через так: "for($i=0;$i<count($file);$i++)" но что-то не получается...

Блин, как сделать чтобы сравнение шло по всем сторкам?
 
 Top
awep
Отправлено: 24 Апреля, 2007 - 14:48:56
Post Id



Наш человек


Покинул форум
Сообщений всего: 304
Дата рег-ции: Дек. 2005  
Откуда: Казань

Карма 6




объясняю на словах:
1.хранишь данные как в exbb - в сериализованном виде.
2.когда идет проверка данных для записи, пробегаешь циклом по массиву и смотришь, есть ли совпадения.

аналогичный механизм реализован в процессе регистрации юзера в форуме ExBB.

Если не знаешь как сделать, скажи - поможем.
 
 Top
Alone
Отправлено: 24 Апреля, 2007 - 16:33:17
Post Id



Super Member


Покинул форум
Сообщений всего: 2393
Дата рег-ции: Дек. 2004  

Карма 8




Да блин, мне просто надо чтобы скрипт видел не одну строчку (последнюю) а все.

В ExBB - там по другому.
 
 Top
Ray Wen Администратор
Отправлено: 25 Апреля, 2007 - 01:41:01
Post Id



Собиратель шишек...


Покинул форум
Сообщений всего: 2602
Дата рег-ции: Янв. 2005  
Откуда: Волгоград

Карма 21




Alone
Ну а ты сам посмотри что ты делаешь...

CODE:
$i=count($lines)-1;

Равен последнему элементу в массиве, его-то ты и просматриваешь...

CODE:
for($i=0;$i<count($lines);$i++)
 
 Top
Alone
Отправлено: 25 Апреля, 2007 - 02:08:04
Post Id



Super Member


Покинул форум
Сообщений всего: 2393
Дата рег-ции: Дек. 2004  

Карма 8




Потому и просматриваю что по другому не работает.
 
 Top
Ray Wen Администратор
Отправлено: 25 Апреля, 2007 - 03:30:32
Post Id



Собиратель шишек...


Покинул форум
Сообщений всего: 2602
Дата рег-ции: Янв. 2005  
Откуда: Волгоград

Карма 21




Alone
Ну так циклом просматривай... Улыбка Не работать может только если что-то не так делаешь... в этом можешь быть на 100% уверен...
 
 Top
Alone
Отправлено: 25 Апреля, 2007 - 04:08:27
Post Id



Super Member


Покинул форум
Сообщений всего: 2393
Дата рег-ции: Дек. 2004  

Карма 8




Ну вот я дел так:
CODE:
$lines=file("file.dat");

for($i=0;$i<count($lines);$i++)
{
$dtf=explode("|",$lines[$i]);
$txtback="$dtf[0]|$dtf[1]|";

$dtb=explode("|",$text);
$txtflud="$dtb[0]|$dtb[1]|";

if ($txtflud==$txtback)
echo "Кончай флудить!!!";
}

Вот этого не происходит:
CODE:
if ($txtflud==$txtback)
echo "Кончай флудить!!!";


Т.е. не понятно где он вообще смотрит...

(Отредактировано автором: 25 Апреля, 2007 - 04:10:19)

 
 Top
awep
Отправлено: 25 Апреля, 2007 - 13:13:03
Post Id



Наш человек


Покинул форум
Сообщений всего: 304
Дата рег-ции: Дек. 2005  
Откуда: Казань

Карма 6




просто для самоудовлетворения написал аналог твоего скриптика:
CODE:
$text='бла-бла-бла|Николай|nik@mail.ru|20:12:34|35435435|';#это то, что поступает для записи в файл
#Заменяй строчкой из твоего скрипта

$lines=file('text.dat');#меняй имя файла на какой тебе нада
$lines_cnt=count($lines);

$texts=explode('|',$text,6);
$bad_text=$texts[0].'|'.$texts[1];
for($i=0; $i<($lines_cnt-1); $i++){
$dtf=explode('|',$lines[$i],6);
$i_have=$dtf[0].'|'.$dtf[1];
if($i_have==$bad_text){
die('dont floood!');
break;
}
}
echo 'если видишь эту надпись, значит не флудят';
этот скрипт работает. проверил.
У тебя может что-то не работать из-за проверки данных. То есть, возможно, в файле у тебя записаны проверенные и отформатированные данные, а ты их пытаешься сравнить с "сырыми"
 
 Top
Alone
Отправлено: 25 Апреля, 2007 - 14:04:21
Post Id



Super Member


Покинул форум
Сообщений всего: 2393
Дата рег-ции: Дек. 2004  

Карма 8




awep

Уф... всё сенкс, заработало, а то голова уже чуть не сломалась Улыбка

awep пишет:
У тебя может что-то не работать из-за проверки данных.


Да, не... всё проверял нормально.

Вот при этом решении стало работать:
CODE:
for($i=0; $i<($lines_cnt-1); $i++)
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 2 (гостей: 2, зарегистрированных: 0, скрытых: 0)
« PHP/Perl »


Все гости форума могут просматривать этот раздел.
Только администраторы и модераторы могут создавать новые темы в этом разделе.
Только администраторы и модераторы могут отвечать на сообщения в этом разделе.
 



Форум на AlfaSpace.NET


Powered by ExBB
ExBB FM 1.0 RC1 by TvoyWeb.ru
InvisionExBB Style converted by Markus®

[Script Execution time: 0.0475]     [ Gzipped ]



Notice: ob_end_flush(): failed to send buffer of ob_gzhandler (1) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/page_tail.php on line 33