Webmaster общности: Predpriemach.com | SearchEngines.bg

    Търсачка от файл, MySQL или от стрингове

    Автор: HunteR

    Така тъй като няма какво да правя реших да си поиграя и да си направя една търсачка, която може да търси в зададени от вас стрингове или пък от файлове или MySQL, зависи как си я пригодите.

    Опитал съм се да обясня всичко по кода, като след него съм дал и пример как може да стане извеждането на резултати от файл.

    Ето я търсачката:

    <?php
    // CONFIG //
    $min_simb = 3; // колко символа минимум трябва да въведе потребителя
    $max_simb = 50; // колко символа максимум може да въведе потребителя
    $and_or = true; // ако оставите "true" ще връща резултати само ако съществуват всички въведени думи от потребителя, ако напишете "false" тогава ще връща резулати, в които участва поне една от думите.
    $h_g = true; // ако оставите "true" ще различава малки и големи букви, ако напишете "false" няма да прави разлика между малки и големи букви
    
    
    // Това са текстовете в, които ще се търси. Може да ги заместите с каквото пожелаете. Може да ги изкарате от файл примерно :)
    $str = array();
    $str[] = "Тук текст 1 :)";
    $str[] = "Тук текст 2 :)";
    $str[] = "Тук текст 3 :)";
    
    
    // Формата за търсене
    echo "<form action=\"\" method=\"post\">";
    echo "Търси: <input type=\"text\" name=\"searches\" size=\"50\" maxlength=\"$max_simb\"> <input type=\"submit\" name=\"submit\" value=\"Търси\">";
    echo "</form>";
    
    if (isset($_POST['submit']) && !empty($_POST['searches'])) { // ако е натиснат бутона и е въведено нещо в формата продължаваме
    if (strlen($_POST['searches']) >= $min_simb && strlen($_POST['searches']) <= $max_simb) { // ако сме спазили минимални и максималния брой символи за търсене продължаваме
    $search = array(); // създаваме празен масив
    
    $razd = explode(" ",$_POST['searches']); // разделяме въведеното от потребителя на думи
    foreach ($razd as $s) {
    $search[] = $s; // вкарваме думите в по-горе създадения масив
    }
    
    for ($i=0;$i<count($str);$i++) { // започваме цикъл със всички текстове
    if ($and_or) { $searched = 1; } else { $searched = 0; } // създаваме променлива, която ще играе важна роля по-долу при определяне на резултатите
    foreach($search as $value) {
    if ($h_g) { str_replace($value,'',$str[$i],$count); } else { str_ireplace($value,'',$str[$i],$count); } // тук определяме дали да различава малките и големи букви или не
    
    if ($and_or) { // ако сме избрали да връща резултати само ако съществуват всички въвдени думи
    if ($count == 0) {
    $searched = 0;
    break;
    }
    } else {
    if ($count >= 1) { // ако сме избрали да връща резултати дори и да съвпада една от въведените думи
    $searched = 1;
    break;
    }
    }
    }
    if ($searched == 1) {
    $result[] = $i; // записваме в нов масив върнатите резултати
    }
    }
    
    
    // тука вече изкарваме резултатите на екрана :)
    if (count($result) >= 1) {
    if (count($result) == 1) { $res = "резултат"; } else { $res = "резултати"; }
    echo "Търсенето Ви върна <b>".count($result)."</b> $res!<br /><br />";
    $n=1;
    foreach($result as $key) {
    echo $n.". <b>".$str[$key]."</b><br />";
    $n++;
    }
    } else {
    echo "Търсенето Ви НЕ върна резултати!";
    }
    } else { echo "Трябва да въведете от <b>$min_simb</b> до <b>$max_simb</b> символа!"; }
    }
    ?>

    Така кода по-горе ще търси от следните стрингове:

    $str[] = "Тук текст 1 :)";
    $str[] = "Тук текст 2 :)";
    $str[] = "Тук текст 3 :)";

    Вие може да ги променяте, може и да добавяте нови. Всичко си зависи от вас.

    Сега ще ви покажа как може да направите да търси от файл 🙂

    Тези стрингове:

    $str[] = "Тук текст 1 :)";
    $str[] = "Тук текст 2 :)";
    $str[] = "Тук текст 3 :)";

    ги заместете с това:

    $filee = "file.txt"; // тук въвеждате файла от, който ще чете.
    $razdelqne = "\n"; // тук пишете с какво да разделя резултатите от файла. По default съм го направил нов ред "\n"
    
    $file = file_get_contents($filee);
    $razdel = explode($razdelqne,$file);
    foreach ($razdel as $info) {
    $str[] = $info; // тук записваме информацията в масив
    }

    С това приключи урока ми. Надявам се нещо да сте разбрали и да Ви е бил полезен.
    Сигурно може да се направи по-лесно и рационално, но това ми дойде на ум 🙂
    Успех 😛

    Урокът е авторски и забранявам преписването му в други сайтове без мое съгласие!