Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> wyświetlanie i przeszukiwanie tablicy z pliku, optymalizacja rozwiązania
biehu
post 28.08.2005, 20:10:36
Post #1





Grupa: Zarejestrowani
Postów: 37
Pomógł: 0
Dołączył: 20.08.2005

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
TomASS
post 28.08.2005, 21:14:46
Post #2





Grupa: Zarejestrowani
Postów: 1 660
Pomógł: 13
Dołączył: 9.06.2004
Skąd: Wrocław i okolice

Ostrzeżenie: (0%)
-----


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


--------------------
Go to the top of the page
+Quote Post
biehu
post 28.08.2005, 22:21:02
Post #3





Grupa: Zarejestrowani
Postów: 37
Pomógł: 0
Dołączył: 20.08.2005

Ostrzeżenie: (0%)
-----


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 ?
Go to the top of the page
+Quote Post
Marusz
post 28.08.2005, 23:36:30
Post #4





Grupa: Zarejestrowani
Postów: 191
Pomógł: 0
Dołączył: 16.05.2003
Skąd: POLAND

Ostrzeżenie: (0%)
-----


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.


--------------------
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 7.07.2025 - 00:02