Nie można nadpisać POST w ciele klasy?, (wartości domyślne inputów) |
Nie można nadpisać POST w ciele klasy?, (wartości domyślne inputów) |
1.04.2012, 19:14:15
Post
#1
|
|
Grupa: Zarejestrowani Postów: 2 707 Pomógł: 290 Dołączył: 16.12.2008 Skąd: Śląsk Ostrzeżenie: (0%) |
Nie jest to jakoś szczególnie problematyczne ale nie umiem zrozumieć dlaczego tak jest. Kod:
Powyższy kod wyświetli jedynie drugi fragment - tj. pierwszy var_dump wskaże, że $_POST jest puste. Dlaczego tak się dzieje i dlaczego ten problem występuje wyłącznie w ciele klasy? Jeżeli napiszemy to poza klasą to działa zgodnie z założeniem. Na ten problem natrafiłem gdy chciałem w aplikacji MVC przekazać do widoku zmienną _POST. Bez MVC po prostu stosowałem $_POST = mysql_fetch_assoc(mysql_query(... które w prosty sposób pobierało wartości domyślne do inputów (kod był poniżej update). -------------------- |
|
|
1.04.2012, 19:35:33
Post
#2
|
|
Grupa: Zarejestrowani Postów: 450 Pomógł: 135 Dołączył: 18.11.2010 Skąd: Wschowa Ostrzeżenie: (0%) |
Wychodzi na to, że mamy dwie zmienne - lokalną $_POST i superglobalną $_POST.
Ale nie wiem czemu tak -------------------- “ Computers are good at following instructions, but not at reading your mind. ” - Donald Knuth |
|
|
1.04.2012, 19:59:25
Post
#3
|
|
Grupa: Zarejestrowani Postów: 43 Pomógł: 8 Dołączył: 11.08.2010 Ostrzeżenie: (0%) |
Nie jest to jakoś szczególnie problematyczne ale nie umiem zrozumieć dlaczego tak jest. Kod:
Powyższy kod wyświetli jedynie drugi fragment - tj. pierwszy var_dump wskaże, że $_POST jest puste. Dlaczego tak się dzieje i dlaczego ten problem występuje wyłącznie w ciele klasy? Jeżeli napiszemy to poza klasą to działa zgodnie z założeniem. Na ten problem natrafiłem gdy chciałem w aplikacji MVC przekazać do widoku zmienną _POST. Bez MVC po prostu stosowałem $_POST = mysql_fetch_assoc(mysql_query(... które w prosty sposób pobierało wartości domyślne do inputów (kod był poniżej update). Minuta googlowania: http://www.php.net/manual/en/language.vari...uperglobals.php "Note: Variable variables Superglobals cannot be used as variable variables inside functions or class methods. " |
|
|
1.04.2012, 20:15:23
Post
#4
|
|
Grupa: Zarejestrowani Postów: 2 707 Pomógł: 290 Dołączył: 16.12.2008 Skąd: Śląsk Ostrzeżenie: (0%) |
Ok, dzięki.
Teraz pytanie jak to obejść i jakoś w widoku nadpisać ten POST. Ostatecznie zrobię oddzielną tablicę $default ale nie każdy formularz buduje za pomocą klasy i zawsze to więcej kodu.. -------------------- |
|
|
1.04.2012, 20:28:36
Post
#5
|
|
Grupa: Zarejestrowani Postów: 43 Pomógł: 8 Dołączył: 11.08.2010 Ostrzeżenie: (0%) |
Szczerze mówiąc nie rozumiem twojego problemu. Czemu zamiast:
nie zrobisz po prostu: ewentualnie, każdy element posta sprawdzić, czy jest i jak nie ma to wtedy dopisać wartość domyślną. |
|
|
1.04.2012, 20:35:09
Post
#6
|
|
Grupa: Zarejestrowani Postów: 2 707 Pomógł: 290 Dołączył: 16.12.2008 Skąd: Śląsk Ostrzeżenie: (0%) |
Normalnie bym tak zrobił ale w MVC wartości do widoku przekazuje w taki sposób:
$this->registry->template->_POST. -------------------- |
|
|
1.04.2012, 23:57:24
Post
#7
|
|
Grupa: Zarejestrowani Postów: 4 655 Pomógł: 556 Dołączył: 17.03.2009 Skąd: Katowice Ostrzeżenie: (0%) |
A czemu w ogóle chcesz nadpisywać?
-------------------- Zainteresowania: C#, PHP, JS, SQL, AJAX, XML, C dla AVR
Chętnie pomogę, lecz zanim napiszesz: Wujek Google , Manual PHP |
|
|
2.04.2012, 00:55:54
Post
#8
|
|
Grupa: Zarejestrowani Postów: 2 707 Pomógł: 290 Dołączył: 16.12.2008 Skąd: Śląsk Ostrzeżenie: (0%) |
Wyjaśniłem w drugiej części pierwszego postu.
-------------------- |
|
|
2.04.2012, 07:10:21
Post
#9
|
|
Grupa: Zarejestrowani Postów: 589 Pomógł: 91 Dołączył: 22.05.2008 Skąd: Gliwice Ostrzeżenie: (0%) |
W widoku nadpisać POST... Hm... jak już to złe miejsce na takie rzeczy.
Po 2, przekazuj tablic a nie działaj na gołej zmiennej superglobalnej w klasie, kiedyś będziesz chciał coś zmienić na GET, będziesz musiał zmieniać wszystkie wystąpienia POST, nawet w prostym IDE to nie problem ale jak dla mnie tak się robić po prostu nie powinno.
Ten post edytował #luq 2.04.2012, 07:16:14 -------------------- Moja gra - scraby.io
|
|
|
2.04.2012, 09:13:30
Post
#10
|
|
Grupa: Zarejestrowani Postów: 2 707 Pomógł: 290 Dołączył: 16.12.2008 Skąd: Śląsk Ostrzeżenie: (0%) |
W żadnym wypadku nie chciałem tego robić w widoku.
Często mniej jednak kusi aby to zrobić z kontrolerze (zapytanie SQL). Przyglądam się Twojego przykładowi i chyba rozumiem. Metoda valid zwraca dane z POST, a w przypadku ich braku (nie wysłany formularz) dane defaultowe. Potem w widoku w inputach <?= $formValues['name']; ?>. W sumie to od początku było to moją alternatywną opcją tylko po prostu:
Ten post edytował markonix 2.04.2012, 09:14:35 -------------------- |
|
|
2.04.2012, 09:21:12
Post
#11
|
|
Grupa: Zarejestrowani Postów: 1 590 Pomógł: 185 Dołączył: 19.04.2006 Skąd: Gdańsk Ostrzeżenie: (0%) |
Normalną praktyką jest używanie requesta, który zawiera żądania POST, GET, zmienne serwerowe itp. itd. etc.
Dostęp do tego w kontrolerze np. taki:
Teraz możesz zmienną nadpisać/ustawić używając np. metody setParam. Jest to na pewno wygodniejsze niż korzystanie z "gołych" superglobalnych tablic. |
|
|
2.04.2012, 16:42:33
Post
#12
|
|
Grupa: Zarejestrowani Postów: 2 707 Pomógł: 290 Dołączył: 16.12.2008 Skąd: Śląsk Ostrzeżenie: (0%) |
Normalną praktyką jest używanie requesta, który zawiera żądania POST, GET, zmienne serwerowe itp. itd. etc. Ma to jakieś zalety ale czy to jest bezpieczne? Jak dobrze rozumiem z kilku tablic generowana jest jedna. Co jeżeli w POST i GET i mamy taki sam indeks? Co gorsza tablicą SERVER możemy manipulować przez GET np. http_referer=XYZ. -------------------- |
|
|
3.04.2012, 08:41:26
Post
#13
|
|
Grupa: Zarejestrowani Postów: 1 590 Pomógł: 185 Dołączył: 19.04.2006 Skąd: Gdańsk Ostrzeżenie: (0%) |
Kwestia ustalenia ważności, np. post nadpisuje get ale już nie server, nie widzę też problemu by wyłączyć możliwość nadpisywania niekórych zmiennych nawet z wewnątrz kontrolera przy użyciu ->setParam, można też zmienne grupować albo inaczej obsługiwać nadpisywanie zmiennych.
Dodatkowo taki obiekt request wyposażamy w inne przydatne metody typu ->isPost czy np. sprawdzenie czy żądanie jest wysyłane ajaxem. Wygodne to bo grupuje nam zmienne superglobalne i powiązane z nimi metody w jednym miejscu - a jak to okodujemy w szczegółach to już zależy od nas. |
|
|
3.04.2012, 20:40:44
Post
#14
|
|
Grupa: Zarejestrowani Postów: 2 707 Pomógł: 290 Dołączył: 16.12.2008 Skąd: Śląsk Ostrzeżenie: (0%) |
A miałoby sens set/get Param z drugim argumentem, który np. byłby defaultowo 'POST' i określałby do której tablicy się odwołujemy?
isPost to po prostu alias dla if($_POST) czy coś głębszego? -------------------- |
|
|
3.04.2012, 22:05:46
Post
#15
|
|
Grupa: Zarejestrowani Postów: 1 590 Pomógł: 185 Dołączył: 19.04.2006 Skąd: Gdańsk Ostrzeżenie: (0%) |
Z tego co wiem isPost() sprawdza po prostu, czy została wysłana tablica post i zwraca true albo false.
W np. Zend Frameworku drugi parametr to defaultowa wartość zmiennej, coś w stylu:
Natomiast ja to widzę bardziej tak:
Zależy, jak okodujemy. |
|
|
Wersja Lo-Fi | Aktualny czas: 27.05.2024 - 03:03 |