Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP/MySQl], Edycja i sprawdzenie skryptu
btllPe
post 14.11.2009, 13:56:30
Post #1





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 14.11.2009

Ostrzeżenie: (0%)
-----


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.

Ten post edytował btllPe 14.11.2009, 14:00:54
Go to the top of the page
+Quote Post
Blame
post 14.11.2009, 14:22:35
Post #2





Grupa: Zarejestrowani
Postów: 678
Pomógł: 124
Dołączył: 26.09.2009

Ostrzeżenie: (0%)
-----


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?

Ten post edytował Blame 14.11.2009, 14:25:37


--------------------
Go to the top of the page
+Quote Post
btllPe
post 14.11.2009, 15:04:24
Post #3





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 14.11.2009

Ostrzeżenie: (0%)
-----


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.

Ten post edytował btllPe 14.11.2009, 15:52:36
Go to the top of the page
+Quote Post
Blame
post 14.11.2009, 16:25:46
Post #4





Grupa: Zarejestrowani
Postów: 678
Pomógł: 124
Dołączył: 26.09.2009

Ostrzeżenie: (0%)
-----


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.


--------------------
Go to the top of the page
+Quote Post
btllPe
post 14.11.2009, 16:48:26
Post #5





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 14.11.2009

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
Blame
post 14.11.2009, 17:10:35
Post #6





Grupa: Zarejestrowani
Postów: 678
Pomógł: 124
Dołączył: 26.09.2009

Ostrzeżenie: (0%)
-----


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


Ten post edytował Blame 14.11.2009, 17:16:25


--------------------
Go to the top of the page
+Quote Post
btllPe
post 14.11.2009, 17:17:26
Post #7





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 14.11.2009

Ostrzeżenie: (0%)
-----


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


Ten post edytował btllPe 14.11.2009, 19:22:34
Go to the top of the page
+Quote Post
piotr94
post 14.11.2009, 19:50:14
Post #8





Grupa: Zarejestrowani
Postów: 331
Pomógł: 30
Dołączył: 11.11.2008
Skąd: Kraków

Ostrzeżenie: (0%)
-----


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")


--------------------
http://www.piotr94.net21.pl/ - wykonanie stron i serwisów internetowych
Jeśli moje wypowiedzi były dla Ciebie pomocne, kliknij "Pomógł" i odwdzięcz się ;)
Go to the top of the page
+Quote Post
Blame
post 14.11.2009, 20:46:09
Post #9





Grupa: Zarejestrowani
Postów: 678
Pomógł: 124
Dołączył: 26.09.2009

Ostrzeżenie: (0%)
-----


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.


--------------------
Go to the top of the page
+Quote Post
piotr94
post 15.11.2009, 13:24:36
Post #10





Grupa: Zarejestrowani
Postów: 331
Pomógł: 30
Dołączył: 11.11.2008
Skąd: Kraków

Ostrzeżenie: (0%)
-----


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


--------------------
http://www.piotr94.net21.pl/ - wykonanie stron i serwisów internetowych
Jeśli moje wypowiedzi były dla Ciebie pomocne, kliknij "Pomógł" i odwdzięcz się ;)
Go to the top of the page
+Quote Post
btllPe
post 15.11.2009, 23:39:23
Post #11





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 14.11.2009

Ostrzeżenie: (0%)
-----


Moglibyście powiedzieć mi jak to "wlepić w całość" ?
Go to the top of the page
+Quote Post
piotr94
post 16.11.2009, 13:05:06
Post #12





Grupa: Zarejestrowani
Postów: 331
Pomógł: 30
Dołączył: 11.11.2008
Skąd: Kraków

Ostrzeżenie: (0%)
-----


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


Ten post edytował piotr94 16.11.2009, 13:07:11


--------------------
http://www.piotr94.net21.pl/ - wykonanie stron i serwisów internetowych
Jeśli moje wypowiedzi były dla Ciebie pomocne, kliknij "Pomógł" i odwdzięcz się ;)
Go to the top of the page
+Quote Post
btllPe
post 17.11.2009, 21:22:00
Post #13





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 14.11.2009

Ostrzeżenie: (0%)
-----


Dzięki Ci wielkie. Daję pomógł, Temat można zamknąć.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 1.07.2025 - 17:50