Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php][mysql] Problem z wyszukiwaniem
Forum PHP.pl > Forum > Przedszkole
mac1us
Witam. Mam nastepujacy skrypt wyszukiwania:
  1. <?php
  2. include "auth_admin.inc.php";
  3. include "conn.inc.php";
  4. ?>
  5. <html>
  6. <head>
  7. <title>Panel administracyjny</title>
  8. <style type="text/css">
  9. body {
  10.  background-color: #87CEFA;
  11. }  a img{
  12. border: none;}
  13. td { color:navy; font-weight: bold;}
  14. p {color:navy; font-weight: bold;}
  15. a
  16. {
  17. color: navy;
  18. }
  19.  
  20. a:hover
  21. {
  22. color: red;
  23. }
  24. </style>
  25. </head>
  26. <body>
  27. <h2>Wyszukiwarka</h2>
  28. <form name="search" method="post" action="<?=$PHP_SELF?>">
  29. Szukaj <input type="text" name="find" /> w rekordzie
  30. <Select NAME="field">
  31. <Option VALUE="nazwa">nazwa</option>
  32. <Option VALUE="adres">adres</option>
  33. <Option VALUE="miasto">miasto</option>
  34. </Select>
  35. <input type="hidden" name="searching" value="yes" />
  36. <input type="submit" name="search" value="Search" />
  37. </form>
  38.  
  39. <?
  40. if ($searching =="yes")
  41. {
  42. echo "<h2>Wyniki</h2><p>";
  43.  
  44. if ($find == "")
  45. {
  46. echo "<p>Nie wpisales nic w pole zapytania";
  47. }
  48.  
  49. mysql_connect("xxxxx", "xxxxx", "xxxxxx") or die(mysql_error());
  50. mysql_select_db("xxxxxxx") or die(mysql_error());
  51.  
  52. $find = strtoupper($find);
  53. $find = strip_tags($find);
  54. $find = trim ($find);
  55.  
  56. $data = mysql_query("SELECT * FROM laboratoria WHERE upper($field) LIKE'%$find%'");
  57.  
  58. while($result = mysql_fetch_array( $data ))
  59. {
  60. echo $result['nazwa'];
  61. echo "<br>";
  62. echo $result['adres'];
  63. echo "<br>";
  64. echo $result['miasto'];
  65. echo "<br>";
  66. echo "<br>";
  67. }
  68.  
  69. $anymatches=mysql_num_rows($data);
  70. if ($anymatches == 0)
  71. {
  72. echo "Nic nie znaleziono<br><br>";
  73. }
  74.  
  75. echo "<b>Szukano:</b> " .$find;
  76. }
  77. ?>
  78. </body>
  79. </html>


Nie wiem dlaczego ale nie wyswietla on wynikow wyszukiwania. Czy ktos moglby mi pomoc?
Cienki1980
Strzelam, że masz ustawione w php.ini register_globals na Off ( i tak ma być ) więc nie przypisując zmiennych pobieranych z $_POST i/lub $_GET nie będzie nic Ci działać poprawnie.

Spróbuj na samym początku skryptu dodać :
  1. <?php
  2. $find=$_POST['find'];
  3. $field=$_POST['field'];
  4. ?>


I tak należy postępować w każdym skrypcie przy zmiennych wysyłanych za pomocą post'a lub get'a.
mac1us
dodalem to na poczatek skryptu ale niestety nic to nie zmienilo - wyniki wciaz nie sa wyswietlane :/
Cienki1980
Cytat(mac1us @ 5.08.2007, 09:27:38 ) *
dodalem to na poczatek skryptu ale niestety nic to nie zmienilo - wyniki wciaz nie sa wyswietlane :/


To sprawdź czy przesyłasz takie dane jak wpisałeś do formularza, czy zapytanie się generuje poprawnie ...

Jeżeli to wszystko jest OK to poszukamy dalej.
mac1us
tzn w jakim sensie mam to sprawdzic?
Cienki1980
Cytat(mac1us @ 5.08.2007, 09:44:18 ) *
tzn w jakim sensie mam to sprawdzic?


np wykorzystując echo i pisząc:

  1. <?php
  2. echo $field;
  3. echo $find;
  4. echo "SELECT * FROM laboratoria WHERE upper($field) LIKE'%$find%'";
  5. //z wszystko to już po pobraniu danych z $_POST
  6. ?>
mac1us
ok sprawdzilem.
wygenerowalo mi

miastowarszawaSELECT * FROM laboratoria WHERE upper(miasto) LIKE'%warszawa%'

wiec przesyla dobre dane i zapytanie tez jest poprawne
Cienki1980
No to teraz chwile pomyślmy ...

Wywołujesz w zapytaniu SQL upper(kolumna) ... czyli zawartość tej kolumny jest "podnoszona" do dużych liter ...

Ty do zapytania wstawiasz 'warszawa' z samych małych liter .. więc nic nie ma prawa znaleźć

wystarczy jednak że zastosujesz strtoupper" title="Zobacz w manualu PHP" target="_manual a wszystko powinno chodzić pięknie.
mac1us
Cytat(Cienki1980 @ 5.08.2007, 10:23:48 ) *
Wywołujesz w zapytaniu SQL upper(kolumna) ... czyli zawartość tej kolumny jest "podnoszona" do dużych liter ...

Ty do zapytania wstawiasz 'warszawa' z samych małych liter .. więc nic nie ma prawa znaleźć


tak - zapytanie "podrzuca" litery ale przciez mam także:

  1. <?php
  2. $find = strtoupper($find);
  3. ?>


Czyli zapytanie tez jest zamieniane na duże litery prawda?
Cienki1980
Cytat(mac1us @ 5.08.2007, 10:32:53 ) *
tak - zapytanie "podrzuca" litery ale przciez mam także:

  1. <?php
  2. $find = strtoupper($find);
  3. ?>


Czyli zapytanie tez jest zamieniane na duże litery prawda?


Przegapiłem to, że korzystasz z strtoupper() ... to teraz pytanie gdzie umieściłeś echo "select .... itd itd questionmark.gif";

Po tym jak zrobiłeś $find=strtoupper($find); czy przed tą linijką questionmark.gif
mac1us
wrzucilem to na sam koniec skryptu (za "echo Szukano....)
Cienki1980
Cytat(mac1us @ 5.08.2007, 10:36:54 ) *
wrzucilem to na sam koniec skryptu (za "echo Szukano....)


Pokaż cały skrypt raz jeszcze, razem z tymi echo.
mac1us
oto on:
  1. <?php
  2. include "auth_admin.inc.php";
  3. include "conn.inc.php";
  4. ?>
  5. <html>
  6. <head>
  7. <title>Panel administracyjny</title>
  8. <style type="text/css">
  9. body {
  10.  background-color: #87CEFA;
  11. }  a img{
  12. border: none;}
  13. td { color:navy; font-weight: bold;}
  14. p {color:navy; font-weight: bold;}
  15. a
  16. {
  17. color: navy;
  18. }
  19.  
  20. a:hover
  21. {
  22. color: red;
  23. }
  24. </style>
  25. </head>
  26. <body>
  27. <h2>Wyszukiwarka</h2>
  28. <form name="search" method="post" action="<?=$PHP_SELF?>">
  29. Szukaj <input type="text" name="find" /> w rekordzie
  30. <Select NAME="field">
  31. <Option VALUE="nazwa">nazwa</option>
  32. <Option VALUE="adres">adres</option>
  33. <Option VALUE="miasto">miasto</option>
  34. </Select>
  35. <input type="hidden" name="searching" value="yes" />
  36. <input type="submit" name="search" value="Search" />
  37. </form>
  38. <?
  39. $find=$_POST['find'];
  40. $field=$_POST['field'];
  41. if ($searching =="yes")
  42. {
  43. echo "<h2>Wyniki</h2><p>";
  44.  
  45. if ($find == "")
  46. {
  47. echo "<p>Nie wpisales nic w pole zapytania";
  48. }
  49.  
  50. mysql_connect("xxx", "xxx", "xxx") or die(mysql_error());
  51.  
  52. $find = strtoupper($find);
  53. $find = strip_tags($find);
  54. $find = trim ($find);
  55.  
  56.  
  57.  
  58. $data = mysql_query("SELECT * FROM laboratoria WHERE upper($field) LIKE'%$find%'");
  59.  
  60. while($result = mysql_fetch_array( $data ))
  61. {
  62. echo $result['nazwa'];
  63. echo "<br>";
  64. echo $result['adres'];
  65. echo "<br>";
  66. echo $result['miasto'];
  67. echo "<br>";
  68. echo "<br>";
  69. }
  70.  
  71. $anymatches=mysql_num_rows($data);
  72. if ($anymatches == 0)
  73. {
  74. echo "Nic nie znaleziono<br><br>";
  75. }
  76.  
  77. echo "<b>Szukano:</b> " .$find;
  78. }
  79.  
  80. echo $field;
  81. echo $find;
  82. echo "SELECT * FROM laboratoria WHERE upper($field) LIKE'%$find%'";
  83. ?>
  84. </body>
  85. </html>




-------------------------
danych dostępowych do konta
nie musiałeś podawać biggrin.gif
~Cienki1980
Cienki1980
A sprawdź takie coś:
  1. <?php
  2. //zamiast
  3. $data = mysql_query("SELECT * FROM laboratoria WHERE upper($field) LIKE'%$find%'");
  4. //wpisz
  5. $data = mysql_query("SELECT * FROM laboratoria WHERE upper(".$_POST['field'].") LIKE '%".strtoupper($_POST['find'])."%'");
  6. ?>


i zobacz czy to cokolwiek zmieni.
mac1us
zmienilem ale niestety wciaz nic sie nie dzieje
Cienki1980
Jak dla mnie nie działa funkcja strtoupper(); ..... skończyły mi się pomysły

Musiałbyś przetestować czy ta funkcja działa poprawnie.
mac1us
hmmm nie wiem co sie dzieje ale chyba wiecej rzeczy tu nie gra

przykladowo:
jesli pole zostanie puste to wg tego kodu:
  1. <?php
  2. if ($find == "")
  3. {
  4. echo "<p>Nie wpisales nic w pole zapytania";
  5. }
  6. ?>

powinna wyswietlic sie informacja zawarta w echo prawda? Niestety nic takiego sie nie dzieje. Ktos wie dlaczego?
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.