Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Sprawdzanie czy istnieje $_POST
Forum PHP.pl > Forum > PHP
menic
Sprawa tyczy się $_POST. Problem w tym, że jak w skrypcie napisze
if( isset($_POST) ) { echo 'jest'; } albo if( empty($_POST) ) { echo 'jest'; }
To zqwsze pokazuje sie jest, nawet jeżeli o żadnym forumularzu nie mam mowy :|
Dąże do tego aby rozróżnić czy jakaś tablica $_POST[] została utworzona w skrypcie.
spenalzo
Spróbuj może
[php:1:ce057a34fd]<?php
if(is_array($_POST))
{
echo "cośtam";
}
?>[/php:1:ce057a34fd]
menic
Tak też próbowałem :cry:
scanner
AFAIR superglobale tworzone są zawsze - inna sprawa, czy sa puste, czy nie. Może by tak sprawdzić [manual:fcc15c624a]sizeof()[/manual:fcc15c624a] dla tablicy?
menic
Cytat
AFAIR superglobale tworzone są zawsze - inna sprawa, czy sa puste, czy nie. Może by tak sprawdzić [manual:4a128fe843]sizeof()[/manual:4a128fe843] dla tablicy?

Co znaczy AFAIR :?:
Co do sizeof() to nie wpadłem winksmiley.jpg
scanner
Cytat
Co znaczy AFAIR
As Far As I Remember
e-Gandalf
Cytat
Sprawa tyczy się $_POST. Problem w tym, że jak w skrypcie napisze
if( isset($_POST) ) { echo 'jest'; } albo if( empty($_POST) ) { echo 'jest'; }
To zqwsze pokazuje sie jest, nawet jeżeli o żadnym forumularzu nie mam mowy :|


Bo nie sprawdzasz czy zostal wyslany formularz tylko czy zostala wyslana jakakolwiek zmienna POSTem. Jesli zostala, to empty($_POST) zawsze zwroci false.

Jezeli jedynym POSTem jaki wysylasz jest formularz to spokojnie mozesz sprawdzac empty($_POST) . Jesli Ci nie zadzialal, to musiales popelnic jakis blad...

Natomiast wygodniej jest w formularzu tworzyc jakas zmienna typu hidden i potem istnienie tego klucza sprawdzac w POST:
[xml:1:b402cf0b57]
<form action="" method="POST">
<input type="hidden" name="exec" value="true" />
</form>
[/xml:1:b402cf0b57]

a w kodzie:

[php:1:b402cf0b57]<?php
if (isset($_POST['exec'])) {print 'wyslano formularz';}
?>[/php:1:b402cf0b57][/xml]
sebus
Nie jestem pewien czy sie nie myle ale moze sproboj sprawdzic cos takiego...

[php:1:aaca4f325a]<?php
if (function_exists($_POST)) { echo "jest"; } else
{
echo "nie ma";
}
?>[/php:1:aaca4f325a]

Nie wiem na 100% czy to zadziala ale sprobowac mozna...
scanner
Cytat
Nie jestem pewien czy sie nie myle
A co ma zmienna do funkcji?
e-Gandalf
Cytat
Nie jestem pewien czy sie nie myle ale moze sproboj sprawdzic cos takiego...

[php:1:52c1d20ff9]<?php
if (function_exists($_POST))
?>[/php:1:52c1d20ff9]

Nie wiem na 100% czy to zadziala ale sprobowac mozna...


Intrygujace...

1) [manual:52c1d20ff9]http://pl.php.net/manual/en/reserved.variables.php#reserved.variables.post[/manual:52c1d20ff9]
Cytat
An associative array of variables passed to the current script via the HTTP POST method.


Cytat
Tablica asocjacyjna zmiennych otzymanych przez skrypt z metody POST protokolu HTTP.


2)
[manual:52c1d20ff9]http://pl.php.net/manual/en/function.function-exists.php[/manual:52c1d20ff9]

Cytat
Checks the list of defined functions, both built-in (internal) and user-defined, for function_name.


Cytat
Przeszukuje liste zdefiniowanych funkcji, zarowno wbudowanych jak i zadeklarowanych przez uzytkownika, w poszukiwaniu argumentu.


Jaki widzisz zwiazek?!?
menic
Nie moge dorzucić ukrytej zmiennej bo ma to sprawdzać, czy nikt nie podpiął sie pod skrypt. Ale użyłem count($_POST) i działa. Chyba że coś będzie bardzie cywilozowanego bo to aktualne to trochę takie lamerskie :oops: :oops:
e-Gandalf
Ale

[php:1:1b76c41811]<?php
count($_POST)
?>[/php:1:1b76c41811]

to to samo co

[php:1:1b76c41811]<?php
empty($_POST)
?>[/php:1:1b76c41811]

z ta roznica, ze przy empty tabica $_POST moglaby nie istniec (ale istnieje zawsze, wiec roznicy nie ma).

cunt() zwroci Ci 0 kiedy tablica jest pusta, empty() zwroci Ci 0 kiedy tablica nie pusta wiec wystarczy zanegowac i masz synonimy.

Natomiast nie rozumiem co zyskujesz nie dodajac zmiennej hidden. Jak to sprawdzasz czy nikt sie nie "podpial"? Jak mialby sie "podpiac"? hidden daje Ci po prostu semafor okreslajacy czy formularz zostal wyslany czy nie...
menic
to nie jest to samo. Bo to z count() działa a z empty nie tongue.gif
A co dotego podpinania. To ktoś zawsze może stworzyć formularz podobny jak na stronie i tą ukryta zmienna usunąć i po zabezpieczeniu winksmiley.jpg
scanner
A nie uważasz, że jeśli skopiuje Twoj formularz na moja strone i klikne submit, to dla skryptu to nie będzie żadna róznica? POST is POST.
menic
No tak. Ale to czy istnieje post było tylko po to aby wywołac funkcję. Jeżeli wysyłamy cos formularzem to uruchamia sie funkcja która sprawdza skąd formularz przyszedl. Jeżeli adres jest różny niż nazwa serwera to... tongue.gif zapomnij że cos prześlesz tongue.gif tongue.gif tongue.gif
e-Gandalf
To trzeba bylo od poczatku pisac jaki masz cel. Srodki ktorych probowales dobrac byly niezbyt adekwatne.

Jak juz napisal scanner, strach przed hiddenem to tak samo jakbys bal sie wstawic jakiekolwiek pole (nie wiem, name, login, email..) bo przeciez ktos moze wyciac...

Ja zawsze stosuje ten semafor - jest $_POST['exec'] ? no to jest formularz, nie ma? no to nie ma forumlarza i nic mnie nie obchodzi. Jesli zamiast tego chcesz sprawdzac czy cokolwiek przeszlo postem to mozesz zastosowac:

if (count($_POST)) {}

if (!empty($_POST)) {}

i uwierz, ze w tym zastosowaniu to JEST to samo, a jesli Ci nie dziala, to tylko znaczy, ze cos zle wpisujesz...
menic
żeczywiście z empty() działa smile.gif
(A czemu wczesniej nie chciało rolleyes.gif )
Ale co do tyego $_POST['exec'] to trochę nie rozumiem :|
Bo to co wymysliłem to tylko wsparcie. Bo skrypt sprawdza najpierw sesjie i potencjalna osoba która będzie chciała przechytrzyć będzie na to miała 30 minut, bo po takim czasie sesja wygasa i jest tworzona nowa. Jezeli nawet po tym czasie będzie chciał wykorzystac formularz z ID sesji to nic nie da. Na dodatek sprawdza jaki jest status sesji itp. ale to już na inny temat winksmiley.jpg
A chce zrobić to bez hidden, bo chce aby to wszystko był jak najbardzie zaautomatyzowane i i jednolite. Poprostu ma sprawdzac wszystkie formularze i tyle. A jak ktos zapomni dopisac hidden :?:
e-Gandalf
No ok, jesli potrzebujesz tylko sprawdzic czy jakies dane ida postem to odpowiednim rozwiazniem jest empty albo count.
tuzi
Cytat
Jeżeli wysyłamy cos formularzem to uruchamia sie funkcja która sprawdza skąd formularz przyszedl. Jeżeli adres jest różny niż nazwa serwera to... tongue.gif zapomnij że cos prześlesz tongue.gif tongue.gif tongue.gif


Wiesz, to wcale nie jest takie pewne :wink:. Sam tak myślałem jeszcze niedawno, ale natrafiłem na pewną, nazwijmy to, grę w necie (Ngsec). Drugi etap (z dziesięciu) to właśnie omijanie sprawdzania referera :wink: Tak więc (podobno :wink: ) można jakos to obejść.
e-Gandalf
I to banalnie... Mozilla ma odpowiedni dodatek, dzieki ktoremu mozesz wysylac dowolnego referera.
menic
Wszystko można obejśc nawet Pentagon laugh.gif laugh.gif laugh.gif
sebus
sorki ... faktycznie pomylilem sie...
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.