Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Dodawanie i wyświetlanie tablic do db powstałych z POST
Forum PHP.pl > Forum > Przedszkole
eFK
Witam wszytkich ponownie

Już raz radziłam się na forum, jednak nadal mam w zasadzie jeden i tem sam problem. Tworzę prosty programik do tworzenia i wyświetlkania na stronie www planów lekcji. Mają być one tworzone za pomocą szeregu formularzy i przechowywane w postaci tablic -> jedno pole db, jedna tablica z planem lekcji dla jednej klasy.

Kod tworzący plany lekcji:
  1. <?php header('Content-Type: text/html; charset=utf-8');
  2.  
  3. $con = mysql_connect("", "", "");
  4.  
  5. $bd = mysql_select_db ("plan_lekcji");
  6.  
  7. $sql = "CREATE TABLE timetable
  8. (
  9. plan VARCHAR(255),
  10. plan_id INT NOT NULL,
  11. PRIMARY KEY (plan_id),
  12. UNIQUE(plan_id)
  13. )";
  14.  
  15. $plan = serialize(array(
  16. $_POST['p1'], $_POST['p2'], $_POST['p3'], $_POST['p4'],$_POST['p5'], $_POST['p6'], $_POST['p7'], $_POST['p8'], $_POST['p9'], $_POST['p10'],
  17. $_POST['p11'], $_POST['p12'], $_POST['p13'], $_POST['p14'],$_POST['p15'], $_POST['p16'], $_POST['p17'], $_POST['p18'], $_POST['p19'], $_POST['p20'],
  18. $_POST['p21'], $_POST['p22'], $_POST['p23'], $_POST['p24'],$_POST['p25'], $_POST['p26'], $_POST['p27'], $_POST['p28'], $_POST['p29'], $_POST['p30'],
  19. $_POST['p31'], $_POST['p32'], $_POST['p33'], $_POST['p34'],$_POST['p35'], $_POST['p36'], $_POST['p37'], $_POST['p38'], $_POST['p39'], $_POST['p40'],
  20. $_POST['p51'], $_POST['p52'], $_POST['p53'], $_POST['p54'],$_POST['p55'], $_POST['p56'], $_POST['p57'], $_POST['p58'], $_POST['p59'], $_POST['p50']
  21. ));
  22.  
  23. $class_nr = $_POST['class_nr'];
  24. $sql = mysql_query("SELECT id FROM class WHERE class_nr = '$class_nr'");
  25. while ($row = mysql_fetch_assoc($sql))
  26. {$class_nr = $row['id'];}
  27.  
  28. $sql = mysql_query("INSERT INTO timetable VALUES ('$serializedplan', '$class_nr')");
  29.  
  30. ?>
  31.  
  32. <html>
  33. <head>
  34. <style type="text/css">
  35. body td{border:1px solid black; text-align: center; width: 100px; height: 30px;}
  36. </style>
  37. </head>
  38. <body>
  39.  
  40. <form action="create.php" method="post">
  41. <table>
  42. <tr>
  43. <td class="table">
  44. klasa:
  45. <br />
  46. <select name="class_nr"><?php include('form_class.php'); ?></select>
  47. </td>
  48. <td class="table">1<br />8.00 - 8.45</td>
  49. <td class="table">2<br />8.50 - 9.36</td>
  50. <td class="table">3<br />9.45 - 10.30</td>
  51. <td class="table">4<br />10.40 - 11.25</td>
  52. <td class="table">5<br />11.35 - 12.20</td>
  53. <td class="table">6<br />12.40 - 13.25</td>
  54. <td class="table">7<br />13.35 - 14.20</td>
  55. <td class="table">8<br />14.25 - 15.10</td>
  56. <td class="table">9<br />15.15 - 16.00</td>
  57. <td class="table">10<br />16.05 - 16.50</td>
  58. </tr>
  59. <tr>
  60. <td>PONIEDZIAŁEK</td>
  61. <td><select name="p1"><?php include('form.php'); ?></select></td>
  62. <td><select name="p1"><?php include('form.php'); ?></select></td>
  63. <td><select name="p1"><?php include('form.php'); ?></select></td>
  64. <td><select name="p4"><?php include('form.php'); ?></select></td>
  65. <td><select name="p5"><?php include('form.php'); ?></select></td>
  66. <td><select name="p6"><?php include('form.php'); ?></select></td>
  67. <td><select name="p7"><?php include('form.php'); ?></select></td>
  68. <td><select name="p8"><?php include('form.php'); ?></select></td>
  69. <td><select name="p9"><?php include('form.php'); ?></select></td>
  70. <td><select name="p10"><?php include('form.php'); ?></select></td>
  71. </tr>
  72. <tr>
  73. itd...
  74. </tr>
  75. </table><input type="submit" value="zatwierdz">
  76. </form>
  77. </body>
  78. </html>


Kod mający wyświetlać plan lekcji względem wybranej klasy (na razie jeszcze nie wrzucony w tabelkę):
  1. <?php header('Content-Type: text/html; charset=utf-8');
  2.  
  3. $con = mysql_connect("", "", "") or print mysql_error();
  4.  
  5. $bd = mysql_select_db ("plan_lekcji") or print mysql_error();
  6.  
  7. /*wybierz według klasy*/
  8. $sql = "SELECT class_nr FROM class";
  9. $sql = mysql_query($sql) or print mysql_error();
  10.  
  11. echo '<form action="show.php" method="post"><select name="yourclass">';
  12. while ($row = mysql_fetch_assoc($sql))
  13. {
  14.  
  15. echo '<option>' .$row["class_nr"] .'</option>';
  16. }
  17. echo '</select>';
  18.  
  19. echo '<input type="submit" value="wybierz klasę"></form>';
  20. echo '<br />';
  21.  
  22. $yourclass = $_POST['yourclass'];
  23.  
  24. /*wybierz według nauczyciela*/
  25. $sql = "SELECT surname FROM teacher";
  26. $sql = mysql_query($sql) or print mysql_error();
  27.  
  28. echo '<form action="show.php" method="post"><select name="yourteacher">';
  29. while ($row = mysql_fetch_assoc($sql))
  30. {
  31.  
  32. echo '<option>' .$row["surname"] .'</option>';
  33. }
  34. echo '</select>';
  35.  
  36. echo '<input type="submit" value="wybierz nauczyciela"></form>';
  37. echo '<br />';
  38.  
  39. $yourteacher = $_POST['yourteacher'];
  40.  
  41. /*wyswietl wynik*/
  42.  
  43.  
  44. $sql = mysql_query("SELECT plan FROM class, timetable WHERE class.class_nr = '$yourclass' AND class.id = timetable.plan_id") or print mysql_error();
  45.  
  46. while($row = mysql_fetch_assoc($sql))
  47. {
  48. $u = unserialize($row['plan']);
  49. print_r($row) .'<br />';
  50. }
  51. ?>


Przede wszystkim już wiem, że tworzenie tablic z zserializowanych POST jest bez sensu i o ile dobrze teraz rozumuje, tworzy tylko podwójnie zserializowany ciąg, którego nie jestem w stanie odserializować. Zresztą, przyznaje się bez bicia, jedna osoba z forum mnie już przed tym przestzregała, ale musiałam sprawdzić na własnej skóże, bo tak sie najlepiej człowiek uczy. :-D.

Tylko, pojawia sie teraz pytanie: w takim wypadku jak to zrobić? Jak dodać serie danych zapisanych najlepiej jako tablicę w jednym polu db, a następnie je wyświetlić?
Jedna osoba z forum poradziła mi coś takiego:
  1. foreach ($_POST['p1'] as $planRow) {
  2. mysql_query('INSERT INTO timetable VALUES ("' . mysql_real_escape_string($planRow) . ' , '$class_nr'")');
  3. }


jednak to zupełnie nic mi nie daje, dodaje jedynie puste pola do db.

Siedziałam nad tym cały tydzień, cały czas coś robie źle i neie wiem po prostu co.
Będe wdzięczna za każdą rade i uwage.
sajegib
Najlepszą opcją jest zrobienie z tablicyjson_encode a następnie odczytać za pomocą json_decode
SmokAnalog
A jeszcze lepszą opcją byłoby stworzenie bazy danych z prawdziwego zdarzenia, czyli z osobnymi tabelami dla przedmiotów, klas i planów.
eFK
Dziękuje wam za rady.

Wreszcie okazało się, ze najlepiej było użyć implode/explode, działa dokładnie tak jak chciałam :-)

SmokAnalog; zgodnie z zasada kto pyta, nie bładzi; czy mogłabym prosić o wyjaśnienia dlaczego lepiej byłoby zrobić prawdziwą bazę, a nie używać tablic?
SmokAnalog
Dlatego, że:
  1. miałabyś porządną kontrolę nad relacjami - nic nie zostałoby przypadkowo usunięte
  2. uniknęłabyś niepotrzebnych powtórzeń danych
  3. w przyszłości mogłabyś stworzyć fajny panel administracyjny do tworzenia/zmiany planów


Porządnie zaprojektowana baza to skarb smile.gif
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.