Вопрос по работе с текстовой базой

Сергей

Новичок
Вопрос по работе с текстовой базой

Здравствуйте.

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

Вася|Иванов|спортсмен
Саша|Петров|ботаник
Сеня|Сидоров|бандит
...

Что требуется: чтобы юзер заполнил форму, например, написав там: "Вася" и нажал кнопку "сабмит". После этого скрипт парсит файл с базой, и если находит там "Вася", выдает на экран: Вася Иванов - спортсмен. А если не находит, пишет - такого человека в природе нету... А, и еще желательно, чтоб по разным полям искать - т.е. чтоб Вася Иванов - спортсмен выдавался по любому из трех запросов - "Вася", "Иванов", "Спортсмен".

Много чего просмотрел в сети, но не осилил - как работать так с массивами... Помогите, пожалйста!
 

Фанат

oncle terrible
Команда форума
с массивами работать очень просто.
есть такой оператор - [m]foreach[/m], который возвращает тебе каждый элемент массива по очереди.
а дальше ты уже можешь в нём искать в этом элементе.
раз тебе надо искать целиком в строке, то и ищешь целиком.
с помощью функции [m]strstr[/m], например.
если нашёл - выводишь
 

Сергей

Новичок
блин. я че-то ваще не пойму ниче :( Как вообще ему скормить массив из текстового файла??

особенно про функцию strstr : как ее в случае, когда база в файле находится, прописать?? и еще: она же будет выдавать не полносью строку??
 

Фанат

oncle terrible
Команда форума
Как вообще ему скормить массив из текстового файла??
[m]file[/m]
особенно про функцию strstr : как ее в случае, когда база в файле находится, прописать??
внутри цикла
и еще: она же будет выдавать не полносью строку??
так и не надо выдавать то, что она возвращает. выдавай на экран саму найденную строку.
 

Сергей

Новичок
спасибо, буду пробовать... хотя пока все равно каша в голове :)

-~{}~ 02.04.06 09:51:

Вот я родил такую хрень:
PHP:
    <?
 echo "<form action=\"\" method=\"post\">";
 echo "<input type=\"text/html\" name=\"search\">\n";
 echo "<input type=\"submit\" value=\"Искать\">";
 echo "</form>";

       $names = file('db.dat');

foreach ($names as $val) {
       $result = strstr($val, $search);

if ($result == "") {
}
else {
echo ($val); 
}

}
    ?>
В общем-то, оно пашет. Т.е., если мы вводим в форму, например "Вася", он выдает нам Вася|Иванов|Ботаник.
Если не находит, то ниче не выдает. Но как бы сделать так, чтобы он выдавал не Вася|Иванов|Ботаник, а, например, подставлял бы в нужные поля таблицы эти хначения: Вася, Иванов, Ботаник??

И еще: как в PHP пишется знак неравенства?? :)

Пардон за ламерские вопросы, но, если можно, разъясните подробнее...
 

Фанат

oncle terrible
Команда форума
Сергей
Только форму надо делать методом GET, а не POST

neonet
писать надо не "explode()", а [m]explode[/m]
 

Сергей

Новичок
В общем, путем долгих мучений я родил такой шедевр:

PHP:
    <?
 echo "<form action=\"\" method=\"get\">";
  echo "<input type=\"text/html\" name=\"search\">\n";
 echo "<input type=\"submit\" value=\"GO!!!\">";
 echo "</form>";


       $url = file('db.dat');



foreach ($url as $val) {
       $www = strstr($val, $search);

if ($www != "") {
                 
$val = explode("|", $www);
echo $val[0]; 
echo "<br>";
echo $val[1];
echo "<br>";
echo $val[2];

}
  }
  ?>
Два вопроса:

1. Не слишком ли я наворотил, не будет ли скрипт тормозить при более или менее значительных объемах данных?

2. Как мне сделать, чтобы при отсутствии записи в базе, он выдавал соответствующее чего-нибудь. Пробовал, но не пойму, в какой цикл это запихнуть, и как прописать, чтоб он НЕ выдавал сообщение об отстутвии данных при первоначальной загрузке скрипта, когда $search = 0???

-~{}~ 02.04.06 21:45:

И вот еще:

3. Как обойти проблему строчных/заглавных букв?? Куда чего написать?
 

Фанат

oncle terrible
Команда форума
1. в принципе, можно сделать и чуть побыстрее.
если объём действительно будет за несколько мегабайт, то вместо file надо использовать [m]fgets[/m] в цикле.
если же ещё больше, то рекомендую использовать БД
2. очень просто. если нашёл, то присвой значение некой переменной. по окончании цикла эту переменную проверяй.

не пойму, в какой цикл это запихнуть, и как прописать, чтоб он НЕ выдавал сообщение об отстутвии данных при первоначальной загрузке скрипта, когда $search = 0???
прикольно.
А у тебя он при первой же загрузке всю базу шерстит? может, не стоит? Не ради сообщения, а вообще - для экономии процессорного времени?
при первоначальной загрузке скрипта, когда $search = 0???
ну попробуй уже сам придумать такое условие. пора бы уже.

3. вот это уже сложнее. [m]setlocale[/m], [m]stristr[/m] или опять база.
 

Сергей

Новичок
3. вот это уже сложнее. setlocale, stristr или опять база.
а я вот просто вместо strstr использовал stristr... вроде пашет.

-~{}~ 03.04.06 18:53:

В общем, я сделал такую штуку в результате:

PHP:
    <?
 echo "<form action=\"\" method=\"get\">";
  echo "<input type=\"text/html\" name=\"search\">\n";
 echo "<input type=\"submit\" value=\"GO!!!\">";
 echo "</form>";

if ($search != "") {

$url = file('db.dat');
$norez = "Не найдено!";


foreach ($url as $val) {
	$result = stristr($val, $search);

   if ($result != "") {

	$norez = "";                
	$result = explode("|", $val);
	echo $result[0]; 
	echo "<br>";
	echo $result[1];
	echo "<br>";
	echo $result[2];

       }

    }
   if ($norez != "") {
	echo $norez;
	}
}
  ?>

Вопросов два:

1. Тот костыль, который я приделал, чтоб он не шерстил базу при первой загрузке, как его можно сделать изящнее?

2. Вообще, нормальный ли это скрипт, хватит ли его для работы с базой, например, в 200 кБ, без видимых тормозов??
 

Фанат

oncle terrible
Команда форума
какая-то у тебя странная мания экономить переменные.
$val у тебя использвется повторно, $norez - одновременно и флаг и сообщение.
когда-нибудь ты очень здорово налетишь с таким подходом.
когда большой скрипт вдруг перестанет работать и ты не будешь вообще понимать - почему.

с базой в 200 кб работать будет.
 

Сергей

Новичок
да, я уже чуть-чуть налетел :)

я щас еще прикрутил одну приблуду.... как закончу, покажу результат, для чего я сие делал

спасибо за помощь!
 
Сверху