Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: wyświetlanie i przeszukiwanie tablicy z pliku
Forum PHP.pl > Forum > PHP
biehu
Mam taka baze linkow zapisana w pliku tekstowym w postaci
{keyword11} {keyword12} {keyword13} {keyword14} {http://link1.com} {opis1}
:
{keywordx1} {keywordx2} {keywordx3} {keywordx4} {http://linkx.com} {opisx}

Niektore pola keywordow czasami sa puste (ale nawiasy sa zawsze) lub w rzeczywistosci zawieraja dwa lub trzy wyrazy.
Dlaczego taka baza to nie moja sprawa, taka jest i taka ma pozostac.

Chce stworzyc do bazy 'wyswietlarke' i wyszukiwarke po tych keywordach.

Stworzylem przykladowy plik z baza links.txt

i taki kod php:
  1. <?php
  2.  
  3. function wyswietl_wynik($tablica) {
  4.  
  5. echo("<br /><b>Wynik:</b>");
  6.  
  7. if (count($tablica)=="0") {
  8.  
  9.   echo("<br /><br />Brak wynikow.<br /><br />");
  10.  
  11. } else {
  12.  
  13.   echo("<ol>");
  14.   for ($x=0; $x<count($tablica); $x++) {
  15.    echo("
  16.     <li>".$tablica[$x][0]." ".$tablica[$x][1]." ".$tablica[$x][2]." ".$tablica[$x][3]."<br />
  17.     <a href="".$tablica[$x][4]."">".$tablica[$x][4]."</a><br />
  18.     ".$tablica[$x][5]."<br />
  19.    ");
  20.  
  21.  
  22.  
  23.    echo("<br>");
  24.   }
  25.   echo("</ol>");
  26.  
  27. }
  28. }
  29.  
  30.  
  31. if (file_exists('links.txt') && is_readable('links.txt')) {
  32.  
  33. $plik = file('links.txt');
  34.  
  35. echo("<a href="links.txt">links.txt</a>");
  36.  
  37. echo("<br /><br /><hr width="100%" size="1" color="black" /><br />");
  38.  
  39. // wyswietlarka
  40.  
  41. if ((!isset($_POST['krok1'])) || (($_POST['key1'] == "0") && ($_POST['key2'] == "0") && ($_POST['key3'] == "0") && ($_POST['key4'] == "0"))) {
  42.  
  43.   echo("
  44.    Wybierz conajmniej jedno pole formularza. <br /><br />
  45.    <form action="index.php" method="post">
  46.    <input type="hidden" name="krok1" value="1">
  47.    <select name="key1"><option value="0">...</option><option value="Keyword_A_1">Keyword_A_1</option><option value="Keyword_A_2">Keyword_A_2</option><option value="Keyword_A_3">Keyword_A_3</option><option value="Keyword_A_4">Keyword_A_4</option></select>&nbsp;&nbsp;&nbsp;
  48.    <select name="key2"><option value="0">...</option><option value="Keyword_B_1">Keyword_B_1</option><option value="Keyword_B_2">Keyword_B_2</option><option value="Keyword_B_3">Keyword_B_3</option><option value="Keyword_B_4">Keyword_B_4</option></select>&nbsp;&nbsp;&nbsp;
  49.    <select name="key3"><option value="0">...</option><option value="Keyword_C_1">Keyword_C_1</option><option value="Keyword_C_2">Keyword_C_2</option><option value="Keyword_C_3">Keyword_C_3</option><option value="Keyword_C_4">Keyword_C_4</option></select>&nbsp;&nbsp;&nbsp;
  50.    <select name="key4"><option value="0">...</option><option value="Keyword_D_1">Keyword_D_1</option><option value="Keyword_D_2">Keyword_D_2</option><option value="Keyword_D_3">Keyword_D_3</option><option value="Keyword_D_4">Keyword_D_4</option></select>&nbsp;&nbsp;&nbsp;
  51.    <input type="submit" value="OK">
  52.    </form>
  53.   ");
  54.  
  55. } elseif($_POST['krok1']=="1") {
  56.  
  57.   $j=0;
  58.   for ($i=0; $i<count($plik); $i++) {
  59.  
  60.    $line = trim($plik[$i]);
  61.    $line = ltrim($line, '{');
  62.    $line = rtrim($line, '}');
  63.    $line_tab = split("} {", $line, 6);
  64.  
  65.    if (($line_tab[0] == $_POST['key1']) || ($_POST['key1'] == "0") || ($line_tab[0] == "")) { 
  66.     $res_tab3[$j][0] = $line_tab[0]; $res_tab3[$j][1] = $line_tab[1]; $res_tab3[$j][2] = $line_tab[2]; $res_tab3[$j][3] = $line_tab[3]; $res_tab3[$j][4] = $line_tab[4]; $res_tab3[$j][5] = $line_tab[5];
  67.     $j++;
  68.    }
  69.  
  70.   }
  71.  
  72.   $j=0;
  73.   for ($i=0; $i<count($res_tab3); $i++) {
  74.  
  75.    if (($res_tab3[$i][1] == $_POST['key2']) || ($_POST['key2'] == "0") || ($res_tab3[$i][1] == "")) { 
  76.     $res_tab2[$j][0] = $res_tab3[$i][0]; $res_tab2[$j][1] = $res_tab3[$i][1]; $res_tab2[$j][2] = $res_tab3[$i][2]; $res_tab2[$j][3] = $res_tab3[$i][3]; $res_tab2[$j][4] = $res_tab3[$i][4]; $res_tab2[$j][5] = $res_tab3[$i][5];
  77.     $j++;
  78.    }
  79.  
  80.   }
  81.  
  82.   $j=0;
  83.   for ($i=0; $i<count($res_tab2); $i++) {
  84.  
  85.    if (($res_tab2[$i][2] == $_POST['key3']) || ($_POST['key3'] == "0") || ($res_tab2[$i][2] == "")) { 
  86.     $res_tab1[$j][0] = $res_tab2[$i][0]; $res_tab1[$j][1] = $res_tab2[$i][1]; $res_tab1[$j][2] = $res_tab2[$i][2]; $res_tab1[$j][3] = $res_tab2[$i][3]; $res_tab1[$j][4] = $res_tab2[$i][4]; $res_tab1[$j][5] = $res_tab2[$i][5];
  87.     $j++;
  88.    }
  89.  
  90.   }
  91.  
  92.   $j=0;
  93.   for ($i=0; $i<count($res_tab1); $i++) {
  94.  
  95.    if (($res_tab1[$i][3] == $_POST['key4']) || ($_POST['key4'] == "0") || ($res_tab1[$i][3] == "")) { 
  96.     $res_tab[$j][0] = $res_tab1[$i][0]; $res_tab[$j][1] = $res_tab1[$i][1]; $res_tab[$j][2] = $res_tab1[$i][2]; $res_tab[$j][3] = $res_tab1[$i][3]; $res_tab[$j][4] = $res_tab1[$i][4]; $res_tab[$j][5] = $res_tab1[$i][5];
  97.     $j++;
  98.    }
  99.  
  100.   }
  101.  
  102.   echo("<b>Wyswietl wszystkie rekordy zawierajace slowo:</b><br />");
  103.   if ($_POST['key1'] != "0") echo("- ".$_POST['key1']."<br />");
  104.   if ($_POST['key2'] != "0") echo("- ".$_POST['key2']."<br />");
  105.   if ($_POST['key3'] != "0") echo("- ".$_POST['key3']."<br />");
  106.   if ($_POST['key4'] != "0") echo("- ".$_POST['key4']."<br />");
  107.  
  108.   wyswietl_wynik($res_tab);
  109.  
  110. }
  111.  
  112. echo("<br /><hr width="100%" size="1" color="black" /><br />");
  113.  
  114. // wyszukiwarka
  115.  
  116. if ((!isset($_POST['krok2'])) || ($_POST['search'] == "")) {
  117.  
  118.   echo("
  119.    Wpisz cos. <br /><br />
  120.    <form action="index.php" method="post">
  121.    <input type="hidden" name="krok2" value="1">
  122.    <input type="text" name="search">&nbsp;&nbsp;&nbsp;
  123.    <input type="submit" value="Search">
  124.    </form>
  125.   ");
  126.  
  127. } elseif($_POST['krok2']=="1") {
  128.  
  129.   $szukane = ereg_replace("[*.$/]", "", $_POST['search']);
  130.   $szukane = strip_tags($szukane);
  131.   $szukane_slowa = split(" ", $szukane);
  132.   unset($szukane);
  133.  
  134.   echo("<b>Szukana fraza: </b>");
  135.   for($i=0; $i<count($szukane_slowa); $i++) echo($szukane_slowa[$i]." ");
  136.   echo("<br />");
  137.  
  138.   $k=0;
  139.   for ($i=0; $i<count($plik); $i++) {
  140.  
  141.    $line = trim($plik[$i]);
  142.    $line = ltrim($line, '{');
  143.    $line = rtrim($line, '}');
  144.    $line_tab = split("} {", $line, 6);
  145.  
  146.    for($j=0; $j<count($szukane_slowa); $j++) {
  147.     if ($szukane_slowa[$j] != "") {
  148.      if ((eregi($szukane_slowa[$j], $line_tab[0])) || (eregi($szukane_slowa[$j], $line_tab[1])) || (eregi($szukane_slowa[$j], $line_tab[2])) || (eregi($szukane_slowa[$j], $line_tab[3]))) {
  149.       $bingo[$k][0] = $line_tab[0]; $bingo[$k][1] = $line_tab[1]; $bingo[$k][2] = $line_tab[2]; $bingo[$k][3] = $line_tab[3]; $bingo[$k][4] = $line_tab[4]; $bingo[$k][5] = $line_tab[5];
  150.       $k++;
  151.       unset($line_tab);
  152.      }
  153.     }
  154.    }
  155.   }
  156.  
  157.   wyswietl_wynik($bingo);
  158.  
  159. }
  160.  
  161. } else {
  162.  
  163. echo("Plik z baza nie istnieje.");
  164.  
  165. }
  166.  
  167.  
  168. ?>


---
nospor



Ktory dziala tak.

Jako, ze docelowy plik z baza ma zawierac okolo 500-600 rekordow, chcialbym poznac jakies uwagi dotyczace optymalnosci kodu i ogolnie czy dobrze rozwiazalem problem.

Pozatym czy pole search nie powinno byc jakos lepiej zabezpieczone.


Z gory dzieki za pomoc
TomASS
Bardzo mi przykro, ale podejżewam, że nikt tutaj nie będzie robił audytu Twojego kodu. Taka "usługa" ma być podobno dopiero wprowadzana. Bardzo trudno poprawia się czyjś kod (który na moje oko jest ok). Istnieje takie powiedzenie w śród informatyków "abyś cudzy kod poprawiał" :] Pliki zawierające 500-600 rekordów to naprawde nie powód aby zawracać sobie jakoś specjalnie głowę optymalizacją (aczkolwiek troszkę optymalizacji nigdy nikomu nie zaszkodziło).

Co się tyczy pola select, to możesz sprecyzować o co chodzi z "zabezpieczeniem pola select"?

Pozdrawiam
biehu
Jest niedziela takze pomyslalem, ze moze komus z nudow bedzie sie chcialo na to rzucic okiem biggrin.gif

Chodzi mi o pole wyszukiwarki, zeby je zabezpieczyc przed wprowadzaniem jakichs nie chcianych znakow/znacznikow. Aktualnie usuwam z niego kilka wybranych znakow i wywalam znaczniki html'owe.
Kod
$szukane = ereg_replace("[\*\.\$/]", "", $_POST['search']);
$szukane = strip_tags($szukane);

Moze jeszcze jakies zabezpieczenia sa wskazane ?
Marusz
Cytat
Moze jeszcze jakies zabezpieczenia sa wskazane ?

daj cos ala:
  1. <?php
  2. $szukane = mysql_escape_string ( strip_tags ( str_replace ( "%", "", $szukane ) ) );
  3. ?>

Powinno wystarczyc.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.