Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Lista rozwijana - problem
Forum PHP.pl > Forum > Przedszkole
mihal
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
Kostek.88
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 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 smile.gif

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


...mozesz z powodzeniem zastapic...

  1. <?=$w_status;?>


Powodzenia smile.gif
mihal
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.  
nospor
Nie wnikam w kod, nie czytam tematu (bo za długi wink.gif ) ale sam chyba przyznasz, że takie coś:
<select name = ksiazka value=''></option>
to delikatnie rzecz mówiąc jest źle wink.gif
Kostek.88
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> smile.gif
mihal
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
tomm
a daj
  1. print_r($_POST);

zamiast wywoływać zapytanie do BD
mihal
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:
nospor
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
tomm
no to masz odpowiedź, w tablicy POST nie ma wybranych wartości z selectów. Usunąłeś, jak pisal nospor, zbędne </option>?
mihal
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. ?>
tomm
nadal selecty masz poza formem
nospor
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 tongue.gif
mihal
  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ę ?
nospor
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
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.