Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Kilka pól formularza zapisanych jako tablica umieszczona w BD
Forum PHP.pl > Forum > Przedszkole
eFK
Witam serdecznie

Próbuję stworzyć prosty program do dodawania szkolnych planów lekcji na stronę www, a następnie wyświetlania ich względem wybranej klasy. Według mojego (nie wiem czy realnego) pomysłu administrator ma dostępny panel: tabelka z dniami tygodnia i godzinami w której z wybieranych list formularza może wybrać jaki przedmiot jest w jakiej godzinie, a następnie wszystko wysłać do odpowiedniej tabeli bazy danych w postaci tablicy. Takie pole z tablicą ma być następnie połączone z odpowiednią klasą z innej tabeli i wyświetlane w postaci planu lekcji dla każdego zainteresowanego użytkownika.

Niestety nie wszystko wiem jak zrobić. Gdy wysyłam dane z tabelki z formularzami do zapisania do bazy danych zapisują mi się one jako Array – i nie umiem wyciągnąć zapisanych w niej danych, aby je potem przedstawić na stronie.

Kod mini-wersji tej części projektu wygląda tak:
  1. <?php
  2.  
  3. $con = mysql_connect("", "", "");
  4.  
  5. $bd = mysql_select_db ("plan_lekcji");
  6.  
  7. $sql = "CREATE TABLE timetable
  8. (
  9. plan VARCHAR(500),
  10. plan_id INT NOT NULL AUTO_INCREMENT,
  11. PRIMARY KEY (plan_id)
  12. )";
  13. $do = mysql_query($sql);
  14.  
  15. $plan = array($_POST["plan"]);
  16. $seralizeplan = serialize($plan);
  17.  
  18. $bd = mysql_select_db ("plan_lekcji");
  19. $sql = "INSERT INTO timetable VALUES ('$plan', '')";
  20. $sql = mysql_query($sql);
  21.  
  22. $result = "SELECT plan FROM timetable WHERE plan_id = 1";
  23. $do = mysql_query($result);
  24.  
  25. echo "<table border='1'>
  26. <tr>
  27. <th>wynik</th>
  28. </tr>";
  29.  
  30. while($row = mysql_fetch_assoc($do))
  31. {
  32. $plan = unserialize($row['plan']);
  33. print($plan);
  34. }
  35. echo "</table>";
  36. ?>


i jeszcze kod html z formularzem:
  1. <style type="text/css">
  2. body td{border:1px solid black; text-align: center; width: 100px; height: 30px;}
  3. </head>
  4. <form action="probb2.php" method="post">
  5. <tr>
  6. <td></td>
  7. <td>8.00 - 8.45</td>
  8. <td>8.50 - 9.35</td>
  9. </tr>
  10. <tr>
  11. <td>PONIEDZIAŁEK</td>
  12. <td><select name="plan"><?php include('form.php'); ?></select></td>
  13. <td><select name="plan"><?php include('form.php'); ?></select></td>
  14. </tr>
  15. </table><input type="submit" value="zatwierdz">
  16. </form>
  17. <br />
  18. </body>
  19. </html>


Próbowałam szukać w sieci rozwiązania, ale nic nie znalazła, albo poprostu coś źle rozumiem, źle wykorzystuje. Będe wdzięczna za wszytkie sugestie i porady, lub naprowadzenie mnie, gdzie robie jakiś pewnie karygodny bład :-D, wynikajacy z tego, ze dopiero się uczę php i mysql .
AlexDeLarge
Błędów jest sporo i widać, że nie do końca wiesz, co się w tym kodzie dzieje.

Ale po kolei.

Definiujesz pole plan w bazie jako VARCHAR(500). Pamiętaj, że do MySQL 5.0.3 nie możesz tego zrobić (limit 255).
Zmienna $plan zawiera tablicę PHP-ową, której ot tak nie możesz wstawić do bazy. Musisz ją albo zserializować, albo - lepiej - wstawić jeden wiersz w bazie dla każdego elementu tablicy.

  1. <?php
  2.  
  3. foreach ($_POST['plan'] as $planRow) {
  4. mysql_query('INSERT INTO timetable VALUES ("' . mysql_real_escape_string($planRow) . '", NULL)');
  5. }


Daruj sobie też $plan = array($_POST['plan']);, bo to w Twoim wypadku bez sensu.

Do tego linijkę niżej serializujesz tablicę z POST, a potem w zapytaniu INSERT wstawiasz znów $plan. Zamień w tym zapytaniu $plan na $serializedplan i powinno Ci zadziałać (chociaż może nie widzę również innych błędów).

Pozdrawiam,
PW
eFK
Bardzo dziękuje za tak szybką i konkretną odpowiedz :-)

Mam jeszcze jedno pytanie. Każdej rozwijanej liście html nadałam to samo name "plan", licząc na to, że dane z nich będzie się dało pokolei dodawać do tablicy. Tylko, czy nie chciałam za bardzo uprościć sobie życia, czy musze każdej liście nadawać inną nazwę (plan1, plan2...) aby dało się je pokolei wsadzić do tablicy?

Podczas próbowania różnych, mniej lub bardziej logicznych :-D pomysłów, udało mi się co najwyżej dodać tylką jedną daną z kilku formularzy o tej samej nazwie do tablicy, ale jeżeli jest to możliwe, tylko jeszcze nie wiem jak, to będe dalej kombinować...
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.