Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php]Wyszukiwarka
Forum PHP.pl > Forum > Przedszkole
Mike122
Witam. Posiadam prostą wyszukiwarkę danych z bazy MySQL, chciałbym ją przerobić, bo ma parę błędów, choć nie wiem jak. Po pierwsze jak ktoś nic nie wpisze i kliknie szukaj wyświetli wszystkie wpisy z bazy chciałbym żeby pisało np. Proszę coś wpisać a drugie to, jeśli nie znajdzie danych to żeby pokazało, że brak takiego wpisu w bazie danych. Proszę o pomoc.
  1. <?php
  2.  
  3. mysql_connect ("localhost","****","*******");
  4. mysql_select_db ("a_imgweb");
  5.  
  6.  
  7. if($stan=='szukaj') {
  8. $zapytanie = "SELECT * FROM a_imgweb where adres like "%$znajdz%" or img like "%$znajdz%"";
  9. $wykonaj = mysql_query ($zapytanie) or die ('zapytanie:'.$zapytanie.'----blad:'.mysql_error());
  10. while($wiersz=mysql_fetch_array ($wykonaj)) {
  11. echo " <tr>
  12. <td width="6%">".$wiersz['adres']."</td>
  13. <td width="18%"><img src='img/".$wiersz['img']."'></td>
  14. </tr>";
  15. }
  16. } else {
  17. echo "<center><br><form method="get" >
  18. <input type="text" name="znajdz" size="20"><br>
  19. <input type="submit" value="szukaj" name="stan"></form>
  20. </center>";
  21. }
  22. ?>
batman
Pisane z palca, ale powinno działać.

  1. <?php
  2. mysql_connect ("localhost","****","*******");
  3. mysql_select_db ("a_imgweb");
  4.  
  5.  
  6. $stan = $_GET['stan'];
  7. $znajdz = $_GET['znajdz'];
  8.  
  9. if($stan == 'szukaj') {
  10. if(strlen($znajdz) == 0) {
  11. $zapytanie = "SELECT * FROM a_imgweb";
  12. echo 'Proszę coś wpisać';
  13. }
  14. else {
  15. $zapytanie = "SELECT * FROM a_imgweb where adres like '%".$znajdz."%' or img like '%".$znajdz."%'";
  16. }
  17.  
  18. $wykonaj = mysql_query ($zapytanie) or die ('zapytanie:'.$zapytanie.'----blad:'.mysql_error());
  19. $ilosc_wierszy = mysql_num_rows($wykonaj);
  20.  
  21. if($ilosc_wierszy == 0) {
  22. echo 'Nic nie znaleziono';
  23. }
  24. else {
  25. while($wiersz=mysql_fetch_array ($wykonaj)) {
  26. echo '<tr>
  27. <td width="6%">'.$wiersz['adres'].'</td>
  28. <td width="18%"><img src="img/'.$wiersz['img'].'"></td>
  29. </tr>';
  30. }
  31. }
  32. } else {
  33. echo '<center><br><form method="get">
  34. <input type="text" name="znajdz" size="20"><br>
  35. <input type="submit" value="szukaj" name="stan"></form>
  36. </center>';
  37. }
  38. ?>



Edit
Drobna pomyłka. Zamiast $_GET napisałem $_POST. I przy okazji. jak masz ustwione register_globals ?
Mike122
Dzięki za odpowiedź ale jest error:
Parse error: parse error, unexpected T_VARIABLE in \httpd-users\httpd\srv\index.php on line 6, a w 6 wszytko wporządku.....

Register Globals = ON
Zmieniłem na $_GET dalej ten sam problem.... w 6 linji

Skrypt jest prawie dobry choć jednak nadal po kliknięciu szukaj wyświetal się tekst:
"Proszę coś wpisać" i cała zawartość bazy MySQL. Dodatkowo co zrobić jeśli chciałbym przeszukać więcej niż 2 tabele. Próbowałem:
  1. <?php
  2. $zapytanie = "SELECT * FROM a_imgweb where adres like '%".$znajdz."%' or img like '%".$znajdz."%' or opis like '%".$znajdz."%'";
  3. ?>

Ale wyskakuje błąd..
batman
Co do błędu to nie wiem co może go powodować. Sprawdź w kodzie, czy nie masz gdzieś jakiejś źle zadeklarowanej zmiennej i/lub sprawdź średniki, czy są w odpowiednich miejscach.

A wyszukiwanie w kilku tabelach możesz zrobić tak:

  1. <?php
  2. $sql = "select * from tabela1 t1, tabela2 t2 where t1.pole1 like '%".$szukaj."%' and t2.pole1 like %".$szukaj."%'  ";
  3. ?>


Nie jest to najlepsze rozwiązanie, ale bez struktury bazy, dużo nie da się napisać winksmiley.jpg

Pamiętaj tylko, że * w zapytaniu zwróci wszystkie pola z obu tabel. Jeśli chcesz wyjąć poszczególne pola, musisz użyć t1.pole1, t1.pole2, t2.pole1, itd.
Mike122
Zapytanie do bazy wygląda tak:
  1. CREATE TABLE `a_imgweb` (
  2. `adres` TEXT NOT NULL ,
  3. `opis` TEXT NOT NULL ,
  4. `title` TEXT NOT NULL ,
  5. `img` TEXT NOT NULL ,
  6. `k` TEXT NOT NULL
  7. ) ENGINE = MYISAM ;

W bazie będzie ponad 2000 wpisów.
batman
To co podałeś, to jest schemat jednej tabeli w bazie. Wnioskuję z tego, że wyszukiwanie ma się odbywać tylko w tej tabeli. Jeśli tak, to odpowiedni kod już napisałem.

Tekst "proszę coś wpisać" pojawia się jeśli nie wpiszesz nic do pola tekstowego i zaczniesz szukać.
Mike122
Tylko jeśli się nic nie wpisze i kliknie szukaj to wyskoczy takie coś:
http://alphasquad.hopto.org/?znajdz=&stan=szukaj
Czyli tekst i wszytkie wpisy w bazie sadsmiley02.gif
jarrod
Cytat(Mike122 @ 18.10.2006, 19:10:22 ) *
Zapytanie do bazy wygląda tak:
  1. CREATE TABLE `a_imgweb` (
  2. `adres` TEXT NOT NULL ,
  3. `opis` TEXT NOT NULL ,
  4. `title` TEXT NOT NULL ,
  5. `img` TEXT NOT NULL ,
  6. `k` TEXT NOT NULL
  7. ) ENGINE = MYISAM ;

W bazie będzie ponad 2000 wpisów.

blinksmiley.gif Słyszałeś kiedyś o polu typu varchar i o indexach? Jest to najgorszy schemat bazy z jakim się spotkałem... Jeżeli adres będzie zawierał nie więcej niż 255 znaków to ustal że będzie to VARCHAR(255) ponieważ to pole tyle znaków maksymalnie może posiadać. Tak samo odnosi się to do pola img - jak sądzę będzie to adres obrazka. Co do tytułu to nie sądzę aby ktokolwiek kiedykolwiek będzie potrzebował pola typu text do napisania tytułu.
Pozatym pola po których wyszukujesz (ale które nie są typu TEXT) ustaw jako indexy
  1. ALTER TABLE `a_imgweb` ADD INDEX(`adres`,`img`);

Ale tylko kiedy będą innego typu niż TEXT.
Dodatkowo przydałby się klucz główny po którym możesz wykonywać operacje na rekordzie:

  1. ALTER TABLE `a_imgweb` ADD `id` INT( 11 ) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ;
batman
Cytat
Po pierwsze jak ktoś nic nie wpisze i kliknie szukaj wyświetli wszystkie wpisy z bazy chciałbym żeby pisało np. Proszę coś wpisać


Przecież chciałeś by pokazywało tekst i wszystkie wyniki.

Ale jeśli źle zrozumiałem z powodu braku interpunkcji w zadniu i ma wyświetlić tylko tekst "Proszę coś wpisać", wówczas musisz przerobić kod na taki:

  1. <?php
  2. mysql_connect ("localhost","****","*******");
  3. mysql_select_db ("a_imgweb");
  4.  
  5.  
  6. $stan = $_GET['stan'];
  7. $znajdz = $_GET['znajdz'];
  8.  
  9. if($stan == 'szukaj') {
  10. if(strlen($znajdz) == 0) {
  11. echo 'Proszę coś wpisać';
  12. }
  13. else {
  14. $zapytanie = "SELECT * FROM a_imgweb where adres like '%".$znajdz."%' or img like '%".$znajdz."%'";
  15. $wykonaj = mysql_query ($zapytanie) or die ('zapytanie:'.$zapytanie.'----blad:'.mysql_error());
  16. $ilosc_wierszy = mysql_num_rows($wykonaj);
  17.  
  18. if($ilosc_wierszy == 0) {
  19. echo 'Nic nie znaleziono';
  20. }
  21. else {
  22. while($wiersz=mysql_fetch_array ($wykonaj)) {
  23. echo '<tr>
  24. <td width="6%">'.$wiersz['adres'].'</td>
  25. <td width="18%"><img src="img/'.$wiersz['img'].'"></td>
  26. </tr>';
  27. }
  28. }
  29. }
  30. }
  31. else {
  32. echo '<center><br><form method="get">
  33. <input type="text" name="znajdz" size="20"><br>
  34. <input type="submit" value="szukaj" name="stan"></form>
  35. </center>';
  36. }
  37. ?>
Mike122
Dziękuję wszytskim za pomoc i wytrzymałość w szczegulności batmanowi.
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.