Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [HTML][MySQL][PHP] Problem z wyszukiwarka.
Forum PHP.pl > Forum > Przedszkole
Nicc0
Witam. Wyskrobałem tutaj taki kodzik na prosta wyszukiwarke... aczkolwiek w php jestem dopiero poczatkujacym i juz napotkalem pewien problem.
Wyszukiwarka ma za zadanie wyszukiwac nazwy gracza ktora znajduje sie w bazie danych. I tu jest problem, poniwaz ja rozumiem to tak:
-ten kod odpowiada za zapytanie do mysqla
  1. $query="Select * From players Where username Like '%{$_POST['phrase']}%' Or Like '%{$_POST['phrase']}%'";


i nie dokonca potrafie sie w tym odnalezc.

Select to wybierz (pewnie baze danych) czyli wszystkie "*" From z (pewnie tabeli) czyli "players" a Where (gdzie) i tu jest problem chcialbym aby po w pisaniu nicku w wyszukiwarce:
  1. <form action="search.php" method="post">
  2. <div class="HeaderSearchContent"><input type="text" name="phrase" id="phrase" value="<?php echo $phrase; ?>" /></div>
  3. <div class="right"><div class="szukaj"><input type="submit" name="znajdz" value="Szukaj" class="button" style="position: Relative; margin-top: -30px;"></div></div>
  4. </form>


w polu value czyli w php $phrase wyszukalo go z mojej tabeli "players" tylko pytanie czy mam zamiast where podstawic $_POST['phrase'] czy uzyc Like


Kod:
  1. echo'<h2>Wyniki wyszukiwania</h2>';
  2. $_POST['phrase']=trim($_POST['phrase']);
  3. if(empty($_POST['phrase']))
  4. die('Nie podales nazwy gracza');
  5. else
  6. {
  7. $base=mysql_connect($database_hostname . ":" . $database_port, $database_username, $database_password, $database_name);
  8. $query="Select * From players Where username Like '%{$_POST['phrase']}%' Or Like '%{$_POST['phrase']}%'";
  9. $result=mysqli_query($base,$query);
  10. $obAmount=mysqli_num_rows($result);
  11. echo'Znaleziono: '.$obAmount.'<br /><br />';
  12.  
  13. $k=".";
  14. $i=1;
  15.  
  16. for($x=0;$x<$obAmount;$x++)
  17. echo "<table class='table table-hover table-bordered'>";
  18. while($row = mysql_fetch_array($result)) {
  19.  
  20. echo "<tr>";
  21. echo "<td>".$i.$k."</td>";
  22. echo "<td color=000>" . $row['username'] . "</td>";
  23. echo "</tr>";
  24. $i++;
  25. }
  26. }
  27. mysql_close($base);
  28.  
  29. ?>



Oczywiscie jak chcecie jakies informacje dot. bazy powiedzcie co i gdzie jest.
Za wszelka pomoc z góry dziękuje.
_Borys_
  1. $query="SELECT * FROM players WHERE username LIKE '%{$_POST['phrase']}%'";

oznacza "ZAZNACZ wszystko Z tabelki players GDZIE username jest PODOBNY do tego co wpisałeś w formularzu"
Niepotrzebne drugie LIKE chyba, że podajesz więcej nazw graczy.
A jeśli chcesz konkretną osobę wyszukać to bez LIKE i tylko taką nazwę wyszuka którą podasz.
  1. $query="SELECT * FROM players WHERE username = '{$_POST['phrase']}'";


Poza tym błędy w skrypcie, zdecyduj się na mysql_ lub mysqli_ bo to różnica.

  1. <form action="search.php" method="post">
  2. <div class="HeaderSearchContent"><input type="text" name="phrase" id="phrase"/></div>
  3. <div class="right"><div class="szukaj"><input type="submit" name="znajdz" value="Szukaj" class="button" style="position: Relative; margin-top: -30px;"/></div></div>
  4. </form>


search.php
  1. echo'<h2>Wyniki wyszukiwania</h2>';
  2. $_POST['phrase']=trim($_POST['phrase']);
  3. if(empty($_POST['phrase'])){
  4. die('Nie podales nazwy gracza');
  5. }
  6. else{
  7.  
  8. $base = mysqli_connect($database_hostname.":".$database_port,$database_username,$database_password,$database_name) OR die(mysqli_error());
  9.  
  10. $query="SELECT * FROM players WHERE username LIKE '%{$_POST['phrase']}%'";
  11.  
  12. $result = mysqli_query($base,$query);
  13. $obAmount = mysqli_num_rows($result);
  14. echo'Znaleziono: '.$obAmount.'<br /><br />';
  15. $k = ".";
  16. $i = 1;
  17. for($x=0;$x<$obAmount;$x++)
  18. echo "<table class='table table-hover table-bordered'>";
  19. while($row = mysqli_fetch_array($result)) {
  20. echo "<tr>";
  21. echo "<td>".$i.$k."</td>";
  22. echo "<td color=000>" . $row['username'] . "</td>";
  23. echo "</tr>";
  24. $i++;
  25. }
  26. }
  27. echo '</table>';
  28. mysqli_close($base);
CuteOne
Przejdź na PDO lub chociaż filtruj dane, bo z takim kodem daleko nie zajedziesz... http://roshanbh.com.np/2007/12/sql-injecti...ons-in-php.html
Nicc0
Witam. Borys uzylem tego kodu na zapytanie:

Cytat(_Borys_ @ 23.01.2013, 01:12:18 ) *
  1. $query="SELECT * FROM players WHERE username = '{$_POST['phrase']}'"


Ale jest problem. Strona nie chce sie wczytac. Tylko na tym kodzie bo jak dam z Like strona dziala, ale nie kodzik nie dziala. tzn nie wyswietla nic. Wiecie moze jak sprawdzic bledy? (na chromie)

CuteOne rozumiem ze moj kod jest kulawy pod wzgeldem zabezpieczen, ale nawet i kod nie wyszukuje hasel lub jakichs danych tylko nick. To jest tak naprawde moj pierwszy taki "projekt", bo jak pisalem z php mam do czynienia od kilku dni.
_Borys_
Dodaj średnik na końcu, już poprawiłem.
Nicc0
lol, ze ja tego nie zauważyłem... sciana.gif

...ale wracajac do kodu samej wyszukiwarki, cos jest nie tak poniewaz nie wyswietla sie wynik w tabelii. I teraz sam nie wiem co jest zle.
_Borys_
Włącz raportowanie błędów w plikach php, może pokaże co nie tak.
Zaraz na początku po <?php dopisz:
  1. ini_set('display_errors', 1);


a poza tym jeśli błąd w zapytaniu do mysqli to też są funkcje aby pokazywało błędy, jedną podałem przy łączeniu z bazą mysqli_error().
Najlepiej podawaj tu błędy jak wyskakują.

Nie wyświetla w tabeli czy nie wyświetla wyniku ?
Jeśli nie wyświetla w tabeli to nadaj ramkę tabeli poprzez border, table i border słowa kluczowe.
Nicc0
Ok. Na poczatku bylo ze nie moze polaczyc z baza.
  1. Warning: mysqli_connect(): (HY000/2005): Unknown MySQL server host 'localhost:3306' (1) in /var/www/ctp/search.php on line 55


Zmienilem to mysqli na mysql i teraz sa inne bledy. so...
W wyszukiwarce wywaliło:

Notice: Undefined variable: slowo in /var/www/ctp/search.php on line 82

a w sekcji:

Warning: mysql_query() expects parameter 1 to be string, resource given in /var/www/ctp/search.php on line 59 Warning: mysql_num_rows() expects parameter 1 to be resource, null given in /var/www/ctp/search.php on line 60

Znaleziono:

Warning: mysql_fetch_array() expects parameter 1 to be resource, null given in /var/www/ctp/search.php on line 66

Kod:

  1. 45 <?php
  2. 46 error_reporting(E_ALL);
  3. 47 ini_set('display_errors', 1);
  4. 48 echo'<h2>Wyniki wyszukiwania</h2>';
  5. 49 $_POST['phrase']=trim($_POST['phrase']);
  6. 50 if(empty($_POST['phrase'])){
  7. 51 die('Nie podales nazwy gracza');
  8. 52 }
  9. 53 else{
  10. 54
  11. 55 $base = mysql_connect($database_hostname.":".$database_port,$database_username,$database_password,$database_name) OR die(mysql_error());
  12. 56
  13. 57 $query="SELECT * FROM players WHERE username = '{$_POST['phrase']}'";
  14. 58
  15. 59 $result = mysql_query($base,$query);
  16. 60 $obAmount = mysql_num_rows($result);
  17. 61 echo'Znaleziono: '.$obAmount.'<br /><br />';
  18. 62 $k = ".";
  19. 63 $i = 1;
  20. 64 for($x=0;$x<$obAmount;$x++)
  21. 65 echo "<table class='table table-hover table-bordered'>";
  22. 66 while($row = mysql_fetch_array($result)) {
  23. 67 echo "<tr>";
  24. 68 echo "<td>".$i.$k."</td>";
  25. 69 echo "<td color=000>" . $row['username'] . "</td>";
  26. 70 echo "</tr>";
  27. 71 $i++;
  28. 72 }
  29. 73 }
  30. 74 echo '</table>';
  31. 75 mysql_close($base);
  32. 76 ?>
  33. 77 </section>
Michasko
W mysql_query podajesz zapytanie, nie ma potrzeby podawania zmiennej $base.
Undefined variable: slowo - masz niezdefiniowaną zmienną "slowo".
CuteOne
+ wywal for($x=0;$x<$obAmount;$x++) bo wykonujesz 2x pętlę wink.gif
Nicc0
Ok. Wszystko tak jak napisaliście zrobiłem. Został jeden problem.

Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in search.php on line 63

Kod:
  1. error_reporting(E_ALL);
  2. ini_set('display_errors', 1);
  3. echo'<h2>Wyniki wyszukiwania</h2>';
  4. $_POST['phrase']=trim($_POST['phrase']);
  5. if(empty($_POST['phrase'])){
  6. die('Nie podales nazwy gracza');
  7. }
  8. else{
  9.  
  10. $base = mysql_connect($database_hostname.":".$database_port,$database_username,$database_password,$database_name) OR die(mysql_error());
  11.  
  12. $query="SELECT * FROM players WHERE username = '{$_POST['phrase']}'";
  13.  
  14. $result = mysql_query($query);
  15. $k = ".";
  16. $i = 1;
  17. echo "<table class='table table-hover table-bordered'>";
  18. while($row = mysql_fetch_array($result)) {
  19. echo "<tr>";
  20. echo "<td>".$i.$k."</td>";
  21. echo "<td color=000>" . $row['username'] . "</td>";
  22. echo "</tr>";
  23. $i++;
  24. }
  25. }
  26. echo '</table>';
  27. mysql_close($base);
  28. ?>


Wyszukiwarka:
  1. <section id="stats" class="box_selection">
  2. <div> <h3 class="colh">Szukaj</h3> </div>
  3. <form action="search.php" method="post">
  4. <div class="HeaderSearchContent"><input type="text" name="phrase" id="phrase" /></div>
  5. <div class="right"><div class="szukaj"><input type="submit" name="znajdz" value="Szukaj" class="button" style="position: Relative; margin-top: -30px;"></div></div>
  6. </form>
  7. </section>
CuteOne
  1. <?php
  2.  
  3. $query="SELECT * FROM players WHERE username = '".$_POST['phrase']."'";
  4.  
  5. $result = mysql_query($query);
  6. $i = 1;
  7. echo '<table class="table table-hover table-bordered">';
  8.  
  9. if(mysql_num_rows($result)) :
  10.  
  11. while($row = mysql_fetch_array($result)) :
  12. ?>
  13. <tr>
  14. <td><?= $i++; ?>.</td>
  15. <td color=000><?= $row['username'];?></td>
  16. </tr>
  17.  
  18. <?php
  19. endwhile;
  20. endif;
  21. echo '</table>';
Nicc0
CuteOne strona sie nie laduje. W twoim kodzie chyba w 9 i 11 linijce powinno byc na koncu ";" ale nawet i... tez nie dziala. I 2 przed echo '</table>'; powinien byc } tez dodalem i tez nic. Nie wiem co jest zle. Kombinowalem 30 min nad tym i nic.
nospor
W Twoim ostatnim kodzie (nie w kodzie cuteone), masz blad zapytania. Wyswietl go sobie....

$result = mysql_query($query) or die(mysql_error());
Nicc0
Ok. Dopisalem. I mam nastepujacy blad: No database selected
_Borys_
Zamień połączenie z bazą na to:
  1. $base = mysql_connect($database_hostname.":".$database_port,$database_username,$database_password) OR die(mysql_error());
  2. mysql_select_db('Nazwa bazy w której są players',$base) OR die(mysql_error());
CuteOne
"mój" zapis jest jak najbardziej poprawny wink.gif używam go gdy w ciele pętli/ifa muszę umieścić kod html. Ułatwia to rozeznanie się co jest co zwłaszcza przy skryptach typu spaghetti (mix html z php w jednym pliku)

  1. if() {
  2. while() {
  3. foreach() {
  4. while() {
  5.  
  6.  
  7.  
  8.  
  9.  
  10.  
  11.  
  12.  
  13. }
  14.  
  15.  
  16.  
  17.  
  18.  
  19.  
  20.  
  21. }
  22.  
  23.  
  24. }

teraz dodaj do tego kilkadziesiąt lini html, php i powiedz mi, która klamra zamyka pętle foreach tongue.gif
Nicc0
Ok. Dzieki wszystkim za pomoc. Oczywiscie wszyscy macie "Pomogl". Temat twierdze za zamkniety. Tutaj ewentualnie umieszcze kod do "naszej" wyszukiwarki.

Kod:
  1. <?php
  2. // MySQL Information
  3. $database_hostname = 'localhost';
  4. $database_username = 'user';
  5. $database_password = 'pass';
  6. $database_name = 'db';
  7. $database_port = 'port';
  8.  
  9. echo'<h2>Wynik wyszukiwania:</h2>';
  10. $_POST['phrase']=trim($_POST['phrase']);
  11. if(empty($_POST['phrase'])){
  12. die('Formularz został nie wypełniony.');
  13. }
  14. else{
  15.  
  16. $base = mysql_connect($database_hostname.":".$database_port,$database_username,$database_password);
  17. if (!$base) {
  18. die('Brak polaczenia z baza danych.');
  19. }
  20.  
  21. $db_selected = mysql_select_db($database_name, $base);
  22. if (!$db_selected) {
  23. die('Nie połączono z bazą danych.');
  24. }
  25.  
  26. $query="SELECT * FROM players WHERE username = '{$_POST['phrase']}'";
  27.  
  28. $result = mysql_query($query);
  29.  
  30. $k = ".";
  31. $i = 1;
  32. echo "<table class='table table-hover table-bordered'>";
  33. while($row = mysql_fetch_array($result)) {
  34.  
  35. echo "<tr>";
  36. echo "<td>".$i.$k."</td>";
  37. echo "<td color=000>" . $row['username'] . "</td>";
  38. echo "</tr>";
  39. $i++;
  40. }
  41. }
  42. echo '</table>';
  43. mysql_close($base);
  44. ?>


Wyszukiwarka:
  1. <form action="search.php" method="post">
  2. <div class="HeaderSearchContent"><input type="text" name="phrase" id="phrase" /></div>
  3. <div class="szukaj"><input type="submit" name="znajdz" value="Szukaj" class="button" /></div>
  4. </form>


Jeszcze raz z dzieki. thumbsupsmileyanim.gif
CuteOne
Dodaj chociaż minimalne zabezpieczenia smile.gif
wstaw to zaraz za połączeniem z bazą
$_POST['phrase']=trim(mysql_real_escape_string($_POST['phrase']));

Nie ma za co
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.