Wpis z mikrobloga

#php #webdev

Mam kilka checkboxów:


Po zaznaczeniu ich i zasubmitowaniu dane są przesyłane w formie tablicy:

'nazwatablicy' => array
(
'0' => 'val1'
'1' => 'val2'
'2' => 'val3'
)

Pytanie - czemu krzaki wpisane po nazwie tablicy i nawiasach kwadratowych niczego nie psują i są praktycznie ignorowane? Czy w razie potrzeby można tak zrobić, żeby checkboxy miały różne nazwy, ale przesyłały dane we wspólnej tablicy?
  • 22
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

via Android
  • 0
@ufo99: gdybym mógł to zrobić na id to bym zrobił ;< Sprawa dotyczy takiego przypadku jak opisałem, chcę zrobić pewien myk w Yii i w ten sposób uniknąłbym przerabiania paru innych rzeczy.
  • Odpowiedz
@kontra: Już totalnie nie rozumiem. Ten ciąg po [] nie jest przekazywany w requeście, więc nie ma znaczenia z punktu widzenia PHP czy nawet całego frameworka, czy użyjesz tych szlaczków w name czy dowolnej innej rzeczy.
Jest to kwestia wyłącznie zgodności ze standardem HTML i jest możliwość, że taki form nie na każdej przeglądarce będzie dobrze działał. Podobnie - może być problemem dla crawlerów (choć w to trudniej mi uwierzyć).
  • Odpowiedz
@ufo99: wielowymiarowe tablice w formularzach były obsługiwane już kilka lat temu, dlaczego jakaś przeglądarka miałaby tego nie obsługiwać ? :)
  • Odpowiedz
@ufo99: w skrócie, ten ciąg który dokleja się do name za [], dokleja się też do id. Dla każdego checkboxa ten ciąg jest inny, to po prostu jakiś identyfikator. Dzięki temu każdy checkbox ma inne id, ale wszystkie przesyłają dane w tej samej tablicy - dokładnie tak jak potrzebuję.

I właśnie dlatego zapytałem, czy znaki za nawiasami kwadratowymi mogą psuć, czy nie ;)
  • Odpowiedz
widzisz chyba co zwrócił php, tablica w tablicy.

@moooka: no nie bardzo, zwykła jednowymiarowa tablica z trzema wartościami (val1, val2, val3)
  • Odpowiedz
sam jesteś krzak, widzisz chyba co zwrócił php, tablica w tablicy.


@moooka:
PHP zwrócił mu jednowymiarową tablicę o nazwie "nazwatablicy" i 3 elementach.
Wielowymiarową tablicę miałbyś, gdybyś zrobił name=nazwatablicy[][asdasd] lub name=nazwatablicy[asdasd][]
I właśnie dlatego zapytałem, czy znaki za nawiasami kwadratowymi mogą psuć, czy
  • Odpowiedz
Dla spokoju sprawdź sobie w różnych przeglądarkach, jeśli faktycznie nie da się inaczej. Wiem, że kiedyś IE robiło problemy z formami, ale dziś może problem już nie istnieć.

@ufo99: no tak właśnie zrobię, w sumie nie wiem czemu w pierwszej kolejności pomyślałem, że to może zależeć od syntaxa php, a nie od przeglądarki :P
  • Odpowiedz
@kontra: No wysyłka jest po stronie przeglądarki. PHP to odbiera dopiero - jeśli dane będą wysłane we właściwej formie (tzn jeśli żadna przeglądarka nie zsubmituje tego inaczej niż u Ciebie) to luz.
  • Odpowiedz
No wysyłka jest po stronie przeglądarki. PHP to odbiera dopiero - jeśli dane będą wysłane we właściwej formie (tzn jeśli żadna przeglądarka nie zsubmituje tego inaczej niż u Ciebie) to luz.

@ufo99: no jasna sprawa, po prostu chwilowe zaćmienie umysłowe ;)
  • Odpowiedz
@moooka: no tak, ale w sumie nie wiem czemu w ogóle poruszyłeś temat dwuwymiarowej tablicy, skoro mi zwraca jednowymiarową i mi potrzeba jednowymiarową ;)
  • Odpowiedz
@moooka:
Pytanie nie dotyczyło tego czy możesz sobie wysłać fafnaście wymiarów tablicy (tak, możesz, o ile wysyłasz POSTem), tylko czy składnia name="nazwatablicy[]asdasd" jest poprawna, a dokładniej ten ciąg znaków za nawiasem.
  • Odpowiedz
@kontra: Dlatego, że człowiek powyżej @ufo99 powiedział, że jakaś przeglądarka tego może nie obsłużyć. Nazywając rzeczy po imieniu, powiedziałem, że nawiasy kwadratowe czyli tablice są obsługiwane już od lat we wszystkich mi znanych przeglądarkach. Poza tym, co znaczy, że zwróciło Ci jendowymiarową tablicę ? Przecież, żeby odwołać się do val1 musisz zrobić tak: $_POST['nazwatablicy'][0], ja tu widzę dwa wymiary i o to mi chodziło ;-)
  • Odpowiedz
jakaś przeglądarka tego może nie obsłużyć. Nazywając rzeczy po imieniu, powiedziałem, że nawiasy kwadratowe czyli tablice są obsługiwane już od lat we wszystkich mi znanych przeglądarkach.

@moooka: zgadzamy się. Jednak przyznasz, że pisownia atrybutu name="nazwatablicy[]asdasd" nie jest do końca standardowa i o ten przypadek pytam, bo jednak krzaki w niespodziewanym miejscu często mogą przynieść niespodziewany efekt, którego nie przewidzę ;)
  • Odpowiedz
@moooka: @ufo99: btw, doczytałem trochę. Jednak sprawa leży po stronie serwera ;) Przeglądarka wysyła normalnie wszystkie nazwy w formie takiej, jaka jest w parametrze name, a samo przetworzenie tych kilku różnych nazw i złączenie ich w jedną tablicę nazwatablicy[] odbywa się już w PHP, więc powinno działać niezależnie od przeglądarki.

Tak samo jakbym normalnie, bez kombinowania bym nazywał te wszystkie checkboxy po prostu nazwatablicy[], to samo
  • Odpowiedz
@moooka: @ufo99:

This is a feature of the PHP language. In fact, the HTTP protocol does not forbid the use of multiple identical GET/POST parameters.


To my knowledge, this is a mechanism of PHP internally seeing (and parsing) elements passed via form (GET/POST) with the [] postfix and interpreting them as an array of elements. The HTTP protocol doesn't care, it merely passes the element's name with it's
  • Odpowiedz