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".
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)
{
{
for ($i = 0; $i < count($value); $i++) {
}
}
}
echo mail($email, $subject, $wiad, $head) ?
$message : $error; }
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\"") or
die('Błąd zapytania SQL. Sprawdź składnię.');
/*
wyświetlamy wyniki, sprawdzamy,
czy zapytanie zwróciło wartość większą od 0
*/
/* jeżeli wynik jest pozytywny, to wyświetlamy dane */
echo "<table cellpadding=\"5\" cellspacing=\"3\" id=\"tabela-prezentow\">"; echo "<tr class=\"mainrow\">"; echo "<td>Nazwa prezentu</td>"; echo "<td>Odnośnik do strony</td>"; echo "<td>Czy zarezerwowany?</td>"; echo "<td>Jeśli zarezerwowany, to kiedy?</td>"; echo "<td>Wybierz prezent</td>"; echo "<td>".$r['LP']."</td>"; echo "<td>".$r['Nazwa_prezentu']."</td>"; echo "<td><a href=\"".$r['Link_do_strony']."\" target=\"_blank\">KLIKNIJ!</a></td>"; echo "<td>".$r['Czy_wybrany']."</td>"; echo "<td>".$r['Kiedy_wybrany']."</td>"; 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)
Ten post edytował zoomol 8.03.2014, 10:34:59