konto usunięte

Temat: tablice otrzymane z _POST i ich wskaźniki

załóżmy, że mam taki kod po stronie html:

<input type="hidden" name="search[5]" value="3">
<input type="hidden" name="search[2]" value="3">
<input type="hidden" name="search[1]" value="3">

php tworzy z tego tabelę w _POST/_GET

search( 5 => 3, 2 => 3, 1 => 3);

i tu pytanie którego nie jestem w stanie szybko przetestować.
czy zawsze otrzymam te wartości w kolejności w której elementy input znajdują się w DOM ?
czy może któraś wersja PHP, ew. przeglądarka dokona przesortowania tego ?

(dodam że właśnie takie zachowanie, czyli bez sortowania, mnie interesuje).Krzysztof D. edytował(a) ten post dnia 30.06.12 o godzinie 19:57

konto usunięte

Temat: tablice otrzymane z _POST i ich wskaźniki

Nie mam zielonego pojecia jaka Ci to robi roznice - jak jest posortowane. Ale jesli robi, to mam wrazenie ze probujesz ze zlej strony ugryzc swoj problem.

Cokolwiek robisz, nie ufaj kolejnosci w jakiej to przydchodzi z GET czy POST, bo nie masz pojecia co przyjdzie. W tym momencie po prostu zaloz ze te dane sa losowo poukladane - tak bedzie bezpieczniej dla Ciebie :)

A jezeli masz taki problem i koniecznie zalezy Ci na postortowaniu wg swojego uznania - kaz PHP zawsze to robic ;)Andrzej Winnicki edytował(a) ten post dnia 30.06.12 o godzinie 19:31

konto usunięte

Temat: tablice otrzymane z _POST i ich wskaźniki

rozpisując przykład:

<input type="hidden" name="search[5][a]" value="3">
<input type="hidden" name="search[5][b]" value="3">
<input type="hidden" name="search[2][a]" value="3">
<input type="hidden" name="search[1][a]" value="3">

numer wpisany w search[X] jest istotny gdyż mam kilka elementów o tym samym numerze które mają być zgrupowane razem w tabeli.

użytkownik ma możliwość sortowania elementów za pomocą jquery sortable.

istotne zatem jest dla mnie otrzymanie ich w takiej kolejności jak są w DOM wpisane (tzn. posortowane przez użytkownika). no i działa, tylko naszło mnie pytanie czy zawsze.
Marcin Mackiewicz

Marcin Mackiewicz Programista JAVA, RS
Adware Polska

Temat: tablice otrzymane z _POST i ich wskaźniki

Bardzo dziwne pytanie... Element search[1] o wartości 3 zawsze będzie pod elementem search[1]. To samo dotyczy innych wartości tablicy. Nie ma różnicy jak masz ułożone elementy w strukturze. Zawsze zostaną zwrócone wartości na tych konkretnych miejscach tablicy. Jak chcesz mieć je w innej kolejności to użyj sortowania elementów. Wg tego kodu ostatni element w strukturze DOM będzie pierwszym elementem w tablicy. Piszesz, że chcesz mieć tak jak w DOM...
Pozmieniaj identyfikatory w DOM albo odwróć tablicę (sortowanie odwrotne) tak aby wartość elementu search[5] znalazła się w search[1].
Marcin Mackiewicz

Marcin Mackiewicz Programista JAVA, RS
Adware Polska

Temat: tablice otrzymane z _POST i ich wskaźniki

Pisze drugi raz bo się rozmowa rozwinęła...
To jak sobie użytkownik posortuje, poprzekłada czy poklika nie powinno mieć znaczenia :)
Ważne aby konkretna wartość była przypisana konkretnemu identyfikatorowi. Mnie nie interesuje czy element 204 tabeli jest wyświetlany użytkownikowi w wierszu 5. User może sobie np wpisać coś w wierszu 5 a ja zrobię update w bazie danych w wierszu o id = 204

konto usunięte

Temat: tablice otrzymane z _POST i ich wskaźniki

bardzo dziwna odpowiedź, a nie pytanie.
nie mówię o przypisaniu wartości do innych wskaźników, tylko o kolejności wskaźników tabeli _POST.
pisałem też że brak sortowania mnie interesuje, więc nie wiem czemu mi proponujesz sortowanie.

konto usunięte

Temat: tablice otrzymane z _POST i ich wskaźniki

znalazłem odpowiedź:
http://stackoverflow.com/questions/1382931/are-the-ord...

http://www.w3.org/TR/html4/interact/forms.html#h-17.13.4

The control names/values are listed in the order they appear in the document.
Marcin Mackiewicz

Marcin Mackiewicz Programista JAVA, RS
Adware Polska

Temat: tablice otrzymane z _POST i ich wskaźniki

Właśnie miałem ci to samo przekleić :)

konto usunięte

Temat: tablice otrzymane z _POST i ich wskaźniki

To czekam teraz tylko az napiszesz, to co robisz i wysle POSTa w innej kolejnosci by zobaczyc co sie stanie :D

konto usunięte

Temat: tablice otrzymane z _POST i ich wskaźniki

w pierwszym poście chyba już napisałem że otrzymuję je w kolejności znajdowania się w DOM.
tak więc już napisałem skrypt. działa. naprawdę ! ;p
miałem małą wątpliwość czy zawsze będzie działał przy używaniu wskaźników, bo dokumentacja PHP jest dość nieprecyzyjna w tej kwestii.

http://docs.php.net/manual/en/faq.html.php#faq.html.ar...

ale skoro uważasz, że nie będzie działać to przedstaw przypadek w którym nie będzie działać.

konto usunięte

Temat: tablice otrzymane z _POST i ich wskaźniki

To jak PHP otrzymuje serwuje dane w skrypcie, nie zależy jedynie od tego jak je odbiera, ale też jak są wysyłane. Zapewne leci po parametrach żądania w takiej kolejności, w jakiej wysłała je przeglądarka...

Jeśli kolejność jest dla Ciebie istotna, to wysyłaj dodatkowy parametr (klucz) do sortowania i sortuj po stronie PHP. Nie powinieneś ufać kolejności zaserwowanej przez klienta HTTP.

konto usunięte

Temat: tablice otrzymane z _POST i ich wskaźniki

jak się z jakiegoś powodu okaże, że kolejność jest inna to pewnie tak zrobię. wymagałoby to napisania skryptu po stronie html tworząc dodatkową zmienną formularza z listą kolejności. potem dodatkowego kodu po stronie PHP przetwarzającego to i sortującego dane.

sęk w tym po co skoro działa. dłużej się nad tym zastanawiając dochodzę do wniosku że zawsze będzie działać, bo dlaczego PHP miałby te dane sortować. skoro nie sortuje kluczy tekstowych to i numerycznych nie będzie sortował.w przypadkach mieszanych pewnie trudno byłoby określić typ sortowania.

tak więc temat uważam za zamknięty, chyba że ktoś ma przykład gdzie coś takiego nie działa.

konto usunięte

Temat: tablice otrzymane z _POST i ich wskaźniki

Krzysztof D.:
dłużej się nad tym
zastanawiając dochodzę do wniosku że zawsze będzie działać

LOOLLL ;) Tym bardziej mam wrazenie ze po prostu nie masz pojecia jak rozwiazac swoj problem.
Zasada jest prosta: NIGDY nie ufaj danym wyslanym z internetu, do Twojego skryptu. Wszystko co jest w POST moze zostac wymyslone przez uzytkownika, wlacznie z headerami http...

Az sie glupio zapytam... czy dane ktore masz w POST sprawdzasz czy nie zawieraja zlosliwego kodu, zanim z nimi cos zrobisz, czy po prostu uzywasz i zapisujesz do bazy (czy cokolwiek tam z nimi robisz)? Podejrzewam ze na zywca po prostu uzywasz tych $_POSTow i ufasz ze nikt nic zlego nie bedzie chcial zrobic? :)

Jesli dzialanie Twojego skryptu opiera sie na kolejnosci danych, a nie ich kluczy z tablicy, czy samych zmiennych wysylanych - sugeruje wszystko skasowac, strzelic skrzynke piwa, obudzic sie jutro rano po resecie i zaczac od nowa ;)Andrzej Winnicki edytował(a) ten post dnia 30.06.12 o godzinie 22:20

konto usunięte

Temat: tablice otrzymane z _POST i ich wskaźniki

zacznij kolego od czytania ze zrozumieniem.
przeczytaj 10 razy co pisałem powyżej, a potem zastanów się co piszesz.

i odpuść już sobie.

konto usunięte

Temat: tablice otrzymane z _POST i ich wskaźniki

10 razy przeczytane... zycze powodzenia i szczescia (bedzie potrzebne) ;)Andrzej Winnicki edytował(a) ten post dnia 30.06.12 o godzinie 22:36

konto usunięte

Temat: tablice otrzymane z _POST i ich wskaźniki

Andrzej Winnicki:
Az sie glupio zapytam... czy dane ktore masz w POST sprawdzasz czy nie zawieraja zlosliwego kodu, zanim z nimi cos zrobisz, czy po prostu uzywasz i zapisujesz do bazy (czy cokolwiek tam z nimi robisz)? Podejrzewam ze na zywca po prostu uzywasz tych $_POSTow i ufasz ze nikt nic zlego nie bedzie chcial zrobic? :)
używam też pewnie register_globals i dane te wsadzam bezpośrednio do mysql_query
Jacek R.

Jacek R. programista

Temat: tablice otrzymane z _POST i ich wskaźniki

Gratuluje pomyślunku, jeśli opiera się logikę aplikacji na kolejności elementów w DOMie. Co z tego, że to działa, skoro jest to po prostu słabiutki design oprogramowania. Wystarczy, że firebugiem zmanipuluję kolejność elementów i Twój skrypt leży i kwiczy. Wystarczy, że userowi jakiś adblock coś przestawi w DOMie i Twój skrypt leży i kwiczy. Albo jakiś JavaScript coś zmieni (bo np inny programista będzie coś potrzebował poprawić i nie będzie się spodziewał, że opierasz logikę na tym, co przychodzi od usera).

Generalnie, to źle, jeśli wymyślasz takie rozwiązanie, ale nakierowany przez mądrych ludzi możesz swój błąd poprawić (o czym Andrzej od początku pisze). Natomiast jeśli komentarze konstruktywnej krytyki, wraz ze sposobem dobrego rozwiązania, odbierasz jako atak na siebie, to jesteś już skończony jako programista.

Co z tego, że to działa. Kiedyś przejedziesz się na braku ostrożności i wierze w użytkownika. Bo ja na przykład chętnie bym z premedytacją wysłał Ci odpowiednio spreparowane dane tylko po to, żeby wysypać aplikację ;)

konto usunięte

Temat: tablice otrzymane z _POST i ich wskaźniki

kolego, pisałem że o kolejności decyduje użytkownik. dostaje do tego narzędzie typu drag&drop w postaci jqueryui sortable.
zatem to czy użytkownik skorzysta z gotowego narzędzia czy zmanipuluje DOM korzystając z innego narzędzia nie robi dla mnie różnicy. nadal jest to input od użytkownika.

dalej idąc sugerowanym sposobem przez jquery do wysyłania nowej kolejnosci elementów jest użycie metody serialize
http://jqueryui.com/demos/sortable/#method-serialize
która nie robi nic innego jak iteruje po elementach i tworzy zmienną tekstową wyglądającą następująco:
setname[]=number&setname[]=number
którą jak podaje dokumentacja może zostać dołączona do url

a zatem tworząc po stronie PHP tablicę w _GET lub _POST z elementami ułożonymi dokładnie tak jak w DOM, bo tak działa interacja po elementach DOM.
a zatem sami twórcy jquery zakładają to samo co ja, czyli że kolejność setname[] w url będzie taka sama w PHP.
jak uważasz że są w błędzie to napisz do nich.

powtarzając się, moja aplikacja nie popiera swojego poprawnego działania na otrzymaniu elementów formularza w założonej przeze mnie kolejności, tylko na kolejności ustalonej przez użytkownika.

teoretycznie żadna przeglądarka nie dokona zmiany kolejności elementów podczas przesłania formularza, gdyż takie jest założenie html, a dowody na to podałem powyżej w postaci linków.
kolejna sprawa to to że żadna przeglądarka nie zmieni kolejności elementów na podstawie nazwy z [x] gdyż dla js to jest nazwa zmiennej a nie wskaźnik tablicy.
a zatem <input name="trololo[12]" value=10> jest nadal w js zmienną o nazwie trololo[12] a nie tablicą trololo z elementem 12 o wartości 10. jeśli jest inaczej to daj znać. może się mylę.

problem leży głównie po stronie PHP, gdyż dokumentacja nie jest jasna w tej kwestii.
przetestowałem dla kilku wersji PHP i otrzymuję ten sam wynik, a zatem elementy w tablicy są w takiej kolejności w jakiej znajdują się w DOM, o czym pisałem już w pierwszym poście.
i pytanie dotyczyło głównie czy stosowanie wskaźników po stronie html zmieni kolejność.
natomiast zamiast otrzymać odpowiedź w tej kwestii każdy postanowił skrytykować sam kod. taki widocznie urok tego forum.

oczywiście jak pisałem powyżej mogę dołączyć funkcję js do onsubmit i wygenerować sobie zmienną zawierającą kolejność elementów w postaci 2,4,3,1 rozdzielając przecinkiem czy innym znakiem i potem to sparsować po stronie PHP, ale idąc waszym rozumowaniem ta zmienna tez może zostać zmanipulowana, więc wracamy do początku. i tu znowu pojawia się kwestia : nie interesuje mnie czy użytkownik zmanipuluje kolejność, bo taką możliwość już użytkownikowi dałem. A zatem interesuje mnie tylko i wyłącznie zmanipulowanie tej kolejności przez przeglądarkę, PHP, ew. proxy pomiędzy, antywirus itp.

wracając do obrażania się. ktoś kto zamiast podania przykładów i konkretnej krytyki pisze co ja niby robię po stronie PHP nie widząc mojego kodu jest po prostu żałosny i tyle. argumentacja w stylu "pewnie nie sprawdzam danych i od razu wrzucam do bazy" jest na poziomie podstawówki.
typowy brak argumentów zakończony inwektywami.

piszesz że "mądrzy" ludzie podają mi rozwiązania. gdzie ?
cały temat jest w stylu : pytanie " jak wymienić żarówkę migacza w maluchu", a poniżej 20 odpowiedzi, "pozbądź się tego trupa", "kto jeszcze używa malucha", "kup sobie za 2 tys starego golfa będzie lepszy", a odpowiedzi jak wymienić żarówkę to nie ma.

napisałem tutaj posta właśnie po to by uzyskać konkretne informacje wynikające z doświadczenia, niestety nie doczekałem się. możliwe że ktoś jeszcze się zreflektuje. Krzysztof D. edytował(a) ten post dnia 20.07.12 o godzinie 18:24
Sławomir Jach

Sławomir Jach Programista,
DreamLab

Temat: tablice otrzymane z _POST i ich wskaźniki

Krzysztof D.:
napisałem tutaj posta właśnie po to by uzyskać konkretne informacje wynikające z doświadczenia, niestety nie doczekałem

Doczekałeś się :) Wszyscy Ci mówią jedną zasadniczą prawdę - nie bazuj logiki aplikacji na strukturze DOM, prędzej czy później się na tym przejedziesz, czy to będzie klient używający Twojej aplikacji na egzotycznej przeglądarce na ipadzie czy szef z zainstalowanymi super extra pluginami do firefoxa, które robią cuda w domie.
Daniel Cabaj

Daniel Cabaj Lider Zespołu

Temat: tablice otrzymane z _POST i ich wskaźniki

Tutaj nie chodzi o to, czy PHP/przeglądarka zachowa kolejność, tylko o to, że takie rozwiązanie jest nieleganckie i bardzo łatwo popełnić błąd nie podając co się właściwie chce osiągnąć.
Formularz przecież można budować na zasadzie, że każdą zmienną nazwie się data[], a później robić magię po stronie php w stylu, że jeśli jest to pierwszy element to będzie oznaczał imię, jeśli drugi to nazwisko itd. To będzie działać, ale nie o to chodzi.



Wyślij zaproszenie do