Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]wyszukiwarka coś nie działa
Forum PHP.pl > Forum > Przedszkole
Michał90
Witam,
jestem noobkiem smile.gif
Nie działa mi wyszukiwarka. W czym tkwi problem ?

  1. <?php
  2. $connection = mysql_connect('localhost','xxxx','yyyy','zzzzz');
  3. echo'<form action="j.php" method="post">';
  4. echo "<br>wpisz towar <br>";
  5. echo'<input type="text" name="tytul" id="tytul" value="">';
  6.  
  7. echo'<input type="submit" name="znajdz" value="znajdz">';
  8. echo'<input type="reset" value="wyczyść">';
  9. echo'</form>';
  10.  
  11. if(isset($_POST['znajdz']))
  12. {
  13. $tytul = $_POST['tytul'];
  14.  
  15.  
  16. $zapytanie = mysql_query("SELECT * FROM `publications` WHERE `tytul`.`TYTUL` LIKE '%$tytul%' ");
  17.  
  18. echo "<table cellpadding='1' border='1'>";
  19. echo "<tr>";
  20. echo "<td> tytul </td>";
  21. echo "<td> działy </td>";
  22. echo "<tr>";
  23. while( $wiersz = mysql_fetch_array($zapytanie) )
  24. {
  25. echo "<tr>";
  26. echo "<td>".$wiersz['TYTUL']."</td>";
  27. echo "<tr>";
  28. }
  29. echo "</table>";
  30.  
  31. mysql_close($connection);
  32. }
  33. ?>


Ma wyszukiwać dane słowo po tytule i nazwie autora(albo wpisze tytuł albo autora) z tabeli publications..
Co jest źle?

Pozdrawiam

darko
WHERE `tytul`.`TYTUL` ?
Daj
  1. $zapytanie = mysql_query("SELECT * FROM `publications` WHERE `tytul`.`TYTUL` LIKE '%$tytul%' ") or die(mysql_error());
i będziesz wiedział, co jest źle.
Michał90
Mam komunikat Nie wybrano żadnej bazy danych

Jest przecież na samej górze wybrana baza biggrin.gif

jak dałem tak:
  1. $zapytanie = mysql_query($connection,"SELECT * FROM `publications` WHERE `tytul`.`TYTUL` LIKE '%$tytul%' ") or die(mysql_error());


to też nie działa
darko
Po połączeniu z bazą należałoby ją wybrać mysql_select_db
Armstrong
Cytat(Michał90 @ 30.12.2009, 18:25:10 ) *
Mam komunikat Nie wybrano żadnej bazy danych

Nie wybrałeś bazy mysql_select_db();
Michał90
  1. <?php
  2. $connection = mysql_connect('localhost','xxxx','yyyy','zzzz');
  3. mysql_select_db ('zzzzz');
  4. echo'<form action="j.php" method="post">';
  5. echo "<br>wpisz towar <br>";
  6. echo'<input type="text" name="tytul" id="tytul" value="">';
  7.  
  8. echo'<input type="submit" name="znajdz" value="znajdz">';
  9. echo'<input type="reset" value="wyczyść">';
  10. echo'</form>';
  11.  
  12. if(isset($_POST['znajdz']))
  13. {
  14. $tytul = $_POST['tytul'];
  15.  
  16.  
  17. $zapytanie = mysql_query("SELECT * FROM `publications` WHERE `tytul` LIKE '%$tytul%' ") or die(mysql_error());
  18.  
  19. echo "<table cellpadding='1' border='1'>";
  20. echo "<tr>";
  21. echo "<td> tytul </td>";
  22. echo "<td> działy </td>";
  23. echo "<tr>";
  24. while( $wiersz = mysql_fetch_array($zapytanie) )
  25. {
  26. echo "<tr>";
  27. echo "<td>".$wiersz['tytul']."</td>";
  28. echo "<tr>";
  29. }
  30. echo "</table>";
  31.  
  32. mysql_close($connection);
  33. }
  34. ?>


Ok już nie mam błędów ale nie pobiera mi wyników dlaczego ? smile.gif

Pozdrawiam
darko
Dla pewności pozamykaj ( />) inputy w formularzu i wyprintuj wartość zmiennej $tytul
Michał90
Ok już zauważyłem dlaczego mi nie chciało wyświetlać.. Otóż chodzi o to, że jak napisze małymi literami dane słowo, a w bazie jest napisane duża literą to już tego nie bierze pod uwagę i nie wyświetla... jak to zmienić żeby po wpisaniu dużą czy małą literą brał to pod uwagę.
Druga sprawa to taka, że jeśli nic nie wpiszę w wyszukiwarkę, a dam szukaj to wyświetla wszystkie wpisy z bazy jak temu zapobiec ?
Trzecia sprawa jak dodać żeby wyszukiwał również po nazwie autora ? Czyli jak wpisze tytuł lub nazwe autora to wyszukuje smile.gif

Pozdrawiam
darko
1. $tytul = ucfirst(strtolower($tytul));
2.
if(strlen($tytul) == 0)
{
// wykonaj, co trzeba
}
3.
- echo'<input type="text" name="autor" id="autor" value="">';
- $autor = $_POST["autor"];
- jw.
- (...) WHERE `tytul` LIKE '%$tytul%' OR autor LIKE '%$autor%'
Michał90
Możesz to zlepić z tamtym kodem (powyżej) bo za bardzo nie wiem w które miejsce gubię sie winksmiley.jpg
darko
Cytat(Michał90 @ 31.12.2009, 12:11:56 ) *
Możesz to zlepić z tamtym kodem (powyżej) bo za bardzo nie wiem w które miejsce gubię sie winksmiley.jpg

Nie mogę, to Twoje zadanie i tak masz wszystko podane na talerzu winksmiley.jpg Podpowiem: postępuj analogicznie. Trochę wkładu własnego. I jak idzie?
Michał90
To: $tytul = ucfirst(strtolower($tytul));
to to jest że bierze pod uwagę małe i duże litery tak ?
darko
strtolower zamienia wszystkie litery na małe, a ucfirst powoduje, że pierwsza litera jest duża.
Michał90
Ok poradziłem sobie z pkt 1.

Czy takie rozwiązanie może być? jeśli nic nie zostanie wpisane w wyszukiwarce, a ktoś da szukaj.
  1. <? if(empty($tytul)){
  2. die("Formularz wypełniony niepoprawnie! Nie można wyświetlić wyników wyszukiwania!");
  3. }?>


Nie wiem gdzie to dac:
  1. <? if(strlen($tytul) == 0)
  2. {
  3. echo "Nic nie znaleziono!";
  4. }?>


może być zamiast tego to:
  1. <? if(mysql_num_rows($zapytanie) == 0){
  2. echo "Nic nie znaleziono!";
  3. }?>

to mi działa biggrin.gif
darko
Cytat(Michał90 @ 31.12.2009, 12:35:25 ) *
Ok poradziłem sobie z pkt 1.

Czy takie rozwiązanie może być? jeśli nic nie zostanie wpisane w wyszukiwarce, a ktoś da szukaj.
  1. <? if(empty($tytul)){
  2. die("Formularz wypełniony niepoprawnie! Nie można wyświetlić wyników wyszukiwania!");
  3. }?>


Nie wiem gdzie to dac:
  1. <? if(strlen($tytul) == 0)
  2. {
  3. echo "Nic nie znaleziono!";
  4. }?>

W takim razie to drugie nie jest Ci już potrzebne. Teraz dodaj do formularza pole autor, dodaj do kodu zmienną $autor i doklej do zapytania, to co podałem i powinno śmigać. Właściwie najpierw powinieneś sprawdzać czy podano tytuł i autora i dopiero w zależności od tego czy podano oba (wtedy w zapytaniu powinno być AND zamiast OR) czy podano któreś z tych dwóch kryteriów - sformułować odpowiednie zapytanie.
Michał90
Czyli zamiast tego:
  1. <? if(strlen($tytul) == 0)
  2. {
  3. echo "Nic nie znaleziono!";
  4. }?>


może być to co podałem tak ? Czyli to:
  1.  
  2. <? if(mysql_num_rows($zapytanie) == 0){
  3.  
  4. echo "Nic nie znaleziono!";
  5.  
  6. }?>
darko
Nie, to
  1. if(empty($tytul)){
  2. die("Formularz wypełniony niepoprawnie! Nie można wyświetlić wyników wyszukiwania!");
  3. }

w zupełności wystarczy.
Michał90
z tym szukaniu po nazwie autora to nie chodziło mi tak zupełnie tak jak podałeś.

Chce, żeby było tylko 1 pole wyszukiwania i jeśli w nim wpisze autora to wyszuka jak jest , jeśli wpisze w nim tytuł to też wyszuka smile.gif

darko
Lepiej byłoby zrobić takie wyszukiwanie mając dwa osobne pola, bo jak poznasz o które kryterium wyszukiwania chodziło użytkownikowi? Chyba, że dodasz jakiegoś checkboxa lub radiobuttony
Michał90
Aha czyli tak to ma wyglądać?

  1. <?php
  2. echo'<form action="j.php" method="post">';
  3. echo "<br>wpisz towar <br>";
  4. echo'<input type="text" name="tytul" id="tytul" value=""/>';
  5. echo'<input type="text" name="autor" id="autor" value="">';
  6. echo'<input type="submit" name="znajdz" value="znajdz"/>';
  7. echo'<input type="reset" value="wyczyść"/>';
  8. echo'</form>';
  9.  
  10. if(isset($_POST['znajdz']))
  11. {
  12. $tytul = $_POST['tytul'];
  13. $autor = $_POST["autor"];
  14. $tytul = ucfirst(strtolower($tytul));
  15. $connection = mysql_connect('localhost','xxxx','xxxx','xxxxx');
  16. mysql_select_db ('xxxx');
  17. $zapytanie = mysql_query("SELECT `tytul`,`autor` FROM `publications` WHERE `tytul` LIKE '%$tytul%' AND autor LIKE '%$autor%' ") or die(mysql_error());
  18.  
  19. if(empty($tytul)){
  20. die("Formularz wypełniony niepoprawnie! Nie można wyświetlić wyników wyszukiwania!");
  21. }
  22. echo "<table cellpadding='1' border='1'>";
  23. echo "<tr>";
  24. echo "<td> tytul </td>";
  25. echo "<td> autor </td>";
  26. echo "<tr>";
  27. while( $wiersz = mysql_fetch_array($zapytanie) )
  28. {
  29. echo "<tr>";
  30. echo "<td>".$wiersz['tytul']."</td>";
  31. echo "<td>".$wiersz['autor']."</td>";
  32. echo "<tr>";
  33.  
  34. }
  35. echo "</table>";
  36.  
  37.  
  38. mysql_close($connection);
  39. }
  40.  
  41. ?>


Jak teraz dodać, że obydwa pola nie mogą być puste?
darko
To:
  1. if(empty($tytul)){
  2. die("Formularz wypełniony niepoprawnie! Nie można wyświetlić wyników wyszukiwania!");
  3. }

przenieś przed miejsce, w którym wykonujesz zapytane do bazy i zmodyfikuj tak:


  1. if(empty($tytul) || empty($autor)) {
  2. die("Formularz wypełniony niepoprawnie! Nie można wyświetlić wyników wyszukiwania!");
  3. }
Michał90
Czyli mam to przenieść przed:
  1. $zapytanie = mysql_query("SELECT `tytul`,`autor` FROM `publications` WHERE `tytul` LIKE '%$tytul%' AND autor LIKE '%$autor%' ") or die(mysql_error());


tak to zrobiłem ale teraz za każdym razem wyskakuje mi Formularz wypełniony niepoprawnie! Nie można wyświetlić wyników wyszukiwania!
darko
sciana.gif pokaż kod
Michał90
  1. <?php
  2. echo'<form action="j.php" method="post">';
  3. echo "<br>wpisz towar <br>";
  4. echo'<input type="text" name="tytul" id="tytul" value=""/>';
  5. echo'<input type="text" name="autor" id="autor" value="">';
  6. echo'<input type="submit" name="znajdz" value="znajdz"/>';
  7. echo'<input type="reset" value="wyczyść"/>';
  8. echo'</form>';
  9.  
  10. if(isset($_POST['znajdz']))
  11. {
  12. $tytul = $_POST['tytul'];
  13. $autor = $_POST["autor"];
  14. $tytul = ucfirst(strtolower($tytul));
  15. $autor = ucfirst(strtolower($autor));
  16. $connection = mysql_connect('localhost','xxxx','xxxx','xxxx');
  17. mysql_select_db ('xxxx');
  18. if(empty($tytul) || empty($autor)) {
  19. die("Formularz wypełniony niepoprawnie! Nie można wyświetlić wyników wyszukiwania!");
  20. }
  21. $zapytanie = mysql_query("SELECT `tytul`,`autor` FROM `publications` WHERE `tytul` LIKE '%$tytul%' AND `autor` LIKE '%$autor%' ") or die(mysql_error());
  22.  
  23.  
  24. echo "<table cellpadding='1' border='1'>";
  25. echo "<tr>";
  26. echo "<td> tytul </td>";
  27. echo "<td> autor </td>";
  28. echo "<tr>";
  29. while( $wiersz = mysql_fetch_array($zapytanie) )
  30. {
  31. echo "<tr>";
  32. echo "<td>".$wiersz['tytul']."</td>";
  33. echo "<td>".$wiersz['autor']."</td>";
  34. echo "<tr>";
  35.  
  36. }
  37. echo "</table>";
  38.  
  39.  
  40. mysql_close($connection);
  41. }
  42.  
  43. ?>
darko
Zamień || na &&
albo:

  1. if($tytul == "" && $autor == "") {
  2. die("Formularz wypełniony niepoprawnie! Nie można wyświetlić wyników wyszukiwania!");
  3. }


albo

  1. if(strlen($tytul) == 0 && strlen($autor) == 0) {
  2. die("Formularz wypełniony niepoprawnie! Nie można wyświetlić wyników wyszukiwania!");
  3. }


a już najlepiej by było tak:
  1. $query = "SELECT ";
  2.  
  3. if(empty($tytul) && empty($autor)) {
  4. die("Formularz wypełniony niepoprawnie! Nie można wyświetlić wyników wyszukiwania!");
  5. }
  6. else {
  7. if(empty($tytul)) {
  8. $query .= "autor FROM `publications` WHERE autor LIKE '%$autor%'";
  9. }
  10. elseif(empty($autor)) {
  11. $query .= "tytul FROM `publications` WHERE tytul LIKE '%$tytul%'";
  12. } else {
  13. $query .= "autor, tytul from publications WHERE autor LIKE '%$autor%' AND tytul LIKE '%$tytul%'";
  14. }
  15. }
  16. // i dalej:
  17. $zapytanie = mysql_query($query) or die(mysql_error());
Michał90
Zamieniłem na && i działa.

ale jeśli wpisze błędną nazwe, której na 100% nie ma w bazie to wyświetla mi tabele tytul autor jak zrobić, żeby był komunikat odpowiedni ?

dałem tak:
  1. <?
  2. echo "<table cellpadding='1' border='1'>";
  3. echo "<tr>";
  4. echo "<td>nie ma w bazie</td>";
  5. echo "<tr>";
  6. while( $wiersz = mysql_fetch_array($zapytanie) )
  7. {
  8. echo "<td> tytul </td>";
  9. echo "<td> autor </td>";
  10. echo "<tr>";
  11. echo "<td>".$wiersz['tytul']."</td>";
  12. echo "<td>".$wiersz['autor']."</td>";
  13. echo "<tr>";
  14.  
  15. }
  16. echo "</table>";
  17. ?>


to wyświetla, że nie ma ale jak wpisze poprawną nazwe to też wyświetla, że nie ma tongue.gif


A jak do tego dorobić jeszcze stronnictwo czyli podział na strony ?

Powiedzmy na stronie po 5 artykułów dalsza część na 2 stronie itd. ?

Pozdrawiam
Armstrong
mysql_num_rows i dla stronnicowania limit w zapytaniu
Michał90
Mam taki błąd:
Warning: mysqli_query() expects at least 2 parameters, 1 given in /home/user/domains/domena.pl/public_html/th/index.php on line 52

Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, null given in /home/user/domains/domena.pl/public_html/th/index.php on line 53


A oto kod:
  1. <?php
  2. $na_stronie = 5; //Ilość wpisów wyświetlanych na jedną stronę
  3. $s = (int)$_GET['s'];
  4. if ($_GET['id'] && $_GET['uri']){
  5. $id = intval($_GET['id']);
  6. $uri = urldecode($_GET['uri']);
  7. header('Location:http://www.strona.pl/'.$id.'/'.$uri.'.html');
  8. }
  9.  
  10. $db = new mysqli('localhost','xxxx','xxxxx','xxxx');
  11. mysqli_query($db,'SET NAMES `latin2`');
  12. $wykonaj=mysqli_query("SELECT * FROM publications");
  13. $znaleziono=mysqli_num_rows($wykonaj);
  14. if(empty($s)) { $s=0; }
  15. $sql = mysqli_query($db,'SELECT * FROM `publications` WHERE `CID`=2129 LIMIT '.($s).','.$na_stronie.'');
  16. while ($row = mysqli_fetch_array($sql)) {
  17. echo '<div class="post">';
  18. echo '<div class="l"> <a href='.$row['link'].' title='.$row['uri'].'><img src='.$row['img'].' alt="" /></a> </div>';
  19. echo '<div class="r">';
  20. echo '<h2><a href='.$row['link'].' title='.$row['uri'].'>'.$row['tytul'].'</a></h2>';
  21. echo '<p>'.$row['opis'].'</p>';
  22. echo '<p><b>Opinie </b></p>';
  23. echo '<p class="details"><b>Autor: </b>'.$row['autor'].' | <b>ISBN: </b>'.$row['isbn'].' | <b>Cena: </b> '.$row['cena'].' zł</p>';
  24. echo '<p class="comments"><a href='.$row['link'].'>Kup</a></p>';
  25. echo '</div>';
  26. echo '</div>';
  27. }
  28. if($znaleziono>$na_stronie)
  29. {
  30. echo '<center>Strona ';
  31. for($i=0; $i<ceil($znaleziono/$na_stronie); $i++)
  32. echo '<a href="index.php?s='.($i*$na_stronie).'">'.($i+1).'</a> | ';
  33. echo '</center><br />';
  34. }
  35.  
  36. ?>
Armstrong
  1. $wykonaj=mysqli_query($db,"SELECT * FROM publications");
  2. $znaleziono=mysqli_num_rows($wykonaj);


W linii 12 -13 zmień na to co napisałem powyżej
Michał90
dzięki za pomoc smile.gif

Dostajecie + smile.gif na ten Nowy 2010 Rok biggrin.gif

Pozdrawiam
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.