Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wyszukiwarka
Forum PHP.pl > Forum > PHP
adeq_PL
Witam.
Mam nastepujacy kod wyszukiwarki, ktora ma za zadanie wyszukanie odpowiadniej pozycji z bazy danych wg zadanego slowa.

  1. <?php
  2.  
  3.  echo "<table align='right' width='700' cellpadding='0' cellspacing='0'><tr><td align='center'>
  4.  
  5.    <br><form action='' method='post'>
  6.  
  7.    <table width='400' cellpadding='0' cellspacing='0'>
  8.      <tr height='30' class='tabela'><td align=left valign='middle'>
  9.  
  10.          <font class=edytuj><b><i>&nbsp;&nbsp;. : Wyszukiwarka Panelu Administracyjnego:</i></b></font>
  11.  
  12.      </td></tr><tr><td>
  13.       
  14.        <table width='400' cellpadding='0' cellspacing='0'>
  15.         <tr height='40' class='tabela2'><td valign='middle'>
  16.         
  17.           <font class='edytuj'>Wpisz szukane słowo:</font>
  18.           <input type='text' name='words' value='$words'>
  19.           <input type='hidden' name='good' value='yes'>
  20.       
  21.          </td><td>
  22.  
  23.              <table class=menu cellpadding='0' cellspacing='0'><tr><td>
  24.                <input class='edit' name='szukaj' type='submit' value='Szukaj'>
  25.              </td></tr></table>
  26.  
  27.          </td></tr></table>
  28.  
  29.    </td></tr></table>
  30.  
  31. </form>
  32.  
  33. </td></tr><tr><td>";
  34.  
  35. if($_POST['good']=='yes'){
  36.  if($_POST['words']==true){
  37.  
  38.    $db_table = "str_miej";
  39.    $db_table2= "podstr_miej"; 
  40.    $mysql_row = "Klucz";
  41.  
  42.  
  43.    $query[1] = "SELECT * FROM $db_table";
  44.    $query[2] = "SELECT * FROM $db_table2";
  45.  
  46. echo"<table cellpadding='0' cellspacing='0'><tr class='tabela2'><td><font class='edytuj'><i>Rezultat wyszukiwania dla: <b>$words</b></i></font></td></tr></table><br>";
  47.  
  48. for($ile=1;$ile<=2;$ile++){
  49.  
  50.    $result[$ile] = mysql_query($query[$ile]);
  51.    $numrows[$ile] = mysql_num_rows($result[$ile]); 
  52.  
  53.       
  54.    while($row[$ile] = mysql_fetch_array($result[$ile])){ 
  55.    
  56.    if(preg_match("/$words/i", $row[$ile][$mysql_row]))
  57.    {
  58.       
  59.       //$rawid = ($row[id_str_miej]);
  60.  
  61.       $nazwa[$ile] = ($row[$ile][Nazwa]); 
  62.       $adres[$ile] = ($row[$ile][Adres]); 
  63.       $miasto[$ile] = ($row[$ile][Miasto]);
  64.       $tel[$ile] = ($row[$ile][Tel]);
  65.       $www[$ile] = ($row[$ile][Www]);
  66.  
  67.       $slowo[$ile] = preg_replace("/$words/i", "<b><font color='red'> $words</font></b>", $row[$ile][$mysql_row]);
  68.  
  69.       $wyswietl[$ile] = "<font class='edytuj'><b>" .$nazwa[$ile] . "</b> <br>" . $adres[$ile] . ", " . $miasto[$ile]. " <br>" . $tel[$ile]. " <br>" . $www[$ile] . "</b><br></font><br><br>";
  70.  
  71.           echo $wyswietl[$ile];
  72.  
  73.       $znaleziono++; 
  74.    } 
  75.  
  76.    $wszystkie++;
  77.    
  78.    }  
  79. }
  80.  
  81. if(is_null($znaleziono)){$znaleziono=0;} 
  82.   echo "<table cellpadding='0' cellspacing='0'><tr class='tabela2'><td><font class='edytuj'><i>Znaleziono<b> $znaleziono</b> z po&para;ród<b> $wszystkie</b> pozycji w bazie.</i></font></td></tr></table>"; 
  83.  
  84. echo "</td></tr></table>";
  85.  
  86. } 
  87. else{
  88.  echo "<table cellpadding='0' cellspacing='0'><tr class='tabela2'><td><font class='edytuj'><i>Wpisz szukane słowo do wyszukiwarki.</i></font></td></tr></table>";
  89.  
  90. }
  91.  
  92. } 
  93.  
  94. ?>


I tak, kiedy wyszukiwarka dziala na localhoscie to wszystko dziala poprawnie, a jesli ja wrzuce na serwer, to mimo zadanego slowa ona i tak zawsze wyswietli wszystkie pozycje z bazy. Co tu moze byc nie tak?
Moze jakas literowka, ktorej nie wykrywa localhost, a serwer wykrywa??

Prosze o pomoc. Pozdrawiam adeq_PL


||
|| Dzieki nospor!!!
V
nospor
rozchodzi sie zapewne o register_globals, ktore masz wylączone na serwerze. POwoduje to to, ze nie mozna sie do zmiennych odwolywac poprzez $nazwazmiennaj, a nalezy poprzez $_POST['nazwazmiennej']. W warunku odowlujesz sie popprawnie $_POST['words'], ale poźniej juz lecisz bezposrednio $words.
Daj zaraz po warunku:
  1. <?php
  2.  
  3. if($_POST['words']==true){
  4. $words=$_POST['words'];
  5. //....
  6.  
  7. ?>
adeq_PL
oki teraz mam pytanie z innej beczki.

Mam 20 plikow php. Przyklad ponizej:

  1. <?php 
  2.  
  3. include('katalog/conf_adm.php');
  4. include('katalog/kalendarz.php');
  5.  
  6.  
  7. echo '
  8.  <table align=center class=main cellpadding="0" cellspacing="0"><tr><td bgcolor="#EEF8FF" align=left> 
  9.  <p class=normal><b>&nbsp;&nbsp;Witaj: '.$_POST['loginadm'].' - </b><i>godz:'; 
  10.  echo godzina();
  11.  echo ', dnia: ';
  12.  echo data(); 
  13.  echo ', imieniny: ';
  14.  echo imieniny(); 
  15.  echo '</i></p></td>
  16.  <td bgcolor="#EEF8FF" align=right><p class=normal><i>po zakończeniu pracy <a name="unlogadm"
  17.  href='.getenv(REQUEST_URI).'>wyloguj się</a>&nbsp;</i>
  18.  </td></tr></table>
  19.  
  20.  <table align=left class=main cellpadding="0" cellspacing="0"><tr><td align=center>
  21.  <form class="gora" action="dysk_pub_adm.php" method="post"> 
  22.  
  23.  <table align="left" width="138" cellpadding="0" cellspacing="0"><tr>
  24.  <td background="pliki/table-title.gif" width="138" height="20">
  25.  <P class="menu-title"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<b>Aktualno&para;ci:</b>
  26.  </td></tr></table>
  27.  
  28.  <input class="gora" name="str_gl" type="submit" value="Strona Główna">
  29.  <input class="gora" name="przegl_edyt_dysk" type="submit" value="Przegl&plusmn;daj / Edytuj">
  30.  <input class="gora" name="dod_wiersz_dysk" type="submit" value="Dodaj wiersz">
  31.  <input class="gora" name="us_wiersz_dysk" type="submit" value="Usuń wiersz">
  32.  <input class="gora" name="wyszuk_dysk" type="submit" value="Wyszukaj">
  33.  </td></tr></table></form>
  34.  
  35.  
  36.  
  37. </td></tr><tr><td>
  38.  
  39.  
  40.  <table align=left class=main cellpadding="0" cellspacing="0"><tr><td valign=top>';
  41.  
  42. include("menu_adm.php");
  43.  
  44. echo'</td><td valign=top>
  45.  
  46. <table align="left" cellpadding="4" cellspacing="0"><tr><td>';
  47.  
  48. $_POST['edit_dysk']=$_POST['edit'];
  49. $_POST['zapisz_dysk']=$_POST['zapisz'];
  50. $_POST['dodaj_dysk']=$_POST['dodaj'];
  51. $_POST['del_dysk']=$_POST['del'];
  52. $_POST['tak_dysk']=$_POST['tak'];
  53. $_POST['nie_dysk']=$_POST['nie'];
  54. $_POST['szukaj_dysk']=$_POST['szukaj'];
  55.  
  56.  
  57. if(isset($_POST['przegl_edyt_dysk']) || isset($_POST['zapisz_dysk'])|| isset($_POST['dodaj_dysk'])) {
  58. include('str_show_adm.php');
  59. }
  60.  
  61. else if(isset($_POST['dod_wiersz_dysk'])) {
  62. include('str_new_adm.php');
  63. }
  64.  
  65. else if(isset($_POST['us_wiersz_dysk']) || isset($_POST['del_dysk']) || isset($_POST['tak_dysk']) || isset($_POST['nie_dysk'])) {
  66. include('str_usun_adm.php');
  67. }
  68.  
  69. else if(isset($_POST['edit_dysk'])) {
  70.  include('str_edit_adm.php');
  71. }
  72.  
  73. else if(isset($_POST['wyszuk_dysk']) || isset($_POST['szukaj_dysk'])) {
  74. include('search_adm.php');
  75. }
  76.  
  77. else{
  78.  echo'zaaa';
  79. }
  80.  
  81. ?>


Roznia sie jedynie warunkami if:

  1. <?php
  2.  
  3.  
  4. // jeden plik
  5.  
  6. i$_POST['edit_dysk']=$_POST['edit'];
  7. $_POST['zapisz_dysk']=$_POST['zapisz'];
  8. $_POST['dodaj_dysk']=$_POST['dodaj'];
  9. $_POST['del_dysk']=$_POST['del'];
  10. $_POST['tak_dysk']=$_POST['tak'];
  11. $_POST['nie_dysk']=$_POST['nie'];
  12. $_POST['szukaj_dysk']=$_POST['szukaj'];
  13.  
  14.  
  15. if(isset($_POST['przegl_edyt_dysk']) || isset($_POST['zapisz_dysk'])|| isset($_POST['dodaj_dysk'])) {
  16. include('str_show_adm.php');
  17. }
  18.  
  19. ?>


  1. <?php
  2.  
  3. $_POST['edit_nocl']=$_POST['edit'];
  4. $_POST['zapisz_nocl']=$_POST['zapisz'];
  5. $_POST['dodaj_nocl']=$_POST['dodaj'];
  6. $_POST['del_nocl']=$_POST['del'];
  7. $_POST['tak_nocl']=$_POST['tak'];
  8. $_POST['nie_nocl']=$_POST['nie'];
  9. $_POST['szukaj_nocl']=$_POST['szukaj'];
  10.  
  11.  
  12. if(isset($_POST['przegl_edyt_nocl']) || isset($_POST['zapisz_nocl'])|| isset($_POST['dodaj_nocl'])) {
  13. include('str_show_adm.php');
  14. }
  15.  
  16. ?>


i odnosza sie zawsze do tych samych skryptow wykonujacych okreslone zadanie.
Czy moge wszystkie te skrypty skupic w jednym skrypcie i zamiast np: edit_nocl i edit_dysk, stworzyc jakas zmienna zastepujaca nocl, dysk itd??

Jak moge sie za to zabrac? Mysle nad tym ale nie moge sobie tego jakos wyobrazic... Wiem, ze to jest pewno pytanie do przedszkola ale nie chcialem zaczynac nowego tematu.

Prosze o pomoc...
matipl
@adeq_PL: register_globals swoją drogą, ale osobiście na Twoim miejscu zamiast robić SELECT * FROM $tablica, a następnie porównywać wyniki z zadanym słowem preg_match. Zrobiłbym to na poziomie bazy danych, np.:
  1. SELECT *
  2. FROM $tablica
  3. WHERE pole LIKE '%$word%'

Twoje rozwiązanie jest STRASZNIE niewydajne.
adeq_PL
matip Sprawe z register_global juz rozwiazalem.

Mozesz mi wyjasnic dlaczego porownanie z poziomu bazy danych jest efektywniejsze niz porownanie przez wyrazenia regularne?

Pytam poniezwaz siedze w tym temacie, a musze sie jeszcze wiele dowiedziec na ten temat
matipl
Cytat(adeq_PL @ 2006-04-24 14:05:23)
Mozesz mi wyjasnic dlaczego porownanie z poziomu bazy danych jest efektywniejsze niz porownanie przez wyrazenia regularne?

Chyba najłatwiej wyjaśnię Tobie na przykładzie.
Podajesz jako slowo szukane jakieś nie istniejące w wynikach, np. 'riohegf'.

Dzięki porównaniu na poziomie bazy danych, php nie otrzyma żadnych wyników na wstępie. i nie musisz już nie sprawdzać.
Sprawdzenie na poziomie bazy jest szybsze niż na poziomie php.
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.