Нужна малюсенькая помощь по готовому скрипту

Discussion in 'PHP' started by newold, 24 Jan 2010.

  1. newold

    newold New Member

    Joined:
    28 Apr 2009
    Messages:
    21
    Likes Received:
    0
    Reputations:
    0
    Есть такой скрипт поиска и вывода кеев из файла .txt

    PHP:
    <form action="index.php" method="GET">
    <input name="key" type="text" size="60"></input>
    <input type="submit" value="OK"></input>
    </form>
    <?php
    if ((isset($_GET["key"]))&&(!empty($_GET["key"]))){
    $key $_GET["key"];
    $key_length strlen($key);
    @
    $file fopen("keys.txt""r");
    if (
    $file){
    flock($fileLOCK_SH);
    flock($fileLOCK_UN);
    $i 0;
    while (!
    feof($file)){
    $arr[$i] = fgets($file200);
    $i++;
    }
    fclose($file);
    $i 0;
    for (
    $i=0$i<count($arr); $i++){
    $l 0;
    for (
    $l=0$l<strlen($arr[$i])-$key_length$l++){
    if (
    $key == substr($arr[$i],$l,$key_length)){
    echo 
    $arr[$i] . "<br>";
    }
    }
    }
    }
    else{
    echo 
    "Not Found";
    }
    }
    ?>
    но есть несколько вопросов :

    1. как сделать чтоб когда вводишь например : красный карандаш он искал не только точно заданую фразу но и с перестановками, например карандаш красный, карандаш он красный.

    2. и как сделать чтоб он выводил уже перемешаными искомые кеи.

    Огромное спасибо Всем кто откликнется :) .
     
  2. Alv

    Alv Elder - Старейшина

    Joined:
    30 Jan 2007
    Messages:
    0
    Likes Received:
    20
    Reputations:
    2
    1.Разбей на 2 слова фразу. Можно игнорировать символы.
    if ($key1+$key2 == substr($arr[$i],$l,$key_length) || $key2+$key1 == substr($arr[$i],$l,$key_length))
    Как-то так. Вообще php я не очень знаю, было бы на ASP.net ))
     
  3. newold

    newold New Member

    Joined:
    28 Apr 2009
    Messages:
    21
    Likes Received:
    0
    Reputations:
    0
    Вы конечно извените а куда это вставить ? (краснеющий смайлик)
     
  4. Solker

    Solker Elder - Старейшина

    Joined:
    4 May 2006
    Messages:
    175
    Likes Received:
    53
    Reputations:
    18
    не поленился бы, код отформатировал. Абсолютно не читаемый.

    if ((isset($_GET["key"]))&&(!empty($_GET["key"]))){

    $i = 0;
    for ($i=0;...

    :D
     
    #4 Solker, 24 Jan 2010
    Last edited: 24 Jan 2010
  5. newold

    newold New Member

    Joined:
    28 Apr 2009
    Messages:
    21
    Likes Received:
    0
    Reputations:
    0
    этот код мне посоветовали на этом сайте :), а почему не читаемый ?
     
  6. WNZRS

    WNZRS Member

    Joined:
    3 Sep 2009
    Messages:
    294
    Likes Received:
    52
    Reputations:
    1
    PHP:
    <?php
    if ((isset($_GET["key"]))&&(!empty($_GET["key"]))){
    $key $_GET["key"];
    $key_length strlen($key);
    $keys explode(' '$key);
    @
    $file fopen("keys.txt""r");
    if (
    $file){
    flock($fileLOCK_SH);
    flock($fileLOCK_UN);
    $i 0;
    while (!
    feof($file)){
    $arr[$i] = fgets($file200);
    $i++;
    }
    fclose($file);
    $i 0;
    for (
    $i=0$i<count($arr); $i++){
    $ok 1;
    for(
    $j=0$J<sizeof($keys); $j++)
    if (
    strpos($arr[$i], $keys[$j]) === FALSEok 0;
    if(
    ok == 1)
    echo 
    $arr[$i] . "<br>";
    }
    }
    else{
    echo 
    "Not Found";
    }
    }
    ?> 
    если я ничего не напутал, то он ищет каждое слово и если все слова есть в строке, строка выводится
     
  7. newold

    newold New Member

    Joined:
    28 Apr 2009
    Messages:
    21
    Likes Received:
    0
    Reputations:
    0
    WNZRS

    выдает ошибку в этой строке if (strpos($arr[$i], $keys[$j]) === FALSE) ok = 0;

    Parse error: syntax error, unexpected '='

    не мог бы посмотреть в чем проблема ? буду очень признателен :)
     
  8. Solker

    Solker Elder - Старейшина

    Joined:
    4 May 2006
    Messages:
    175
    Likes Received:
    53
    Reputations:
    18
    Он забыл знак доллара перед переменной ok

    Это полнейший быдлокод. Я нифига не понял, что делает твой скрипт. Опиши подробно задачу скрипта.
    У тебя есть файл кеев, в формате:
    кей1
    кей2
    кей3
    ..
    Ты вводишь кей в формочку и нажимаешь ок.
    Он должен просто вывести ответ, нашел ли он такую запись в файле?
     
    #8 Solker, 24 Jan 2010
    Last edited: 24 Jan 2010
  9. newold

    newold New Member

    Joined:
    28 Apr 2009
    Messages:
    21
    Likes Received:
    0
    Reputations:
    0
    Спасибо огромное :)

    но теперь Fatal error: Maximum execution time of 30 seconds exceeded

    но файл с кеями не большей
     
  10. newold

    newold New Member

    Joined:
    28 Apr 2009
    Messages:
    21
    Likes Received:
    0
    Reputations:
    0
    Solker

    у меня файл с разноплановыми кеями я ввожу искомый кей и мне нужно чтобы он вывел все строки где встречаются слово или слова которые я ввел :)
     
  11. newold

    newold New Member

    Joined:
    28 Apr 2009
    Messages:
    21
    Likes Received:
    0
    Reputations:
    0
    Solker

    он работает все выводит но выводит только конкретые кеи если я введу "кей1 красный" то он выдает мне все кеи где встречается только "кей1 красный" а мне нужно чтоб он выдавал еще все строки где встречабтся вводимые кеи
     
  12. Solker

    Solker Elder - Старейшина

    Joined:
    4 May 2006
    Messages:
    175
    Likes Received:
    53
    Reputations:
    18
    Эм.

    PHP:
    <form method="GET">
    <input name="key" type="text" size="60"></input>
    <input type="submit" value="OK"></input>
    </form>
    <?php
    if ($_GET["key"]){
        
    $key trim($_GET["key"]);
        
    $file file("family.txt");
        foreach(
    $file as $line) {
            if(
    stristr($line,$key))
            {
                
    $line str_ireplace($key,'<font color="red">'.$key.'</font>',$line);
                echo 
    $line.'<br/>'.chr(10);
            }
        }
    }
    ?>
    Но в строке Superlogin
    По поиску perl
    Он найдет эту строчку.
    Это надо?

    Или я не понял.
     
    #12 Solker, 24 Jan 2010
    Last edited: 24 Jan 2010
  13. newold

    newold New Member

    Joined:
    28 Apr 2009
    Messages:
    21
    Likes Received:
    0
    Reputations:
    0
    Solker

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

    карта памяти
    красная карта памяти
    черная карта памяти
    карта не памяти
    памяти карта
    процессор
    индия
    куртка

    я в форму ввожу : карта памяти

    он выдаст :

    карта памяти
    красная карта памяти
    черная карта памяти

    а нужно чтоб выдал :

    карта памяти
    красная карта памяти
    черная карта памяти
    карта не памяти
    памяти карта

    вродебы понятно написал :)

    а тебе спасибо большее !!!
     
  14. newold

    newold New Member

    Joined:
    28 Apr 2009
    Messages:
    21
    Likes Received:
    0
    Reputations:
    0
    тоесть исходя из прошлого примера моего скрипт мне не выдает

    карта не памяти
    памяти карта

    потому что слова эти есть но они стоят не в той последовательности в которй я ввел в форму
     
  15. WNZRS

    WNZRS Member

    Joined:
    3 Sep 2009
    Messages:
    294
    Likes Received:
    52
    Reputations:
    1
    PHP:
    <?php
    if ((isset($_GET["key"]))&&(!empty($_GET["key"])))
    {
        
    $key $_GET["key"];
        
    $fkeys file('keys.txt');
        
    $keys explode(' '$key);
        
        
    $found '';
        for(
    $i=0$i<sizeof($fkeys); $i++)
        {
            
    $ok 1;
            for(
    $j=0$j<sizeof($keys); $j++)
            {
                if(
    stripos($fkeys[$i], $keys[$j]) === false)
                    
    $ok 0;
            }
            if(
    $ok == 1)
            {
                
    $found .= $fkeys[$i].'<br>';
            }
        }
        
        if(
    strlen($found) > 1)
        {
            echo 
    $found;
        }
        else
            echo 
    'Not found';
    }
    ?> 
     
  16. newold

    newold New Member

    Joined:
    28 Apr 2009
    Messages:
    21
    Likes Received:
    0
    Reputations:
    0
    СПАСИБООООООО !!!!!!!!!!!
     
  17. deedoc

    deedoc New Member

    Joined:
    12 Dec 2007
    Messages:
    4
    Likes Received:
    0
    Reputations:
    0
    а еще я бы покопал в сторону регулярных выражений. очень интересная штука, которая позволяет красиво решать всякие такие задачи.