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 |
+----------------+--------------+------+-----+---------+-----------------------------+
+----------------+--------------+------+-----+---------+-----------------------------+
| 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".
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
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" lang="pl"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <meta name="robots" content="none" /> <link href="style/style.css" rel="stylesheet" type="text/css" /> <title>Wybór prezentów na wesele</title> <link rel="shortcut icon" href="images/favicon.ico"> <?php require("scripts/db_connect.php"); ?> </head> <body>
index.php
<?php require("head.php"); ?> <!-- początek body --> <div id="content" align="center"> <?php { $LP = $_POST['LP']; $Nazwa = $_POST['Nazwa_prezentu']; $Link = $_POST['Link_do_strony']; $Czy = $_POST['Czy_wybrany']; $Kiedy = $_POST['Kiedy_wybrany']; $wybrany = "<table cellpadding=\"5\" cellspacing=\"3\" id=\"tabela-prezentow\"> <tr class=\"mainrow\"> <td>LP</td> <td>Nazwa prezentu</td> <td>Odnośnik do strony</td> <td>Czy zarezerwowany?</td> <td>Jeśli zarezerwowany, to kiedy?</td> </tr> <tr> <td>".$LP."</td> <td>".$Nazwa."</td> <td><a href=\"".$Link."\">KLIKNIJ!</a></td> <td>".$Czy."</td> <td>".$Kiedy."</td> </tr> </table>"; ////////// USTAWIENIA ////////// $email = 'moj@email'; // Adres e-mail adresata $subject = 'Informacja z strony xxxxx/wesele'; // Temat listu $message = "<p><span style=\"color:#008800;font-weight:bold;\">Informacja została zapisana prawidłowo - dziękujemy!</span><br /><br /> Wybrano pozycje:<br /><br /> <span style=\"font-weight:bold;\">".$wybrany."</span><br /></p>"; // Komunikat $error = "<p style=\"color:#ff0000;font-weight:bold;\">Wystąpił błąd podczas zapisywania danych. Prosimy spróbować ponownie.</p>"; // Komunikat błędu $charset = 'utf-8'; // Strona kodowa ////////////////////////////// $head = "From: xxxxx\r\n"; // Od kogo wiadomość $head = "Content-Type: text/html; charset=$charset\r\n"; // Nagłówek - typ zawartości (tu: html), strona kodowa (ustawiona wyżej) $head = "MIME-Version: 1.0\r\n"; // nagłówek - wersja MIME $wiad = " <html> <head> <title>Wiadomość ze strony xxxxx/wesele</title> </head> <body> <div style=\"font-family:'Trebuchet MS',Arial,sans-serif; color:#0000FF;font-size:12px;\"> <p>Witaj!<br /> <b>Na stronie <a href=\"http://xxx/wesele\">http://xxx/wesele</a>, ktoś właśnie wybrał prezent ślubny:</p> <p style=\"color:#FF0000;font-size:16px;\">$_POST[wybrany]</p><br /> <table cellpadding=\"3\" cellspacing=\"2\" border=\"1\"> <tr> <td>LP</td> <td>Nazwa prezentu</td> <td>Odnośnik do strony</td> <td>Czy zarezerwowany?</td> <td>Jeśli zarezerwowany, to kiedy?</td> </tr> <tr> <td>".$LP."</td> <td>".$Nazwa."</td> <td><a href=\"".$Link."\">KLIKNIJ!</a></td> <td>".$Czy."</td> <td>".$Kiedy."</td> </tr> </table> <br /> </div> </body> </html> "; $body = ''; foreach ($_POST as $name => $value) { { { } } } } else { ?> <p> <h1>Kochani Goście!</h1><br /><br /> <h2>Serdecznie dziękujemy za to, że chcecie dzielić z nami nasze szczęście.</h2><br /> <h2>Poniżej przedstawiamy listę uciech, (...)<br /> <h2>Krótka instrukcja:</h2><br /> <h3>Można wybrać dowolną ilość prezentów (minimum 1). Wybieramy zaznaczając po prawej stronie pole wyboru (kolumna "Wybierz prezent").</h3><br /> <h3>Po dokonaniu wyboru, na samym dole klikamy przycisk "Zapisz".</h3><br /> <h3>I gotowe!</h3><br /><br /> <h3>Raz wybrany prezent, nie pojawi się do wyboru innym Gościom, zatem zostanie wyeliminowane dublowanie się tych samych prezentów.</h3><br /> <h3>Niniejsza strona będzie funkcjonowała do końca maja 2014r.</h3><br /><br /> <h2>Jeszcze raz serdecznie Wam dziękujemy!</h2> </p><br /> <form name="formularz" action="?" method="POST"> <?php /* zapytanie do konkretnej tabeli */ $wynik = mysql_query("SELECT LP, Nazwa_prezentu, Link_do_strony, Czy_wybrany, Kiedy_wybrany FROM tb_wesele WHERE Czy_wybrany like \"NIE\"") /* wyświetlamy wyniki, sprawdzamy, czy zapytanie zwróciło wartość większą od 0 */ /* jeżeli wynik jest pozytywny, to wyświetlamy dane */ 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 } } ?> <p style="text-align:center;"> <input type="reset" name="reset" value="Wyczyść"> <input type="button" name="submit" value="Zapisz"> </p> <br/> </form> <?php } ?> </div> <!-- koniec body --> <?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)