Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Prosta wyszukiwarka MySQL i za dużo wyników
Forum PHP.pl > Forum > Przedszkole
maaciek_
Witam,


Na wstępie pragnę powitać wszystkich forumowiczów, ponieważ dopiero co się zarejestrowałem smile.gif




Stworzyłem sobie prosty skrypt do przeszukiwania mojej bazy danych (konkretnie jednej kolumny w jednej tabeli). Jednakże skrypt ten wyświetla mi wszystkie rekordy zawarte w danej tabeli (+ dodatkowe informacje - to akurat dobrze robi), a nie tę konkretną, o którą pytam poprzez wpis w polu edycji. Tabela zawiera ok. 28 tysięcy wpisów, więc chcę, by wynikiem był jeden (lub kilka, bo wpisy mogą się dublować) odpowiadający wpis, a nie wszystkie, które są zawarte w tabeli bazy. Załączam kod php mojego skryptu:


  1. <head>
  2. </head>
  3. <html>
  4. <body>
  5. <font face="tahoma" size="4"> <font face="Verdana, Arial, Helvetica, sans-serif">Wyszukiwarka MySQL</font></font>
  6. <form action="<?php echo($_SERVER['PHP_SELF']); ?>" method="post">
  7. <font face="Verdana, Arial, Helvetica, sans-serif"> Nick, IP lub SID
  8. <input type="text" name="words" value="<?php echo($words); ?>">
  9. <br>
  10. <br>
  11. <input type="hidden" name="good" value="yes">
  12. <input type="submit" value="Szukaj">
  13. </font>
  14. </form>
  15. <p><font face="Verdana, Arial, Helvetica, sans-serif"><br>
  16. <br>
  17. <?
  18.  
  19. if($_POST['good']=='yes')
  20. {
  21. echo("<font face=\"tahoma\" size=\"3\" color=\"green\"><b>Wyniki dla $words</b></font><br><br>");
  22. $location = "xxx.xxx.xxx.xxx"; // host
  23. $username = "xxxxx"; // nazwa usera
  24. $password = "xxxxx"; // haslo
  25. $database = "xxxxx"; // nazwa bazy
  26. $db_table = "xxxxx"; // tabela do przeszukania
  27. $mysql_row = "xxxxx"; // kolumna, w której będą szukane wyniki
  28.  
  29. $conn = mysql_connect("$location","$username","$password");
  30. if (!$conn) die ("Nie mozna nawiazac polaczenia z MySQL");
  31. mysql_select_db($database,$conn) or die ("Nie mozna nawiazac polaczenia z MySQL");
  32.  
  33. $query = "ALTER TABLE $db_table ORDER BY id DESC";
  34. $result = mysql_query($query);
  35.  
  36. $query = "SELECT * FROM $db_table";
  37. $result = mysql_query($query);
  38. $numrows = mysql_num_rows($result);
  39. while($row = mysql_fetch_array($result)){
  40.  
  41. if(preg_match("/$words/i", $row[$mysql_row]))
  42. {
  43.  
  44. $ip = ($row[player_ip]);
  45. $sid = ($row[player_id]);
  46. $nick = ($row[player_nick]);
  47. $czas = ($row[ban_length]);
  48.  
  49. $display = '<font face="tahoma" size="2"><b>Adres IP:</b> ' .$ip . '<br><b>SteamID:</b> ' . $sid . '<br><b>Nick:</b> ' . $nick . '<br><b>Dlugosc bana:</b> ' .$czas . '</font><br><br>';
  50. echo($display);
  51. $foundcount++;
  52. }
  53. $totalcount++;
  54. }
  55. if(is_null($foundcount)){$foundcount=0;}
  56. echo("<font face=\"tahoma\" size=\"3\" color=\"green\"><b>Znaleziono $foundcount wynikow z $totalcount w bazie</b></font>");
  57. }
  58. ?>
  59. <br>
  60. </font></p>




Przykład działania skryptu można znaleźć tu: http://www.e-pietrzak.pl. W polu wyszukiwania proszę wpisać "80.50.140.246" - wpis na 100% istnieje. Ponadto proszę nie przerazić się czasem, z jakim działa skrypt - baza jest ogromna, więc i czas wyszukiwania długi. Jak widać, wynikiem nie jest wpis zawierający to konkretne IP, ale wszystkie możliwe wpisy w bazie. Dodatkowo, nawet bez wpisania w pole tekstowe zapytania wyszukiwarka wyświetla wszystkie wpisy z bazy, a nie pokazuje błędu - tego akurat nie zrobiłem, bo nie do końca wiem jak. Jak to naprawić?
johny_s
  1. $query = "SELECT * FROM $db_table WHER `$mysql_row` = '".mysql_escape_string($_POST['words'])."'";


i po co Ci zapytanie z ALTER przecież to służy do aktualizacji struktury tabeli
maaciek_
Faktycznie, ALTER służy do aktualizacji struktury. Pomyłka z mojej strony wink.gif


Natomiast po wpisaniu tego, co podałeś wywala błąd, który można zauważyć na stronie, po wpisaniu IP.


Cytat
Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in /home/pietrzak/domains/e-pietrzak.pl/public_html/search.php on line 34

Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in /home/pietrzak/domains/e-pietrzak.pl/public_html/search.php on line 35
gargamel
Literówka..
maaciek_
Racja, powinno być WHERE. Dzięki za cierpliwość i pomoc smile.gif Pozdrawiam smile.gif
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.