Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Closed TopicStart new topic
> [MySQL][PHP]Lista rozwijana - problem
mihal
post
Post #1





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

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


Witam wszystkich.
Nie do końca wiedziałem jaki tytuł wybrać, ale postaram się opisać mój problem. Potrzebuje wykonać małą, prostą aplikacje do zarządzania biblioteką - proste funkcje. Nie poradziłem sobie z wypożyczaniem książki. Sytuacja wygląda tak: w bazie danych mam 3 tabele: czytelnicy(id,imie,nazwisko,pesel), ksiazki (id,tytul,autor) i wypozyczenia(id_wyp,id_ksiazki i id_czytelnika) - wszystko jest ze sobą połączone i działa poprawnie(przez phpmyadmina wpisałem przykładowe wypożyczenia i działa). W aplikacji mam dwie listy rozwijane, które pobierają dane z moich tabel oraz pola typu radio. Przykładowo: z listy wybieram Jana Kowalskiego i Pana Tadeusza, zaznaczam opcje wypożycz no i zatwierdzam - książka powinna być wypożyczona, ale nie wiem(albo nie umiem tego zrobić bo szukałem sporo w internecie) połączyć czytelnika i książki z wypożyczeniem.
Pokaże prawie cały kod, to będzie chyba najprosciej:
  1. <?php
  2. require "connection.php";
  3. connection();
  4. ?>
  5. </div>
  6. <div id="tabela">
  7. <?php
  8. $qc = mysql_query ('Select * FROM CZYTELNICY');
  9. echo "<select name = 'czytelnicy'></option>";
  10. while($wiersz_danych = mysql_fetch_array($qc))
  11. {
  12. echo "<option value = $wiersz_danych[ID_CZYTELNIKA]>$wiersz_danych[IMIE] $wiersz_danych[NAZWISKO] </option>";
  13. }
  14. echo "</select>";
  15.  
  16. $qk = mysql_query ('Select * FROM KSIAZKI');
  17. echo "<select name = ksiazka value=''></option>";
  18. while($wiersz_danych = mysql_fetch_array($qk))
  19. {
  20. echo "<option value = $wiersz_danych[ID_KSIAZKI]>$wiersz_danych[TYTUL] - $wiersz_danych[AUTOR]</option>";
  21. }
  22. echo "</select>";
  23. ?>
  24.  
  25. <?php
  26. if ($_SERVER['REQUEST_METHOD'] == 'POST'){
  27. $w_status = 'unchecked';
  28. $wyp_status = 'unchecked';
  29. $k_status = 'unchecked';
  30. $odd_status = 'unchecked';
  31. $ww_status = 'unchecked';
  32.  
  33. if (isset($_POST['Wykonaj'])){
  34. $selected_radio = $_POST['button'];
  35. }
  36. }
  37. ?>
  38. <br>
  39. <form action= "index.php" method="POST">
  40. <input type="Radio" name="button" value="wszyscy" <?php print $w_status ; ?>>Wyświetl czytelniów </br>
  41. <input type="Radio" name="button" value="ksiazki" <?php print $k_status; ?>>Wyświetl wszystkie książki </br>
  42. <input type="Radio" name="button" value="wypozyczenie" <?php print $wyp_status ; ?>>Wypożycz </br>
  43. <input type="Radio" name=:"button" value="oddanie"<?php print $odd_status; ?>>Oddaj</br>
  44. <input type="Radio" name="button" value="ww" <?php print $ww_status; ?>>Wyswietl wypozyczenia</br>
  45. <input type="submit" name="Wykonaj" value="Wykonaj"><br><br></form>
  46.  
  47. <?php
  48. if($selected_radio == 'wszyscy'){
  49. $w_status = 'checked';
  50.  
  51. $query = "SELECT * FROM czytelnicy";
  52. $dane = mysql_query($query) or die ("wystapily problemy");
  53. echo "<table><tr><td>Nazwisko</td><td>Imie</td><td>Pesel</td></tr>";
  54. while($wiersz_danych = mysql_fetch_array($dane)){
  55. echo "<tr>";
  56. echo "<td>".$wiersz_danych[NAZWISKO]."</td>";
  57. echo "<td>".$wiersz_danych[IMIE]."</td>";
  58. echo "<td>".$wiersz_danych[PESEL]."</td>";
  59. }
  60. echo "</tr></table>";
  61. }
  62.  
  63. if($selected_radio =='ksiazki'){
  64. $k_status = 'checked';
  65.  
  66. $query = "SELECT * FROM KSIAZKI";
  67. $dane = mysql_query($query) or die("wystapily problemy");
  68. echo "<table><tr><td>Tytul</td><td>Autor</td></tr>";
  69. while($wiersz_danych = mysql_fetch_array($dane)){
  70. echo "<tr>";
  71. echo "<td>".$wiersz_danych[TYTUL]."</td>";
  72. echo "<td>".$wiersz_danych[AUTOR]."</td>";
  73. }
  74. echo "</tr></table>";
  75. }
  76.  
  77. if($selected_radio =='wypozyczenie'){
  78. $wyp_status = 'checked';
  79. $query = "INSERT INTO WYPOZYCZENIA VALUES (NULL, '.$_POST[czytelnicy]', '.$_POST[ksiazka]') ";
  80. echo "Wybrano: ".$_POST['czytelnicy'];
  81. }
  82.  
  83. if($selected_radio == 'ww'){
  84. $ww_status='checked';
  85.  
  86. $query = "SELECT C.NAZWISKO,C.IMIE, K.TYTUL FROM WYPOZYCZENIA W
  87. LEFT JOIN CZYTELNICY C ON C.ID_CZYTELNIKA = W.ID_CZYTELNIKA
  88. LEFT JOIN KSIAZKI K ON K.ID_KSIAZKI = W.ID_KSIAZKI";
  89. $dane = mysql_query($query) or die("wystapily problemy");
  90. echo "<table><tr><td>Nazwisko</td><td>Imie</td><td>Tytul</td></tr>";
  91. while($wiersz_danych = mysql_fetch_array($dane)){
  92. echo "<tr>";
  93. echo "<td>".$wiersz_danych[NAZWISKO]."</td>";
  94. echo "<td>".$wiersz_danych[IMIE]."</td>";
  95. echo "<td>".$wiersz_danych[TYTUL]."</td>";
  96. }
  97. echo "</tr></table>";
  98. }
  99. ?>
  100. </div>
  101.  


Możliwe, że coś w końcu namieszałem bo troszke zmieniałem kod szukając rozwiązania. Liczę na wasze wskazówki:)

Pozdrawiam
Go to the top of the page
+Quote Post
Kostek.88
post
Post #2





Grupa: Zarejestrowani
Postów: 376
Pomógł: 47
Dołączył: 23.08.2007
Skąd: Warszawa

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


A wiec...

1) po co Ci w 17. linijce value='' ? Przeciez Twoje value ma byc pobrane z listy rozwijanej, tj. ID

2) dlaczego w 79. linijce wstawias ID, ID_CZYTELNIKA, ID_KSIAZKI zamiast ID, ID_KSIAZKI, ID_CZYTELNIKA? Wyzej podales inna kolejnosc kolumn

3) co robia linijki 25. - 37.?

4) nigdy nie uzywalem $_SERVER['REQUEST_METHOD'] == 'POST', co najwyzej:

  1. if(count($_POST) > 0) {
  2. // blok instrukcji
  3. }


Ale nie neguje Twojego rozwiazania, po prostu nie wiem jak sie zachowuje

5) Dlaczego dolaczasz LEFT JOINem tabele czytelnikow i wypozyczen? A co jesli 1 czytelnik ma wiele wypozyczen? Wtedy jest relacja 1-do-wiele i potrzebny jest RIGHT JOIN. Natomiast jesli chodzi o tabele ksiazki... to... tak - LEFT JOIN, zgadza sie. Dolaczasz do tabeli wypozyczenia, bo w 1 wypozyczeniu masz 1 ksiazke, czyli relacja 1-do-1. Chociaz niektorzy powiedza, ze w 1 wypozyczeniu mozna miec kilka ksiazek, ale z tego co zrozumialem, Twoja aplikacja pozwala na wypozyczenie 1 ksiazki, a potem ewentualnie powrot do poprzedniej strony i wypozyczenie na tego samego uzytkownika innej pozycji. ALE kazda taka operacja traktowana jest w bazie jako osobny wpis/rekord.

W JOIN'ach moglem sie pomylic, gdyz pisze ten post na szybko (IMG:style_emoticons/default/wink.gif)

Najlepiej bedzie jesli otworzysz phpMyAdmin'a, otworzysz okienko zapytania i poprobujesz tak, zeby Ci ladna tabelka wyszla ze wszystkimi danymi jakich sobie zyczysz. Przy RIGHT JOIN, o ile mnie pamiec nie zawodzi, sa powtorzenia rekordow i wtedy przydaje sie polecenie GROUP BY. W kazdym razie jak wyjdzie Ci wszystko w okienku zapytania to juz polowa sukcesu (IMG:style_emoticons/default/smile.gif)

6) w celach porzadkowych:
konstrukcje takie jak...
  1. <?php print $w_status ; ?>


...mozesz z powodzeniem zastapic...

  1. <?=$w_status;?>


Powodzenia (IMG:style_emoticons/default/smile.gif)

Ten post edytował Kaloryfer 3.11.2011, 02:05:28
Go to the top of the page
+Quote Post
mihal
post
Post #3





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

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


Dzięki za zainteresowanie. Zastosowałem się do wskazówek, ale w dalszym ciągu nie rozwiązuje to mojego problemu. Przy wybraniu opcji wypożycz, wypożyczenie nie zostaje dodane do tabeli wypozyczenia.
  1. if($selected_radio =='wypozyczenie'){
  2. $wyp_status = 'checked';
  3. $query = "INSERT INTO WYPOZYCZENIA VALUES (NULL, '.$_POST[ksiazka]', '.$_POST[czytelnicy]') ";
  4. echo "Wybrano: ".$_POST['czytelnicy'];
  5. }


Reszta kodu, trochę zmieniłem, według wskazówek:
  1. <?php
  2. $qc = mysql_query ('Select * FROM CZYTELNICY');
  3. echo "<select name = 'czytelnicy'></option>";
  4. while($wiersz_danych = mysql_fetch_array($qc))
  5. {
  6. echo "<option value = $wiersz_danych[ID_CZYTELNIKA]>$wiersz_danych[IMIE] $wiersz_danych[NAZWISKO] </option>";
  7. }
  8. echo "</select>";
  9.  
  10. $qk = mysql_query ('Select * FROM KSIAZKI');
  11. echo "<select name = 'ksiazka' ></option>";
  12. while($wiersz_danych = mysql_fetch_array($qk))
  13. {
  14. echo "<option value = $wiersz_danych[ID_KSIAZKI]>$wiersz_danych[TYTUL] - $wiersz_danych[AUTOR]</option>";
  15. }
  16. echo "</select>";
  17. ?>
  18.  
  19.  
  20. <br>
  21. <form action= "index.php" method="POST">
  22. <input type="Radio" name="button" value="wszyscy" <?=$w_status ; ?>Wyświetl czytelniów </br>
  23. <input type="Radio" name="button" value="ksiazki" <?=$k_status; ?>Wyświetl wszystkie książki </br>
  24. <input type="Radio" name="button" value="wypozyczenie" <?=$wyp_status ; ?>Wypożycz </br>
  25. <input type="Radio" name=:"button" value="oddanie"<?=$odd_status; ?>Oddaj</br>
  26. <input type="Radio" name="button" value="ww" <?=$ww_status; ?>Wyswietl wypozyczenia</br>
  27. <input type="submit" name="Wykonaj" value="Wykonaj"><br><br></form>
  28.  
  29. <?php
  30.  
  31. if (count($_POST) > 0) {
  32.  
  33. if (isset($_POST['Wykonaj'])){
  34. $selected_radio = $_POST['button'];
  35. }
  36.  
  37.  
  38. if($selected_radio =='wypozyczenie'){
  39. $wyp_status = 'checked';
  40. $query = "INSERT INTO WYPOZYCZENIA VALUES (NULL, '.$_POST[ksiazka]', '.$_POST[czytelnicy]') ";
  41. echo "Wybrano: ".$_POST['czytelnicy'];
  42. }
  43. }
  44.  


Ten post edytował mihal 3.11.2011, 09:21:59
Go to the top of the page
+Quote Post
nospor
post
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Nie wnikam w kod, nie czytam tematu (bo za długi (IMG:style_emoticons/default/wink.gif) ) ale sam chyba przyznasz, że takie coś:
<select name = ksiazka value=''></option>
to delikatnie rzecz mówiąc jest źle (IMG:style_emoticons/default/wink.gif)
Go to the top of the page
+Quote Post
Kostek.88
post
Post #5





Grupa: Zarejestrowani
Postów: 376
Pomógł: 47
Dołączył: 23.08.2007
Skąd: Warszawa

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


1) To chcesz powiedziec, ze nic nie dodaje do tabeli? Zadnego rekordu, nawet z brakujacymi danymi? A nie masz bledu w zapytaniu? Zobacz sobie or die i mysl_error()

2) <br /> a nie </br> (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
mihal
post
Post #6





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

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


Dokładnie, nie dodaje rekordu do tabeli wypożyczenia. Mogłem od początku o tym mówić - może byłoby prościej ale wydaje mi się, że błąd jest tutaj:
  1. $query = "INSERT INTO WYPOZYCZENIA VALUES (NULL, '.$_POST[ksiazka]', '.$_POST[czytelnicy]') ";

Czy to faktycznie pobiera z listy rozwijanej tytuł książki i czytelnika...

Zmieniłem tak jak pisałeś na
  1. $query = "INSERT INTO WYPOZYCZENIA VALUES (NULL, '.$_POST[ksiazka]', '.$_POST[czytelnicy]') ";
  2. $dane = mysql_query($query) or die('wystapily problemy'.mysql_error());
  3. echo "Wybrano: ".$_POST['czytelnicy'];

i dalej nic się nie wyświetla ani nic się nie dodaje. Nie ma błędu w zapytaniu.

Pozdrawiam
Go to the top of the page
+Quote Post
tomm
post
Post #7





Grupa: Zarejestrowani
Postów: 142
Pomógł: 28
Dołączył: 7.04.2008

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


a daj
  1. print_r($_POST);

zamiast wywoływać zapytanie do BD
Go to the top of the page
+Quote Post
mihal
post
Post #8





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

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


coś takiego: ?
  1. if($selected_radio =='wypozyczenie'){
  2. $wyp_status = 'checked';
  3. $query = "INSERT INTO WYPOZYCZENIA VALUES (NULL, '.$_POST[ksiazka]', '.$_POST[czytelnicy]') ";
  4. /*$dane = mysql_query($query) or die('wystapily problemy'.mysql_error());*/
  5. print_r($_POST);
  6. echo "Wybrano: ".$_POST['czytelnicy'];
  7. }


W takim wypadku w miejscu wyniku wyświetla:
Array ( [button] => wypozyczenie [Wykonaj] => Wykonaj ) Wybrano:
Go to the top of the page
+Quote Post
nospor
post
Post #9





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Przecież selecty z opcjami robisz poza formularzem... weź się zapoznaj wpierw z podstawami obsługi formularzy, a potem bierz się za coś trudniejszego.
I dodatkowo zapoznaj się z tematem:
Temat: Jak poprawnie zada pytanie
Go to the top of the page
+Quote Post
tomm
post
Post #10





Grupa: Zarejestrowani
Postów: 142
Pomógł: 28
Dołączył: 7.04.2008

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


no to masz odpowiedź, w tablicy POST nie ma wybranych wartości z selectów. Usunąłeś, jak pisal nospor, zbędne </option>?
Go to the top of the page
+Quote Post
mihal
post
Post #11





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

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


tak, usunąłem, teraz kod wygląda tak :
  1. <?php
  2. $qc = mysql_query ('Select * FROM CZYTELNICY');
  3. echo "<select name = 'czytelnicy'>";
  4. while($wiersz_danych = mysql_fetch_array($qc))
  5. {
  6. echo "<option value = $wiersz_danych[ID_CZYTELNIKA]>$wiersz_danych[IMIE] $wiersz_danych[NAZWISKO] </option>";
  7. }
  8. echo "</select>";
  9.  
  10. $qk = mysql_query ('Select * FROM KSIAZKI');
  11. echo "<select name = 'ksiazka' >";
  12. while($wiersz_danych = mysql_fetch_array($qk))
  13. {
  14. echo "<option value = $wiersz_danych[ID_KSIAZKI]>$wiersz_danych[TYTUL] - $wiersz_danych[AUTOR]</option>";
  15. }
  16. echo "</select>";
  17. ?>
  18.  
  19. <form action= "index.php" method="POST">
  20. <input type="Radio" name="button" value="wszyscy" <?=$w_status ; ?>Wyświetl czytelniów <br/>
  21. <input type="Radio" name="button" value="ksiazki" <?=$k_status; ?>Wyświetl wszystkie książki <br/>
  22. <input type="Radio" name="button" value="wypozyczenie" <?=$wyp_status ; ?>Wypożycz <br/>
  23. <input type="Radio" name=:"button" value="oddanie"<?=$odd_status; ?>Oddaj<br/>
  24. <input type="Radio" name="button" value="ww" <?=$ww_status; ?>Wyswietl wypozyczenia<br/>
  25. <input type="submit" name="Wykonaj" value="Wykonaj"><br><br></form>
  26.  
  27. <?php
  28.  
  29. if (count($_POST) > 0) {
  30.  
  31. if (isset($_POST['Wykonaj'])){
  32. $selected_radio = $_POST['button'];
  33. }
  34.  
  35. if($selected_radio == 'wszyscy'){
  36. $w_status = 'checked';
  37.  
  38. $query = "SELECT * FROM czytelnicy";
  39. $dane = mysql_query($query) or die ("wystapily problemy");
  40. echo "<table><tr><td>Nazwisko</td><td>Imie</td><td>Pesel</td></tr>";
  41. while($wiersz_danych = mysql_fetch_array($dane)){
  42. echo "<tr>";
  43. echo "<td>".$wiersz_danych[NAZWISKO]."</td>";
  44. echo "<td>".$wiersz_danych[IMIE]."</td>";
  45. echo "<td>".$wiersz_danych[PESEL]."</td>";
  46. }
  47. echo "</tr></table>";
  48. }
  49.  
  50. if($selected_radio =='ksiazki'){
  51. $k_status = 'checked';
  52.  
  53. $query = "SELECT * FROM KSIAZKI";
  54. $dane = mysql_query($query) or die("wystapily problemy");
  55. echo "<table><tr><td>Tytul</td><td>Autor</td></tr>";
  56. while($wiersz_danych = mysql_fetch_array($dane)){
  57. echo "<tr>";
  58. echo "<td>".$wiersz_danych[TYTUL]."</td>";
  59. echo "<td>".$wiersz_danych[AUTOR]."</td>";
  60. }
  61. echo "</tr></table>";
  62. }
  63.  
  64. if($selected_radio =='wypozyczenie'){
  65. $wyp_status = 'checked';
  66. $query = "INSERT INTO WYPOZYCZENIA VALUES (NULL, '.$_POST[ksiazka]', '.$_POST[czytelnicy]') ";
  67. /*$dane = mysql_query($query) or die('wystapily problemy'.mysql_error());*/
  68. print_r($_POST);
  69. echo "Wybrano: ".$_POST['czytelnicy'];
  70. }
  71.  
  72. if($selected_radio == 'ww'){
  73. $ww_status='checked';
  74.  
  75. $query = "SELECT C.NAZWISKO,C.IMIE, K.TYTUL FROM WYPOZYCZENIA W
  76. RIGHT JOIN CZYTELNICY C ON C.ID_CZYTELNIKA = W.ID_CZYTELNIKA
  77. LEFT JOIN KSIAZKI K ON K.ID_KSIAZKI = W.ID_KSIAZKI WHERE K.TYTUL IS NOT NULL";
  78. $dane = mysql_query($query) or die("wystapily problemy");
  79. echo "<table><tr><td>Nazwisko</td><td>Imie</td><td>Tytul</td></tr>";
  80. while($wiersz_danych = mysql_fetch_array($dane)){
  81. echo "<tr>";
  82. echo "<td>".$wiersz_danych[NAZWISKO]."</td>";
  83. echo "<td>".$wiersz_danych[IMIE]."</td>";
  84. echo "<td>".$wiersz_danych[TYTUL]."</td>";
  85. }
  86. echo "</tr></table>";
  87. }
  88. }
  89. ?>
Go to the top of the page
+Quote Post
tomm
post
Post #12





Grupa: Zarejestrowani
Postów: 142
Pomógł: 28
Dołączył: 7.04.2008

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


nadal selecty masz poza formem
Go to the top of the page
+Quote Post
nospor
post
Post #13





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Zacznij czytać co się do Ciebie pisze: napisałem ci wyraźnie: masz pola SELECT poza formem, wiec nic dziwngo ze ci nie działa.
To juz drugi raz w tym temacie jak ignorujesz co ci piszę. Nie wiem, może jesteś na mnie uczulony. Nie wnikam. Ale jak jeszcze raz będziesz tak to olewać, to zamknę temat. Skoro ty jestes na mnie uczulony to i ja ci nie będę dłużny (IMG:style_emoticons/default/tongue.gif)
Go to the top of the page
+Quote Post
mihal
post
Post #14





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

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


  1. <?php
  2. echo "<form action = '' method='post'>";
  3. $qc = mysql_query ('Select * FROM CZYTELNICY');
  4. echo "<select name = 'czytelnicy'>";
  5. while($wiersz_danych = mysql_fetch_array($qc))
  6. {
  7. echo "<option value = $wiersz_danych[ID_CZYTELNIKA]>$wiersz_danych[IMIE] $wiersz_danych[NAZWISKO] </option>";
  8. }
  9. echo "</select>";
  10.  
  11. $qk = mysql_query ('Select * FROM KSIAZKI');
  12. echo "<select name = 'ksiazka' >";
  13. while($wiersz_danych = mysql_fetch_array($qk))
  14. {
  15. echo "<option value = $wiersz_danych[ID_KSIAZKI]>$wiersz_danych[TYTUL] - $wiersz_danych[AUTOR]</option>";
  16. }
  17. echo "</select></form>";
  18. ?>


nie działa. coś źle robię ?
Go to the top of the page
+Quote Post
nospor
post
Post #15





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Przedszkole przedszkolem, ale zacytuje ci moj poprzedni tekst:
Cytat
weź się zapoznaj wpierw z podstawami obsługi formularzy

i zamknę temat. Wybacz, ale podstawy z obsługi formularzy naprawdę mógłbyś wpierw sam opanować. Na tym forum wymagamy odrobiny wkładu własnego, a znajomość podstaw obsługi formularzy do takiego "wkładu" się zalicza
Go to the top of the page
+Quote Post

Closed TopicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 24.08.2025 - 07:00