Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP/MySQl]
Forum PHP.pl > Forum > PHP
btllPe
Witam, otóż napisałem taki skrypt bazy absolwentów szkoły:

  1. <?php
  2.  
  3. // parametry serwera
  4. $serwer = "localhost"; // nazwa serwera mysql
  5. $login = "****"; // login do bazy
  6. $haslo = "****"; // haslo do bazy
  7. $baza = "****"; // nazwa bazy
  8. $tabela = "absolwenci"; // nazwa tabeli
  9.  
  10.  
  11.  
  12. $rocznik = $_POST['rocznik'];
  13. $imie = $_POST['imie'];
  14. $nazwisko = $_POST['nazwisko'];
  15. $klasa = $_POST['klasa'];
  16.  
  17.  
  18.  
  19. // łączenie z bazą
  20. if (mysql_connect($serwer, $login, $haslo) and mysql_select_db($baza)) {
  21.  
  22.  
  23. if(empty($_GET['imie']) && empty($_GET['nazwisko']) && empty($_GET['klasa']) && empty($_GET['rocznik'])) {
  24.  
  25. $wynik = mysql_query("SELECT * FROM absolwenci ORDER BY nazwisko, klasa ASC")
  26.  
  27. or die("Wystąpił błąd w zapytaniu");
  28.  
  29. } else
  30.  
  31.  
  32. $wynik = mysql_query("SELECT * FROM absolwenci WHERE imie ='$imie' AND nazwisko ='$nazwisko' AND klasa ='$klasa' AND rocznik ='$rocznik' ORDER BY nazwisko, klasa ASC")
  33.  
  34. or die("Wystąpił błąd w zapytaniu");
  35.  
  36.  
  37. $wynik = mysql_query("SELECT * FROM absolwenci WHERE imie ='$imie' OR nazwisko ='$nazwisko' OR klasa ='$klasa' OR rocznik ='$rocznik' ORDER BY nazwisko, klasa ASC")
  38.  
  39. or die("Wystąpił błąd w zapytaniu");
  40.  
  41. }
  42. else echo "Nie można połączyć się z bazą danych!";
  43.  
  44.  
  45. // wyświetlany wyniki zapytania
  46. while($rek = mysql_fetch_array($wynik)) {
  47.  
  48.  
  49.  
  50.  
  51. echo $rek['nazwisko']."";
  52.  
  53. echo $rek['imie']."";
  54.  
  55. echo $rek['rocznik']."";
  56.  
  57. echo $rek['klasa']."<br />";
  58.  
  59. }
  60.  
  61.  
  62.  
  63. ?>


Mianowicie chciałem, aby wyszukiwał absolwentów wg wprowadzonych bądź wybranych danych w polach wyszukiwania. I mniej więcej to funkcjonuje z tym, że jeśli wpiszę np. Michał i wybiorę rocznik - dajmy na to 2000, to wyskakują mi wszyscy o imieniu Michał + wszyscy z rocznika 2000. Drugi problem - co należy zrobić aby zawartość całej tabeli wyświetlała się przed samym szukaniem tzn. jak przejdę na stronę z szukaniem to pod formularzem mam wyświetloną tabelę z wszystkimi rekordami. Jakieś pomysły ? Z góry dziękuję za wszelką pomoc. Pozdrawiam.

P.S - Tematy na forum, które są tematycznie związane z moim postem, niewiele mi pomogły.
Blame
Co to pierwszego to zauważ, że nadpisujesz sobie zmienną $wynik w else. Zmień drugie wynik na np. wynik1 powinno działać. A drugi problem jest banalnie prosty, po prostu na stronie gdzie masz formularz robisz sobie połączenie za pomocą mysql_query tyle że z ('SELECT * FROM absolwenci') i to wyświetlasz za pomocą while i mysql_fetch_array. Z resztą tak samo jak w tym skrypcie.

EDIT: Acha i jeszcze na twoim zainteresowałbym się LIKE bo co jeśli ktoś za miast nazwiska Kowalski wpisze kowalski?
btllPe
Daję pomógł i zabieram się za poprawki.
A co do LIKE. Jego użycie w tym przypadku jest chyba niekonieczne, ponieważ jeśli wpiszę "Kowalski" lub " kowalski" to pobierane są te same rekordy. I tak w każdym przypadku. Pozdrawiam. Dzięki.


---Edit---

Blame, kurcze nie mogę sobie poradzić. Byłbyś tak łaskaw i napisał mi, co i jak ? Po kolei ? ;] Z góry dziękuje.
Blame
Od tego jestem smile.gif Nie napisałeś czego nie rozumiesz więc opiszę obydwa zagadnienia. Pierwsze to nadpisywanie w twoim skrypcie zmiennej $wynik, oto fragment:
  1. else
  2.  
  3. $wynik = mysql_query("SELECT * FROM absolwenci WHERE imie ='$imie' AND nazwisko ='$nazwisko' AND klasa ='$klasa' AND rocznik ='$rocznik' ORDER BY nazwisko, klasa ASC") //to dzięki AND wyświetli ci // to co chcesz, ponieważ sprawdza czy wszystkie pola pasują.
  4.  
  5. or die("Wystąpił błąd w zapytaniu");
  6.  
  7.  
  8. $wynik1 = mysql_query("SELECT * FROM absolwenci WHERE imie ='$imie' OR nazwisko ='$nazwisko' OR klasa ='$klasa' OR rocznik ='$rocznik' ORDER BY nazwisko, klasa ASC") // to wyświetli ci każdy wiersz //w którym pasuje chociaż jeden warunek (OR), więc zmieniłem nazwę zmiennej na $wynik1 żeby nie nadpisywała tej dobrej.
  9.  
  10. or die("Wystąpił błąd w zapytaniu");
  11.  
  12. }
  13. else echo "Nie można połączyć się z bazą danych!";
  14.  
  15.  
  16. // wyświetlany wyniki zapytania
  17. while($rek = mysql_fetch_array($wynik)) {
  18.  
  19.  
  20.  
  21.  
  22. echo $rek['nazwisko']."";
  23.  
  24. echo $rek['imie']."";
  25.  
  26. echo $rek['rocznik']."";
  27.  
  28. echo $rek['klasa']."<br />";
  29.  
  30. }

A teraz druga sprawa czyli wyświetlenie wszystkich absolwentów. W miejscu gdzie mają byś wyświetlone dajesz sobie:
  1. $query = mysql_query("SELECT * FROM absolwenci ORDER BY nazwisko, klasa ASC"); // to wybierze wszystkie rekordy z tabeli absolwenci i je posortuje.
  2.  
  3. while($rekord = mysql_fetch_array($query)) { //wyświetlamy to co pobraliśmy
  4.  
  5. echo $rekord['nazwisko']."";
  6.  
  7. echo $rekord['imie']."";
  8.  
  9. echo $rekord['rocznik']."";
  10.  
  11. echo $rekord['klasa']."<br />";
  12.  
  13. }

Jeśli chcesz aby dane były w tabeli to dodaj znaczniki <td> i <tr>.
Mam nadzieje że dobrze ci to wyjaśniłem, w razie problemów pisz.
btllPe
Dostosowałem się do Twych zaleceń. Tylko, że teraz wszystkie rekordy są obecne cały czas nawet po wyszukaniu (dane wybranego absolwenta pokazują się pod tabelą z rekordami). Co do wyszukiwania - obecnie, po zmianie, muszę wpisywać wszystkie dane by szukanie dało jakiś skutek - moim założeniem było, że obojętnie które pole uzupełnię, lub uzupełnię kilka/wszystkie, wyszukiwanie dojdzie do skutków. Masz jakieś pomysły co do tego ? ;]
Dane mam w tabeli, tylko żeby było to co najważniejsze przesłałem sam kod PHP.
Blame
Hmm... co do twojego problemu z wyszukiwarką to ci nie pomogę bo moja wiedza o MySQL nie jest aż tak dobra. Jednak znam rozwiązanie twojego drugiego problemu.
Rozumiem, że wprowadzasz dane za pomocą jakiegoś formularza, więc musisz mieć przycisk submit. Nadaj mu atrybut name np. name="submit" i teraz robisz tak:
  1. if (isset($_POST['submit'])) {
  2. //szukasz absolwentów
  3. }
  4. else{
  5. //wyświetlasz wszystkich
  6. }
btllPe
Hehe. Ja z PHP średnio początkujący haha.gif i MySQL. Ale za to mistrz (x)Html haha.gif
Tak dane są wprowadzane za pomocą formularza. Przycisk oczywiście mam. Dodam proponowany przez Ciebie kod i zobaczy się czy ruszy. ;]

--EDIT---

Ok zrobiłem po swojemu ale nadal nie mogę zrobić nic z tym wyszukiwaniem. Czy mógłby ktoś mi pomóc ?

  1.  
  2. <?PHP
  3.  
  4. //dane do bazy
  5.  
  6. $rocznik = $_POST['rocznik'];
  7. $imie = $_POST['imie'];
  8. $nazwisko = $_POST['nazwisko'];
  9. $klasa = $_POST['klasa'];
  10.  
  11.  
  12.  
  13. // łączenie z bazą
  14. if (mysql_connect($serwer, $login, $haslo) and mysql_select_db($baza)) {
  15.  
  16. $wynik = mysql_query("SELECT * FROM absolwenci WHERE imie ='$imie' AND nazwisko ='$nazwisko' AND klasa ='$klasa' AND rocznik ='$rocznik' ORDER BY nazwisko, klasa ASC")
  17.  
  18. or die("Wystąpił błąd w zapytaniu");
  19.  
  20. $wynik = mysql_query("SELECT * FROM absolwenci WHERE imie ='$imie' OR nazwisko ='$nazwisko' OR klasa ='$klasa' OR rocznik ='$rocznik' ORDER BY nazwisko, klasa ASC")
  21.  
  22. or die("Wystąpił błąd w zapytaniu");
  23.  
  24. $wynik = mysql_query("SELECT * FROM absolwenci WHERE imie ='$imie' OR nazwisko ='$nazwisko' AND klasa ='$klasa' OR rocznik ='$rocznik' ORDER BY nazwisko, klasa ASC")
  25.  
  26. or die("Wystąpił błąd w zapytaniu");
  27.  
  28. $wynik = mysql_query("SELECT * FROM absolwenci WHERE imie ='$imie' AND nazwisko ='$nazwisko' OR klasa ='$klasa' AND rocznik ='$rocznik' ORDER BY nazwisko, klasa ASC")
  29.  
  30. or die("Wystąpił błąd w zapytaniu");
  31.  
  32. $wynik = mysql_query("SELECT * FROM absolwenci WHERE imie ='$imie' ORDER BY nazwisko, klasa ASC")
  33.  
  34. or die("Wystąpił błąd w zapytaniu");
  35. $wynik = mysql_query("SELECT * FROM absolwenci WHERE nazwisko ='$nazwisko' ORDER BY nazwisko, klasa ASC")
  36.  
  37. or die("Wystąpił błąd w zapytaniu");
  38. $wynik = mysql_query("SELECT * FROM absolwenci WHERE klasa ='$klasa' ORDER BY nazwisko, klasa ASC")
  39.  
  40. or die("Wystąpił błąd w zapytaniu");
  41. $wynik = mysql_query("SELECT * FROM absolwenci WHERE rocznik ='$rocznik' ORDER BY nazwisko, klasa ASC")
  42.  
  43. or die("Wystąpił błąd w zapytaniu");
  44.  
  45. }
  46. else echo "Nie można połączyć się z bazą danych!";
  47.  
  48.  
  49. // wyświetlany wyniki zapytania
  50. while($rek = mysql_fetch_array($wynik)) {
  51.  
  52.  
  53.  
  54. ?>
  55.  
  56.  
  57. <div id="dane2">
  58. <div id="nazwisko"><?PHP echo $rek['nazwisko'].""; ?></div>
  59.  
  60. <div id="imie"><?PHP echo $rek['imie'].""; ?></div>
  61.  
  62. <div id="rocznik"><?PHP echo $rek['rocznik'].""; ?></div>
  63.  
  64. <div id="klasa"><?PHP echo $rek['klasa']."<br />"; ?></div>
  65.  
  66. </div>
  67.  
  68. <div id="odstep"></div>
  69.  
  70. <?PHP
  71.  
  72.  
  73.  
  74. } // koniec wyszukiwarki
  75.  
  76.  
  77.  
  78.  
  79.  
  80. $query = mysql_query("SELECT * FROM absolwenci ORDER BY nazwisko, klasa ASC"); // to wybierze wszystkie rekordy z tabeli absolwenci i je posortuje.
  81.  
  82.  
  83.  
  84.  
  85. ?>
  86.  
  87. <div id="dane1">
  88.  
  89.  
  90. <div id="nazwisko1">Nazwisko</div>
  91. <div id="imie1">Imię</div>
  92. <div id="rocznik1">Rocznik</div>
  93. <div id="klasa1">Klasa</div>
  94.  
  95. </div>
  96.  
  97. <?PHP
  98.  
  99.  
  100. while($rekord = mysql_fetch_array($query)) { //wyświetlamy to co pobraliśmy
  101.  
  102.  
  103.  
  104. ?>
  105.  
  106.  
  107. <div id="dane">
  108. <div id="nazwisko"><?PHP echo $rekord['nazwisko'].""; ?></div>
  109.  
  110. <div id="imie"><?PHP echo $rekord['imie'].""; ?></div>
  111.  
  112. <div id="rocznik"><?PHP echo $rekord['rocznik'].""; ?></div>
  113.  
  114. <div id="klasa"><?PHP echo $rekord['klasa']."<br />"; ?></div>
  115.  
  116. </div>
  117.  
  118. <?PHP
  119.  
  120. }
  121. ?>
piotr94
każde kolejne zapytanie nadpisuje, i dlatego wyświetli Ci tylko wynik tego ostatniego, czyli
  1. $wynik = mysql_query("SELECT * FROM absolwenci WHERE rocznik ='$roczni.' ORDER BY nazwisko, klasa ASC")

i na serio korzystaj z like
np:
  1. $wynik = mysql_query("SELECT * FROM absolwenci WHERE nazwisko LIKE '$nazwiko' ORDER BY nazwisko, klasa ASC")
Blame
Teraz to trochę zagmatwałeś. Po pierwsze tak jak powiedział mój przedmówca nadpisujesz zmienną po drugie wyświetla ci się wynik i całość czego chciałeś uniknąć. Poszperałem trochę w internecie i znalazłem coś takiego(trochę to przerobiłem):
  1. $sqlstring = "SELECT * FROM absolwenci WHERE ";
  2.  
  3. $pytanie = false;
  4. $lacznik = " and ";
  5.  
  6. if ($_POST['rocznik']!="")
  7. {
  8. $sqlstring .= " rocznik like '%".$_POST['rocznik']."%' " . $lacznik;
  9. $pytanie = true;
  10. }
  11.  
  12. if ($_POST['imie']!="")
  13. {
  14. $sqlstring .= " imie like '%".$_POST['imie']."%' " . $lacznik;
  15. $pytanie =true;
  16.  
  17. }
  18.  
  19. if ($_POST['nazwisko']!="")
  20. {
  21. $sqlstring .= " nazwisko like '%".$_POST['nazwisko']."%' " . $lacznik;
  22. $pytanie =true;
  23.  
  24. }
  25.  
  26. if ($_POST['klasa']!="")
  27. {
  28. $sqlstring .= " klasa like '%".$_POST['klasa']."%' " . $lacznik;
  29. $pytanie =true;
  30.  
  31. }
  32.  
  33. if ($pytanie)
  34. {
  35. $sqlstring = substr($sqlstring, 0,
  36. strlen($sqlstring)-strlen($lacznik)-1);
  37.  
  38. //tutaj wywołanie zapytania sql poprzez mysql_query
  39. }
  40.  
  41. else
  42. {
  43. // akcja gdy nie wypełniono żadnego pola
  44.  
  45. }

Małe objaśnienie: każdy if sprawdza czy wypełnione pole nie jest puste, jeśli tak to dodaje do zmiennej $sqlsting, która jest końcowym zapytaniem do bazy dany fragment i zmienną $lacznik oraz ustawia $pytanie na true. Ostatni if sprawdza czy chociaż jedno pole zostało wypełnione, jeśli tak to z zapytania $sqlsting wycina ostatnie and i następnie przekazujemy je do bazy, jeśli nie to na przykład możemy wyświetlić jakiś komunikat.
piotr94
to będzie działało dokładnie jak kolega chciał
ale mógł sam trochę z tym pogłówkować, bo na 100% by doszedł do tego co robi nie tak
btllPe
Moglibyście powiedzieć mi jak to "wlepić w całość" ?
piotr94
nie powinienem tego robić - spróbuj sam, ale niech Ci będzie, każdy musi od czegoś zacząć haha.gif
  1. <?
  2. $sqlstring = "SELECT * FROM absolwenci WHERE ";
  3.  
  4. $pytanie = false;
  5. $lacznik = " and ";
  6.  
  7. if ($_POST['rocznik']!="")
  8. {
  9. $sqlstring .= " rocznik like '%".$_POST['rocznik']."%' " . $lacznik;
  10. $pytanie = true;
  11. }
  12.  
  13. if ($_POST['imie']!="")
  14. {
  15. $sqlstring .= " imie like '%".$_POST['imie']."%' " . $lacznik;
  16. $pytanie =true;
  17.  
  18. }
  19.  
  20. if ($_POST['nazwisko']!="")
  21. {
  22. $sqlstring .= " nazwisko like '%".$_POST['nazwisko']."%' " . $lacznik;
  23. $pytanie =true;
  24.  
  25. }
  26.  
  27. if ($_POST['klasa']!="")
  28. {
  29. $sqlstring .= " klasa like '%".$_POST['klasa']."%' " . $lacznik;
  30. $pytanie =true;
  31.  
  32. }
  33.  
  34. if ($pytanie)
  35. {
  36. $sqlstring = substr($sqlstring, 0,
  37. strlen($sqlstring)-strlen($lacznik)-1);
  38.  
  39. $query=mysql_query($sqlstring);
  40. while($wynik=mysql_fetch_array($query)){
  41. echo('<div id="dane">'.$wynik['imie'].'i cała reszta danych...</div>');
  42. }
  43. }
  44.  
  45. else
  46. {
  47. $query=mysql_query("SELECT * FROM absolwenci");
  48. while($wynik=mysql_fetch_array($query)){
  49. echo('<div id="dane">'.$wynik['imie'].'i cała reszta danych...</div>');
  50. }
  51. }
  52. ?>
  53. a tu wstaw np. formularz do wyszukiwarki ;-)
  54. <?
  55. }
  56. ?>
btllPe
Dzięki Ci wielkie. Daję pomógł, Temat można zamknąć.
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.