Pytanie do specjalistów od PHP i formularzy w HTML

6 komentarzy

Przygotowuję chyba pierwszy raz w życiu (no dobra, drugi, ale pierwszy niezrealizowany) projekt obejmujący relacyjną bazę danych (w MySQL) i interface webowy, oparty na PHP. Nie mam prawie żadnego doświadczenia w tym temacie i dlatego nie mam pomysłu jak podejść do pewnego problemu. Może ktoś z joggerowiczów będzie miał rozwiązanie?

Do każdej osoby w bazie danych jest przypisana lista projektów, w jakich brała udział (relacja wiele do wielu, czyli poprzez „międzytabelę”). Jeśli dodaję nową osobę lub edytuję dane jakiejś osoby, chcę mieć możliwość zaznaczenia, w których projektach brała udział. Wyobrażam to sobie tak, że na górze jest formularz z różnymi danymi osobowymi (imię, nazwisko itp.) a pod spodem tabela z listą projektów i przy każdym projekcie jest kwadracik do zaptaszenia. Jeśli przy danym projekcie jest ptaszek znaczy to, że dana osoba brała w nim udział.

I tu pojawia się problem techniczny: jak wczytać dane z tej tabeli?? No bo tak, jeśli zrobię:

  <input type="checkbox" name="projekt" value="<?php echo $projekt_id; ?>" />

To otrzymam przekazanych kilka zmiennych o nazwie projekt z różnymi (liczbowymi) wartościami. Poprzez $_GET['projekt']; mogę wczytać tylko jedną zmienną.

Myślałam jeszcze nad czymś jak:

  <input type="checkbox" name="projekt_<?php echo $projekt_id; ?>" value="true" />

wtedy miałabym zmienne o różnych nazwach. Ale skąd miałabym wiedzieć, które wczytać i do jakiej nazwy się odwołać? Z bazy danych? Sprawdzać, które są, a które nie? Ale jak to odnieść do nazwy zmiennej?

Pytanie: jak zmodyfikować formularz lub jak wczytywać zmienne, żeby otrzymać informację o wszystkich projektach, w których dana osoba brała udział?


Komentarze do notki “Pytanie do specjalistów od PHP i formularzy w HTML”

  1. mls 

    Najprościej będzie zapewne przez:
    <input type="checkbox" name="projekt[<?=$projekt_id?>]" value="true" />
    lub
    <input type="checkbox" name="projekt[]" value="<?=$projekt_id?>" />
    Pierwsze zwróci tablicę, w której kluczami będą identyfikatory projektów a wartościami „true”, drugie tablicę samych wartości – identyfikatorów projektów.

  2. Typoagrafka 

    No to jest super rozwiązanie. Nie wiedziałam, że można w „name” podać również [] i zrobić z tego tablicę. Dzięki. Dam znać czy działa potem, bo teraz siedzę na seminarium ;)

  3. Jajcuś 

    Typografka: ja też nie wiedziałem, czy można… Właściwie jestem prawie pewien, że w XHTML nie można (atrybut „name” jest tam równoważny z „id” i musi spełniać wymagania dla „id”, a więc żadnych magicznych znaczków). Ostatnio męczyłem się z jakimś projektem, gdzie coś takiego było stosowane i wcale mi się to nie podobało…

    Pierwsze zaproponowane przez Ciebie rozwiązanie (ta sama nazwa i różne wartości dla wszystkich checkboksów) jest właściwe. I na pewno do wszystkich otrzymanych wartości można się z PHP dobrać (nie powiem ci jak, bo nie znam PHP) — bo tak właśnie się tego typu formularze w HTML obsługuje. W pythonowym cgi, na przykład, możesz pobrać listę wartości dla danej nazwy pola.

  4. Typoagrafka 

    Hej Jajcuś, pytanie tylko: JAK się dobrać do tych wartości, bo tego właśnie nie wiem.

  5. Jajcuś 

    Ok, zajrzałem do dokumentacji PHP i widzę, że to „[]” służy właśnie do tego, żeby w $_GET wartość była tablicą... A więc PHP jest niezgodne z XHTML, bo sobie wymyślili, że nazwy pól mają znaczenie dla interpretera… Ciekawe, za każdym razem, gdy czegoś nowego się o tym języku dowiaduje, to moje zdanie na jego temat jest coraz gorsze…

    No cóż, pewnie nie potrzebujesz Valid XHTML, więc to rozwiązanie będzie ok…

  6. Typoagrafka 

    No to prawda, nie potrzebuję Valid XHTML, to wewnętrzny system, którym na razie administruję tylko ja, w przyszłości będą miały do niego dostęp może 3–4 osoby.

Zostaw odpowiedź