Imaginarni submit php. Html obrasci: php obrazac - pošaljite zahtjev na istu stranicu. Kako izbjeći probleme sa PHP _SELF

Dugo sam razmišljao koji naslov da dam ovom članku i nisam mogao smisliti ništa bolje. Ovo je jedini naslov koji bar nekako odražava suštinu navedenog. Da budem iskren, ne znam kako se pravilno zove, pa sam članak nazvao na isti način na koji sam pokušao pronaći barem neke informacije u tražilici o ovoj temi.

Na jednom od sajtova, trebalo je da koristim dva dugmeta za slanje u jednom obrascu, koji bi slali popunjene podatke različitim PHP „handlerima“, u zavisnosti od toga kada je dugme pritisnuto. Gugl mi nije ništa razumno odgovorio, očigledno nisam to pitao kako treba, pa sam morao sam da smislim.

Tako da sam to izložio na vaše razmatranje.

Suština problema

Nakon što sam ga sam implementirao, ipak sam pronašao nekoliko rješenja koja su se bazirala na korišćenju običnih dugmadi na koje je bio pričvršćen JS.

Realizovao sam svoj plan na skoro isti način, ali sam koristio standardni tip podnošenja. Čini se da sve funkcionira i po mom mišljenju je moje rješenje logičnije ispravnije.

Ovo rješenje će jednako dobro funkcionirati i na besplatnom hostingu i ako odaberete profesionalni hosting. Ova metoda je u potpunosti implementirana na strani klijenta i ne bi trebala usporavati server.

Da biste lakše razumjeli šta želim i kako to funkcionira, evo jednog stvarno funkcionalnog primjera, u obliku obrasca koji ima 2 submita koji šalju podatke na različite stranice.

Jedna od sjajnih stvari kod PHP-a je način na koji radi sa HTML formama. Glavna stvar ovdje je da svaki element forme automatski postaje dostupan vašim PHP programima. Za detaljne informacije o korištenju obrazaca u PHP-u, pročitajte odjeljak. Evo primjera HTML obrasca:

Primjer #1 Najjednostavniji HTML obrazac

Tvoje ime:

Tvoje godine:

Nema ništa posebno u vezi sa ovom formom. Ovo je običan HTML obrazac bez posebnih oznaka. Kada korisnik popuni formular i klikne na dugme za slanje, biće pozvana stranica action.php. Ovaj fajl može imati nešto poput:

Primjer #2 Prikaz podataka obrasca

Zdravo, .
Ti si star.

Primjer izlaza ovog programa:

Zdravo, Sergej. Imaš 30 godina.

Ako ne uzmete u obzir dijelove koda sa htmlspecialchars() i (int), princip rada ovog koda trebao bi biti jednostavan i razumljiv. htmlspecialchars() osigurava da su "posebni" HTML znakovi ispravno kodirani tako da zlonamjerni HTML ili Javascript ne budu umetnuti u vašu stranicu. Polje starosti, za koje znamo da treba da bude broj, možemo jednostavno pretvoriti u cijeli broj, koji će se automatski riješiti neželjenih znakova. PHP to takođe može učiniti automatski koristeći ekstenziju filtera. PHP varijable $_POST["name"] i $_POST["age"] automatski postavlja za vas. Ranije smo koristili superglobalnu varijablu $_SERVER, ali ovdje također koristimo superglobalnu varijablu $_POST, koja sadrži sve POST podatke. primeti, to način slanja(metoda) našeg obrasca je POST. Ako bismo koristili metodu GET, tada bi informacije našeg obrasca bile u superglobalnoj varijabli $_GET. Alternativno, možete koristiti varijablu $_REQUEST ako izvor podataka nije bitan. Ova varijabla sadrži mješavinu podataka GET, POST, COOKIE.

prije 15 godina

Prema HTTP specifikaciji, trebali biste koristiti metodu POST kada koristite obrazac da promijenite stanje nečega na kraju servera. Na primjer, ako stranica ima obrazac koji omogućava korisnicima da dodaju svoje komentare, poput ovog stranica ovdje, obrazac bi trebao koristiti POST. Ako kliknete na "Ponovo učitaj" ili "Osvježi" na stranici do koje ste došli putem POST-a, to je skoro uvijek greška -- ne biste trebali dvaput objavljivati ​​isti komentar -- zbog čega ove stranice nisu označene ili keširane.

Trebali biste koristiti metodu GET kada vaš obrazac, pa, uzima nešto sa servera i zapravo ništa ne mijenja. Na primjer, obrazac za tražilicu bi trebao koristiti GET, budući da pretraživanje web stranice ne bi trebalo mijenjati ništa do čega bi klijent mogao brinuti, a označavanje ili keširanje rezultata upita tražilice jednako je korisno kao označavanje ili keširanje statičnu HTML stranicu.

Prije 2 godine

Vrijedi pojasniti:

POST nije sigurniji od GET-a.

Razlozi za odabir GET naspram POST-a uključuju različite faktore kao što su namjera zahtjeva (da li "podajete" informacije?), veličina zahtjeva (postoje ograničenja koliko URL može biti dugačak i GET parametri se šalju u URL) i koliko lako želite da se radnja može dijeliti -- Na primjer, Google pretraživanja su GET jer olakšava kopiranje i dijeljenje upita za pretraživanje s nekim drugim jednostavnim dijeljenjem URL-a.

Sigurnost je ovdje samo razmatranje zbog činjenice da je GET lakše dijeliti nego POST. Primjer: ne želite da GET šalje lozinku, jer korisnik može podijeliti rezultirajući URL i nehotice otkriti svoju lozinku.

Međutim, GET i POST podjednako lako mogu presresti dobro postavljena zlonamjerna osoba ako ne implementirate TLS/SSL da zaštitite samu mrežnu vezu.

Svi obrasci koji se šalju preko HTTP-a (obično port 80) su nesigurni, a danas (2017.) nema mnogo dobrih razloga da javna web stranica ne koristi HTTPS (što je u osnovi HTTP + sigurnost transportnog sloja).

Kao bonus, ako koristite TLS, minimizirate rizik da vaši korisnici dobiju kod (AD-ove) ubačen u vaš promet koji niste tamo stavili vi.

POST i GET metode se uglavnom koriste za prijenos parametara iz sila. Glavna razlika između POST i GET metoda je način na koji se informacije prenose. U metodi GET parametri se prosleđuju kroz adresnu traku (URL), tj. u zaglavlju HTTP zahtjeva, dok se u POST metodi parametri prenose kroz tijelo HTTP zahtjeva i ne odražavaju se u adresnoj traci.

1. Dugmad - Tag

Oznaka kreira dugmad na web stranici i njena radnja liči na rezultat dobiven korištenjem oznake (sa parametrom type="button | reset | submit"). Za razliku od ove oznake, nudi napredne opcije za kreiranje dugmadi. Na primjer, na takvo dugme možete postaviti bilo koje HTML elemente, uključujući slike. Koristeći stilove, možete definirati izgled gumba promjenom fonta, boje pozadine, veličine i drugih parametara.

U teoriji, oznaka bi trebala biti smještena unutar forme koju je postavio element. Međutim, pretraživači ne prikazuju poruku o grešci i rade ispravno s oznakom ako se ona sama naiđe. Međutim, ako želite da pošaljete rezultat klika na dugme serveru, on se mora staviti u kontejner. Završna oznaka je obavezna.

Opcije:

onemogućeno - blokira pristup i modifikaciju elementa.

tip - tip dugmeta

value - Vrijednost dugmeta koja će biti poslana na server ili pročitana pomoću spritova.

Dugme sa tekstom

Parametar DISABLED Blokira pristup i modifikaciju dugmeta. U tom slučaju je prikazan sivo i korisnik ga ne može aktivirati. Osim toga, takvo dugme ne može dobiti fokus pritiskom na tipku Tab, korištenjem miša ili na neki drugi način. Međutim, ovo stanje dugmeta se može promeniti putem skripti.

Aktivno dugme Neaktivno dugme

Parametar TYPE Određuje tip dugmeta koji postavlja njegovo ponašanje na obrascu. Različite vrste dugmadi se ni po čemu ne razlikuju po izgledu, ali svako dugme ima svoje funkcije. Zadana vrijednost: dugme.

Argumenti:

dugme - Uobičajeno dugme.

reset - Dugme za brisanje unesenih podataka obrasca i vraćanje vrijednosti u prvobitno stanje.

Pošalji - Dugme za slanje podataka obrasca na server.

Očisti obrazac Pošalji obrazac

Parametar VRIJEDNOST Određuje vrijednost gumba koji će biti poslan serveru. Par “ime=value” se šalje na server, gdje je ime specificirano parametrom name oznake, a vrijednost je specificirana parametrom vrijednosti. Značenje se može ili poklapati sa tekstom na dugmetu ili biti nezavisno. Parametar vrijednosti se također koristi za pristup podacima putem skripti.

Pošaljite obrazac

1.1. Dugme (tip unosa=dugme) 1.2. Dugme sa slikom (vrsta unosa=slika) Dugme sa slikom

Dugmad sa slikama su po akciji slične tipki Submit, ali predstavljaju sliku. Da biste to učinili, postavite type=image i src="image.gif" .

Kada korisnik klikne bilo gdje na sliku, odgovarajući obrazac će biti dostavljen serveru sa dvije dodatne varijable - sub_x i sub_y . Sadrže koordinate korisnika koji klikne na sliku. Iskusni programeri mogu primetiti da imena promenljivih koje šalje pretraživač zapravo sadrže tačku umesto donje crte, ali PHP automatski pretvara tačku u donju crtu.

1.3. Dugme za slanje obrasca (vrsta unosa=pošalji)

Služi za slanje obrasca u skriptu. Kada kreirate dugme za slanje obrasca, morate navesti 2 atributa: type="submit" i value="Tekst dugmeta" . Атрибут name необходим, если кнопка не одна, а несколько и все они созданы для разных операций, например кнопки "Сохранить", "Удалить", "Редактировать" и т.д. После нажатия на кнопку сценарию передается строка имя=текст кнопки.!}

Nije potrebna PHP skripta.

1.4. Niz dugmadi (pošalji) za odabir opcije radnje 2. Dugme za resetiranje obrasca (Reset)

Kada kliknete na dugme za resetovanje, svi elementi obrasca će biti postavljeni u stanje koje je navedeno u podrazumevanim atributima, a obrazac neće biti poslat.

Nije potrebna PHP skripta.

3. Potvrdni okvir

Potvrdni okviri pružaju korisniku brojne opcije i omogućavaju proizvoljan odabir (nijedna, jedna ili više njih).

Bijelo
Zeleno
Plava
Crveni
Crna

// prvi set dugmadi
// drugi set dugmadi
// treći set dugmadi

5. Polje za tekst (tekst)

Prilikom kreiranja običnog tekstualnog polja veličine veličine i maksimalne dozvoljene dužine znakova maksimalne dužine, atribut type preuzima vrijednost text . Ako je parametar vrijednosti specificiran, polje će prikazati vrijednost specificiranu u varijabli. Prilikom kreiranja polja ne zaboravite navesti naziv polja, jer... ovaj atribut je obavezan.

6. Polje za lozinku

Potpuno isto kao i tekstualno polje, osim što znakovi koje je korisnik ukucao neće biti prikazani na ekranu.

7. Skriveno tekstualno polje (skriveno)

Omogućava vam da prosledite neke servisne informacije skripti bez prikazivanja na stranici.

8. Padajuća lista (odaberite)

Oznaka je padajuća ili proširena lista, a jedan ili više redova se može odabrati u isto vrijeme. Ali vrijednost će biti proslijeđena posljednjem odabranom gumbu.

Lista počinje uparenim oznakama. Oznake vam omogućavaju da definirate sadržaj liste, a parametar vrijednosti definira vrijednost niza. Ako je odabrani parametar naveden u oznaci, tada će red biti inicijalno odabran. Parametar veličine određuje koliko će redova lista zauzimati. Ako je veličina 1, tada će lista biti padajući meni. Ako je naveden višestruki atribut, tada se može odabrati više elemenata sa liste. Ali ova shema se praktički ne koristi, a s veličinom = 1 nema smisla.

Bijela Zelena Plava Crvena Crna

Ako trebate kreirati padajući meni s predvidljivim slijedom. Na primjer, lista sa godinama od 2000. do 2050. Tada se koristi sljedeća tehnika.

9. Višelinijsko polje za unos teksta (područje teksta)

Polje za unos teksta u više redova omogućava vam da pošaljete ne samo jedan red, već nekoliko odjednom. Ako je potrebno, možete odrediti atribut readonly, koji zabranjuje uređivanje, brisanje i promjenu teksta, tj. tekst će biti samo za čitanje. Ako je potrebno da se tekst inicijalno prikaže u višelinijskom polju za unos, onda se mora postaviti između oznaka.

Postoji parametar premotavanja - podešavanje prelamanja linija. Moguće vrijednosti:

isključeno - onemogućava premotavanje linija;

virtuals - prikazuje prijelome reda, ali šalje tekst onako kako je unet;

fizički - prelomi redova su ostavljeni u izvornom obliku.

Podrazumevano, oznaka stvara prazno polje koje je široko 20 znakova i sastoji se od 2 reda.


Da bi tekstualno polje sa više redaka bilo u skladu sa html formatiranjem (prelamanje reda pomoću oznake
ili
), zatim koristite funkciju nl2br():

Originalno umetnuta linija 1 Originalno umetnuta linija 2 Originalno umetnuta linija 3

10. Dugme za upload fajlova (pregledaj)

Služi za implementaciju učitavanja fajlova na server. Prilikom kreiranja tekstualnog polja, također morate navesti tip polja kao "file".

Upload fajl:

NAČINI KOMUNICIRANJA PRETRAŽIVAČA SA SERVEROM

Postoji nekoliko metoda koje pruža HTTP protokol. Ovo je važna informacija. Nema drugih načina. U praksi se koriste dva: GET je kada se podaci prenose u adresnu traku, na primjer, kada korisnik klikne na vezu. POST - kada klikne na dugme na obrascu.

GET metoda

Da biste prenijeli podatke metodom GET, ne morate kreirati obrazac na HTML stranici (niko vam ne zabranjuje korištenje formulara za zahtjeve metodom GET - ali ovo je glupost) - samo link na dokument s dodatkom string upita koji može izgledati kao parovi varijabla=vrijednost se kombinuju pomoću znaka & i string se dodaje URL-u stranice pomoću upitnika “? "

Ali ne morate koristiti parove ključ=vrijednost ako trebate proslijediti samo jednu varijablu; da biste to učinili, trebate napisati VRIJEDNOST (ne ime) varijable nakon znaka pitanja.

Prednost prosljeđivanja parametara na ovaj način je u tome što klijenti koji ne mogu koristiti POST metodu (na primjer, tražilice) i dalje mogu jednostavno proslijediti parametre skripti slijedeći vezu i primiti sadržaj.

Loša strana je u tome što jednostavnom promjenom parametara u adresnoj traci korisnik može okrenuti skriptu na nepredvidiv način, što stvara ogromnu sigurnosnu rupu kada se kombinuje sa nedefiniranim varijablama i register_globals uključenim ili neko može saznati vrijednost važne varijable (kao ID sesije) samo gledanjem na ekran monitora.

Za pristup javnim stranicama prosljeđivanjem parametara (povećana funkcionalnost)

Prijenos informacija koji ne utiču na nivo sigurnosti

Za pristup zaštićenim stranicama s proslijeđenim parametrima

Za prijenos informacija koje utiču na nivo sigurnosti

Za prijenos informacija koje korisnik ne može mijenjati (neki prenose tekst SQL upita.

POST metoda

Podatke možete poslati metodom POST samo pomoću obrasca na HTML stranici. Glavna razlika između POST-a i GET-a je u tome što se podaci ne prenose u zaglavlju zahtjeva već u tijelu, stoga ih korisnik ne vidi. Može se mijenjati samo promjenom samog oblika.

prednost :

Veća sigurnost i funkcionalnost za zahtjeve koji koriste POST obrasce.

mana :

Manja dostupnost.

Za šta ga trebate koristiti:

Za prijenos velike količine informacija (tekst, fajlovi..);

Za prijenos bilo koje važne informacije;

Za ograničavanje pristupa (na primjer, koristite samo obrazac za navigaciju - opcija nije dostupna svim robotskim programima ili grabežljivcima sadržaja).

Za šta se ne smije koristiti:

Bez ograničenja.

Učitavanje datoteka pomoću POST metode

PHP može prihvatiti datoteku preuzetu pomoću bilo kojeg pretraživača. Ovo omogućava učitavanje i tekstualnih i binarnih datoteka. U kombinaciji sa PHP autentifikacijom i funkcijama sistema datoteka, imate potpunu kontrolu nad tim kome je dozvoljeno da učitava datoteke i šta da radite sa fajlom nakon što je učitan.

Stranica za učitavanje datoteke može se implementirati pomoću posebnog obrasca koji izgleda otprilike ovako:

//Formular za upload fajlova Pošaljite ovaj fajl:

U gornjem primjeru, "_URL_" treba zamijeniti vezom do PHP skripte. Skriveno polje MAX_FILE_SIZE (vrijednost mora biti specificirana u bajtovima) mora prethoditi polju za odabir datoteke, a njegova vrijednost je maksimalna dozvoljena veličina datoteke koja se prihvaća. Također biste trebali biti sigurni da ste naveli enctype="multipart/form-data" u atributima obrasca, inače datoteke neće biti učitane na server.

Pažnja

Opcija MAX_FILE_SIZE je preporuka pretraživača, čak i ako bi PHP također provjerio ovaj uslov. Zaobilaženje ovog ograničenja na strani pretraživača je prilično jednostavno, tako da se ne biste trebali oslanjati na ovu funkciju za blokiranje svih većih datoteka. Međutim, ne postoji način da se zaobiđe PHP-ovo ograničenje maksimalne veličine. Svejedno biste trebali dodati varijablu oblika MAX_FILE_SIZE, jer ona sprječava korisnike da uznemireno čekaju dok prenose ogromne datoteke, samo da bi otkrili da je datoteka prevelika i prijenos zapravo nije uspio.

Kako definirati metodu zahtjeva?

Direktno:

Getenv("REQUEST_METHOD");

će vratiti GET ili POST.

Koju metodu treba koristiti?

Ako se formular koristi za traženje nekih informacija, na primjer tokom pretraživanja, onda ga treba poslati metodom GET. Da biste mogli ažurirati stranicu, možete je označiti i ili poslati link prijatelju.

Ako se kao rezultat slanja obrasca podaci zabilježe ili promijene na serveru, onda ih treba poslati POST metodom, a nakon obrade obrasca imperativ je preusmjeriti pretraživač metodom GET. Takođe, POST može biti potreban ako je potrebno prenijeti veliku količinu podataka na server (za GET je vrlo ograničen), kao i ako preneseni podaci ne bi trebali biti prikazani u adresnoj traci (prilikom unosa logina i lozinke, na primjer).

U svakom slučaju, nakon obrade POST-a, uvijek treba preusmjeriti pretraživač na neku stranicu, pa makar i istu, ali bez podataka obrasca, kako se prilikom osvježavanja stranice ne bi ponovo snimili.

Kako prenijeti podatke u drugu datoteku direktno iz tijela PHP programa koristeći GET i POST metode? Primjer za demonstriranje slanja podataka korištenjem POST i GET metoda istovremeno i primanja odgovora od servera.

Ovaj članak govori u detalje o korištenju PHP _SELF varijable.

Šta je PHP _SELF varijabla?

PHP _SELF varijabla vraća ime i putanju tekuće datoteke (u odnosu na korijen dokumenta). Ovu varijablu možete koristiti u atributu radnje obrasca. Postoje i neke nijanse koje biste trebali znati. Naravno, ne možemo zanemariti ove nijanse.

Pogledajmo nekoliko primjera.

Echo $_SERVER["PHP_SELF"];

1) Pretpostavimo da se vaš php fajl nalazi na sledećoj adresi:

Http://www.yourserver.com/form-action.php

U ovom slučaju, PHP _SELF varijabla će sadržavati:

"/form-action.php"

2) Pretpostavimo da se vaš php fajl nalazi na ovoj adresi:

Http://www.yourserver.com/dir1/form-action.php

PHP_SELF će biti:

"/dir1/form-action.php"

PHP _SELF u atributu akcije obrasca. Zašto je tamo bila potrebna?

Obično se PHP _SELF varijabla koristi u atributu akcije oznake obrasca. Atribut action specificira adresu na koju će biti poslan sadržaj obrasca nakon potvrde (korisnik klikne na dugme sa type="submit"). Po pravilu, ovo je ista stranica sa koje je obrazac otišao.

Međutim, ako preimenujete datoteku na koju upućuje obrazac, morat ćete preimenovati ime datoteke u atributu akcije, inače obrazac neće raditi.

PHP _SELF varijabla će vas spasiti od nepotrebnih ispravki, jer će adresa stranice biti generisana automatski na osnovu imena fajla.

Recimo da imate datoteku obrasca pod nazivom form-action.php i želite da se obrazac pošalje u istu datoteku nakon potvrde. Obično pišu ovako:

Ali možete koristiti PHP _SELF varijablu umjesto form-action.php. U ovom slučaju kod će izgledati ovako: