Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [HTML][MySQL][PHP] Pole typu 'checkbox' jako wiersz w tabeli, Problem z pobieraniem/wysyłaniem danych tabeli w 'checkbox'
zoomol
post
Post #1





Grupa: Zarejestrowani
Postów: 26
Pomógł: 0
Dołączył: 29.07.2006
Skąd: Poznań

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


Cześć,

Mam problem z zrobieniem prawdopodobnie prostej rzeczy.

[STRUKTURA TABELI MySQL]
Kod
mysql> describe tb_wesele;
+----------------+--------------+------+-----+---------+-----------------------------+
| Field          | Type         | Null | Key | Default | Extra                       |
+----------------+--------------+------+-----+---------+-----------------------------+
| LP             | tinyint(3)   | NO   | PRI | NULL    | auto_increment              |
| Nazwa_prezentu | varchar(200) | YES  |     | NULL    |                             |
| Cena_prezentu  | decimal(6,2) | YES  |     | NULL    |                             |
| Link_do_strony | varchar(250) | YES  |     | NULL    |                             |
| Czy_wybrany    | tinytext     | YES  |     | NULL    |                             |
| Kiedy_wybrany  | timestamp    | YES  |     | NULL    | on update CURRENT_TIMESTAMP |
+----------------+--------------+------+-----+---------+-----------------------------+


[IDEA]
Możliwość wyboru wiersza (checkbox) jednokrotnie lub wielokrotnie (kilka wierszy) w formularzu HTML, generowanym za pomocą PHP, wyświetlającym zawartość tabeli MySQL oraz aktualizowanie tabeli MySQL po wyborze wiersza przez użytkownika.

[Od strony użytkownika]
Łopatologicznie: wchodzę na stronę, wybieram interesującą mnie pozycję (lub interesujące mnie pozycje) z tabeli, zahaczam "checkbox/y", klikam "Zapisz" i koniec.
[Od strony serwera]
Skrypt generuje listę pozycji do formularza za pomocą PHP/MySQL. Formularz zawiera tylko te pozycje, które w polu "Czy_wybrany" zawiera słowo "NIE".
  1. mysql> SELECT * FROM tb_wesele WHERE czy_wybrany LIKE "nie";

Użytkownikowi pojawia się formularz z wyselekcjonowanymi wierszami oraz dodatkową kolumną, w której wstawiam <input type="checkbox">. Po wybraniu przez użytkownika pozycji, skrypt aktualizuje tabelę 'tb_wesele' zmieniając tylko pole "Czy_wybrany" z "NIE" na "TAK" oraz aktualizuje "TIMESTAMP" w polu "Kiedy_wybrany" dla pozycji zaznaczonych przez użytkownika.

Ponieważ miałem dość długą pauzę w kodowaniu, wykładam się na podstawowych rzeczach:
1. Wszystko chcę obsłużyć "jednym plikiem" - tzn. operacje SELECT, UPDATE, wyświetlanie formularze miałyby odbywać się w jednym pliku index.php.
2. Chcę użyć metody POST dla formularza.

Teraz moje wypociny:
Używam osobnych pliczków do nagłówka i stopki (head.php oraz foot.php). Foot.php nie będę przytaczał, bo tam nic nie ma.
head.php
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml" lang="pl">
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  5. <meta name="robots" content="none" />
  6.  
  7. <link href="style/style.css" rel="stylesheet" type="text/css" />
  8. <title>Wybór prezentów na wesele</title>
  9.  
  10. <link rel="shortcut icon" href="images/favicon.ico">
  11.  
  12. <?php require("scripts/db_connect.php"); ?>
  13.  
  14. </head>
  15.  
  16. <body>


index.php
  1. <?php require("head.php"); ?>
  2. <!-- początek body -->
  3.  
  4. <div id="content" align="center">
  5.  
  6. <?php
  7. if (count($_POST))
  8. {
  9. $LP = $_POST['LP'];
  10. $Nazwa = $_POST['Nazwa_prezentu'];
  11. $Link = $_POST['Link_do_strony'];
  12. $Czy = $_POST['Czy_wybrany'];
  13. $Kiedy = $_POST['Kiedy_wybrany'];
  14. $wybrany = "<table cellpadding=\"5\" cellspacing=\"3\" id=\"tabela-prezentow\">
  15. <tr class=\"mainrow\">
  16. <td>LP</td>
  17. <td>Nazwa prezentu</td>
  18. <td>Odnośnik do strony</td>
  19. <td>Czy zarezerwowany?</td>
  20. <td>Jeśli zarezerwowany, to kiedy?</td>
  21. </tr>
  22. <tr>
  23. <td>".$LP."</td>
  24. <td>".$Nazwa."</td>
  25. <td><a href=\"".$Link."\">KLIKNIJ!</a></td>
  26. <td>".$Czy."</td>
  27. <td>".$Kiedy."</td>
  28. </tr>
  29. </table>";
  30.  
  31. ////////// USTAWIENIA //////////
  32. $email = 'moj@email'; // Adres e-mail adresata
  33. $subject = 'Informacja z strony xxxxx/wesele'; // Temat listu
  34. $message = "<p><span style=\"color:#008800;font-weight:bold;\">Informacja została zapisana prawidłowo - dziękujemy!</span><br /><br /> Wybrano pozycje:<br /><br />
  35. <span style=\"font-weight:bold;\">".$wybrany."</span><br /></p>"; // Komunikat
  36. $error = "<p style=\"color:#ff0000;font-weight:bold;\">Wystąpił błąd podczas zapisywania danych. Prosimy spróbować ponownie.</p>"; // Komunikat błędu
  37. $charset = 'utf-8'; // Strona kodowa
  38. //////////////////////////////
  39.  
  40. $head = "From: xxxxx\r\n"; // Od kogo wiadomość
  41. $head = "Content-Type: text/html; charset=$charset\r\n"; // Nagłówek - typ zawartości (tu: html), strona kodowa (ustawiona wyżej)
  42. $head = "MIME-Version: 1.0\r\n"; // nagłówek - wersja MIME
  43.  
  44. $wiad = "
  45. <html>
  46.  
  47. <head>
  48. <title>Wiadomość ze strony xxxxx/wesele</title>
  49. </head>
  50. <body>
  51. <div style=\"font-family:'Trebuchet MS',Arial,sans-serif; color:#0000FF;font-size:12px;\">
  52.  
  53. <p>Witaj!<br />
  54. <b>Na stronie <a href=\"http://xxx/wesele\">http://xxx/wesele</a>, ktoś właśnie wybrał prezent ślubny:</p>
  55.  
  56. <p style=\"color:#FF0000;font-size:16px;\">$_POST[wybrany]</p><br />
  57.  
  58. <table cellpadding=\"3\" cellspacing=\"2\" border=\"1\">
  59. <tr>
  60. <td>LP</td>
  61. <td>Nazwa prezentu</td>
  62. <td>Odnośnik do strony</td>
  63. <td>Czy zarezerwowany?</td>
  64. <td>Jeśli zarezerwowany, to kiedy?</td>
  65. </tr>
  66. <tr>
  67. <td>".$LP."</td>
  68. <td>".$Nazwa."</td>
  69. <td><a href=\"".$Link."\">KLIKNIJ!</a></td>
  70. <td>".$Czy."</td>
  71. <td>".$Kiedy."</td>
  72. </tr>
  73. </table>
  74. <br />
  75. </div>
  76. </body>
  77. </html>
  78. ";
  79.  
  80. $body = '';
  81. foreach ($_POST as $name => $value)
  82. {
  83. if (is_array($value))
  84. {
  85. for ($i = 0; $i < count($value); $i++)
  86. {
  87. $body .= "$name=" . (get_magic_quotes_gpc() ? stripslashes($value[$i]) : $value[$i]) . "\r\n";
  88. }
  89. }
  90. else $body .= "$name=" . (get_magic_quotes_gpc() ? stripslashes($value) : $value) . "\r\n";
  91. }
  92. echo mail($email, $subject, $wiad, $head) ? $message : $error;
  93. }
  94. else
  95. {
  96. ?>
  97. <p>
  98. <h1>Kochani Goście!</h1><br /><br />
  99. <h2>Serdecznie dziękujemy za to, że chcecie dzielić z nami nasze szczęście.</h2><br />
  100. <h2>Poniżej przedstawiamy listę uciech, (...)<br />
  101.  
  102. <h2>Krótka instrukcja:</h2><br />
  103. <h3>Można wybrać dowolną ilość prezentów (minimum 1). Wybieramy zaznaczając po prawej stronie pole wyboru (kolumna "Wybierz prezent").</h3><br />
  104. <h3>Po dokonaniu wyboru, na samym dole klikamy przycisk "Zapisz".</h3><br />
  105. <h3>I gotowe!</h3><br /><br />
  106. <h3>Raz wybrany prezent, nie pojawi się do wyboru innym Gościom, zatem zostanie wyeliminowane dublowanie się tych samych prezentów.</h3><br />
  107. <h3>Niniejsza strona będzie funkcjonowała do końca maja 2014r.</h3><br /><br />
  108. <h2>Jeszcze raz serdecznie Wam dziękujemy!</h2>
  109. </p><br />
  110.  
  111. <form name="formularz" action="?" method="POST">
  112. <?php
  113.  
  114. /* zapytanie do konkretnej tabeli */
  115. $wynik = mysql_query("SELECT LP, Nazwa_prezentu, Link_do_strony, Czy_wybrany, Kiedy_wybrany FROM tb_wesele WHERE Czy_wybrany like \"NIE\"")
  116. or die('Błąd zapytania SQL. Sprawdź składnię.');
  117.  
  118. /*
  119. wyświetlamy wyniki, sprawdzamy,
  120. czy zapytanie zwróciło wartość większą od 0
  121. */
  122. if(mysql_num_rows($wynik) > 0) {
  123. /* jeżeli wynik jest pozytywny, to wyświetlamy dane */
  124. echo "<table cellpadding=\"5\" cellspacing=\"3\" id=\"tabela-prezentow\">";
  125. echo "<tr class=\"mainrow\">";
  126. echo "<td>LP</td>";
  127. echo "<td>Nazwa prezentu</td>";
  128. echo "<td>Odnośnik do strony</td>";
  129. echo "<td>Czy zarezerwowany?</td>";
  130. echo "<td>Jeśli zarezerwowany, to kiedy?</td>";
  131. echo "<td>Wybierz prezent</td>";
  132. echo "</tr>";
  133. while($r = mysql_fetch_assoc($wynik)) {
  134. echo "<tr>";
  135. echo "<td>".$r['LP']."</td>";
  136. echo "<td>".$r['Nazwa_prezentu']."</td>";
  137. echo "<td><a href=\"".$r['Link_do_strony']."\" target=\"_blank\">KLIKNIJ!</a></td>";
  138. echo "<td>".$r['Czy_wybrany']."</td>";
  139. echo "<td>".$r['Kiedy_wybrany']."</td>";
  140. echo '<td><input type="checkbox" name="wybrany" value="'.$r['LP'],$r['Nazwa_prezentu'],$r['Link_do_strony'],$r['Czy_wybrany'],$r['Kiedy_wybrany'].'"/></td>'; \\TU MAM STRASZNY PROBLEM
  141. }
  142. echo "</tr>";
  143. echo "</table><br/>";
  144. }
  145.  
  146. ?>
  147.  
  148. <p style="text-align:center;">
  149. <input type="reset" name="reset" value="Wyczyść">
  150. <input type="button" name="submit" value="Zapisz">
  151. </p>
  152. <br/>
  153. </form>
  154. <?php
  155. }
  156. ?>
  157.  
  158. </div>
  159.  
  160.  
  161. <!-- koniec body -->
  162. <?php require("foot.php"); ?>


Nie mam jeszcze napisanej części dot. UPDATE.

[CO DZIAŁA?]
1. Połączenie do bazy i pobieranie wyselekcjonowanych danych do formularza

[Z CZYM SOBIE NIE RADZĘ]
1. index.php - wiersze od 7 do 97. To są skrypty z jakichś starych moich prac, które starałem się przemianować. Niestety, zamiast iść w dobrym kierunku, to brnę we mgłę.
2. index.php - wiersz 140 - nie wiem jak to zrobić, aby formularz wiedział, którą pozycję (wcześniej wczytaną skryptem) wybrał użytkownik i aby ją przesłał (zaktualizował UPDATE) w bazie MySQL.

Bardzo serdecznie proszę o pomoc.
Moderatorów proszę o wyrozumiałość - po dłuższej przerwie, moja znajomość obraca się wokół Przedszkola, zatem w tej sekcji postanowiłem umieścić swoje "wypociny". Z pokorą przyjmę krytykę.

Dziękuję,
Jarek (zoomol)

Ten post edytował zoomol 8.03.2014, 10:34:59


--------------------
Życie to marna gra.... Ale z bardzo dobrą grafiką ;)

Life is brutal, there is no question about it.... ;-/
Go to the top of the page
+Quote Post

Posty w temacie
- zoomol   [HTML][MySQL][PHP] Pole typu 'checkbox' jako wiersz w tabeli   7.03.2014, 13:17:40
- - zoomol   Cześć, Mam problem z odbieraniem/przetwarzaniem/w...   8.03.2014, 18:09:31
- - Kshyhoo   Jeden temat wystarczy. Wyjątkowo nie zamykam, ale ...   8.03.2014, 18:17:03
- - zoomol   Kshyhoo OK - w zasadzie racja, dotyczy tego samego...   11.03.2014, 09:13:06
- - lukasz_os   Ad. 1. Zapakuj to w funkcję przyjmującą parametr ...   11.03.2014, 09:25:45
- - zoomol   lukasz_os dziękuję za podpowiedź. Rozumiem, że odn...   11.03.2014, 09:57:44
- - lukasz_os   W poprzednim poście odnosiłem się do tego:CytatMam...   11.03.2014, 10:20:01
- - zoomol   lukasz_os dzięki za podpowiedzi. Po kolei: 1. odw...   11.03.2014, 15:12:32
- - lukasz_os   Ad 1. popróbuj z pętlą foreach dla $_POST[...   11.03.2014, 15:43:08
- - zoomol   lukasz_os dzięki za cierpliwość i odpowiedzi Wykł...   11.03.2014, 17:41:46
- - Turson   ID jest tablicą. [PHP] pobierz, plaintext $ID = im...   11.03.2014, 18:18:57
- - zoomol   Turson dziękuję za naprowadzenie oraz kod. Niestet...   11.03.2014, 19:51:40
- - lukasz_os   Skoro chcesz tylko pobrać id zaznaczonych checkboó...   11.03.2014, 22:15:17
- - zoomol   lukasz_os dziękuję bardzo! To załatwiło sprawę...   12.03.2014, 12:00:59
- - Turson   Wybacz, ale nie jesteśmy wróżkami, żeby zgadnąć be...   12.03.2014, 12:51:48
- - zoomol   Turson - zgadza się, rozumiem to. Strona ma funkcj...   12.03.2014, 13:11:39
- - Turson   Miałem na myśli html i css   12.03.2014, 13:19:06
- - lukasz_os   Wklej wynikowy kod html (źródło strony) oraz plik ...   12.03.2014, 13:25:12
- - zoomol   RE: [HTML][MySQL][PHP] Pole typu 'checkbox' jako wiersz w tabeli   12.03.2014, 13:44:00
- - lukasz_os   Plik CSS ".tabela_prezentow td" usuń di...   12.03.2014, 13:50:45
- - zoomol   lukasz_os - no tak, dlaczego ja na to nie wpadłem...   12.03.2014, 14:37:40
- - Turson   Zapytanie puść w pętli foreach($id as $c...   12.03.2014, 15:01:21
- - zoomol   Turson wiedziałem o pętli, tylko nie wiedziałem ja...   12.03.2014, 15:44:01
- - lukasz_os   Cytat(zoomol @ 12.03.2014, 15:44:01 )...   12.03.2014, 19:19:33


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 Aktualny czas: 19.08.2025 - 15:19