Ja ). Selleks kasutatakse atribuutide komplekti formation , formmethod , formenctype ja formtarget, mis on vastavate atribuutide analoogid ilma vormi eesliiteta. Näide 4 näitab nende atribuutide kasutamist.Näide 4: vormi esitamine
HTML5 IE Cr Op Sa Fx
Vormi esitamine
Mõned brauserid, eriti Internet Explorer ja Safari, ei toeta kõiki uusi vormiatribuute.
Üks populaarsemaid funktsioone saidil on taotlus- või tellimisvorm, mille andmed saadetakse e-posti teel saidi omanikule. Reeglina on sellised vormid lihtsad ja koosnevad kahest või kolmest andmesisestusväljast. Kuidas sellist tellimisvormi koostada? See eeldab HTML märgistuskeele ja PHP programmeerimiskeele kasutamist.
HTML märgistuskeel ise on lihtne, peate lihtsalt välja mõtlema, kuidas ja kuhu teatud sildid panna. PHP programmeerimiskeelega on asjad veidi keerulisemad.
Programmeerija jaoks pole sellise vormi loomine keeruline, kuid HTML-i küljenduskujundaja jaoks võivad mõned toimingud tunduda keerulised.
Looge andmete esitamise vorm html-is Esimene rida on järgmine
Nüüd paneme kõik kokku.
Nüüd muudame vormis olevad väljad kohustuslikuks. Meil on järgmine kood:
Looge fail, mis aktsepteerib HTML-vormingus andmeid See on fail nimega send.php
Failis peate esimeses etapis vastu võtma postituste massiivi andmed. Selleks loome kaks muutujat:
$fio = $_POST["fio"]; $email = $_POST["e-post"];
PHP-s on muutujate nimede ees $-märk ja iga rea lõppu asetatakse semikoolon. $_POST on massiiv, kuhu saadetakse vormi andmed. HTML-vormingus on saatmisviisiks määratud method="post". Seega aktsepteeritakse kaks muutujat html-vormist. Oma saidi kaitsmiseks peate need muutujad läbima mitme filtri - php funktsioonid.
Esimene funktsioon teisendab kõik märgid, mida kasutaja proovib vormile lisada:
Sel juhul ei looda php-s uusi muutujaid, vaid kasutatakse olemasolevaid. Filter muudab tegelase "<" в "<". Также он поступить с другими символами, встречающимися в html коде.
Teine funktsioon dekodeerib URL-i, kui kasutaja proovib seda vormile lisada.
$fio = urldekood($fio); $email = urldecode($email);
Kolmanda funktsiooniga eemaldame rea algusest ja lõpust tühikud, kui neid on:
$fio = trimmi($fio); $email = trimmi($email);
On ka muid funktsioone, mis võimaldavad teil php muutujaid filtreerida. Nende kasutamine sõltub sellest, kui mures te olete, et ründaja proovib sellele html-meili esitamise vormile programmikoodi lisada.
HTML-vormingust PHP-faili edastatud andmete valideerimine
Et kontrollida, kas see kood töötab ja kas andmeid edastatakse, saate selle lihtsalt kajafunktsiooni abil ekraanile kuvada:
kaja $fio; kaja" "; kaja $fio;
Teine rida siin on vajalik php muutujate väljundi eraldamiseks erinevateks ridadeks.
Vastuvõetud andmete saatmine HTML-vormilt e-posti, kasutades PHP-d Andmete e-posti teel saatmiseks peate kasutama PHP-s postifunktsiooni.
mail("millele aadressile saata", "kirja teema", "Sõnum (kirja sisu)","From: milliselt meililt kiri saadetakse \r\n");
Näiteks peate saatma andmed saidi omaniku või halduri meilile [e-postiga kaitstud] .
Kirja teema peaks olema selge ja kirja sõnum peaks sisaldama seda, mida kasutaja HTML-vormis määras.
mail (" [e-postiga kaitstud] ", "Rakendus saidilt", "Täisnimi:".$fio.". E-post: ".$email ,"Saatja: [e-postiga kaitstud] \r\n");
Vajalik on lisada tingimus, mis kontrollib, kas vorm saadeti PHP-ga määratud meiliaadressile.
if (mail(" [e-postiga kaitstud] ", "Telli saidilt", "Täisnimi:".$fio.". E-post: ".$email ,"Saatja: [e-postiga kaitstud] \r\n")) { echo "sõnum edukalt saadetud"; ) muidu ( }
Seega näeb faili send.php programmikood, mis saadab HTML-vormingud meilile, välja järgmine:
$fio = $_POST["fio"]; $email = $_POST["e-post"]; $fio = htmlspecialchars($fio); $email = htmlspecialchars($email); $fio = urldekood($fio); $email = urldecode($email); $fio = trimmi($fio); $email = trimmi($email); //kaja $fio; //kaja " "; //echo $email; if (mail(" [e-postiga kaitstud] ", "Rakendus saidilt", "Täisnimi:".$fio.". E-post: ".$email ,"Saatja: [e-postiga kaitstud] \r\n")) ( echo "sõnum edukalt saadetud"; ) muidu ( kaja "teate saatmisel tekkisid vead"; }?>
Kolm rida, et kontrollida, kas andmeid edastatakse faili, on välja kommenteeritud. Vajadusel saab neid eemaldada, kuna neid oli vaja ainult silumiseks.
Vormi esitamise HTML- ja PHP-koodi paneme ühte faili Selle artikli kommentaarides esitavad paljud inimesed küsimuse, kuidas veenduda, et nii HTML-vorm kui ka PHP-kood andmete e-posti saatmiseks on ühes failis, mitte kahes.
Selle töö realiseerimiseks tuleb faili send.php paigutada vormi HTML kood ja lisada tingimus, mis kontrollib muutujate olemasolu POST-massiivis (see massiiv saadetakse vormilt). See tähendab, et kui massiivi muutujaid pole, peate kasutajale vormi näitama. Vastasel juhul peate massiivist andmed vastu võtma ja saatma need adressaadile.
Vaatame, kuidas muuta PHP-koodi failis send.php:
Taotlusvorm saidilt //kontrollige, kas POST-massiivis on muutujaid if(!isset($_POST["fio"]) ja !isset($_POST["e-post"]))( ?>
) muidu ( //näita vormi $fio = $_POST["fio"]; $email = $_POST["e-post"]; $fio = htmlspecialchars($fio); $email = htmlspecialchars($email); $fio = urldekood($fio); $email = urldecode($email); $fio = trimmi($fio); $email = trimmi($email); if (mail(" [e-postiga kaitstud] ", "Rakendus saidilt", "Täisnimi:".$fio.". E-post: ".$email ,"Saatja: [e-postiga kaitstud] \r\n"))( kaja "Sõnum edukalt saadetud"; ) muidu ( kaja "Sõnumi saatmisel ilmnesid vead"; } } ?>
Muutuja olemasolu POST-massiivis kontrollime PHP funktsiooniga isset(). Hüüumärk selle funktsiooni ees tingimuses tähendab eitust. See tähendab, et kui muutujat pole olemas, peame näitama oma vormi. Kui ma poleks hüüumärki pannud, tähendaks tingimus sõna-sõnalt „kui on olemas, siis näita vormi”. Ja see on meie puhul vale. Loomulikult saate selle ümber nimetada index.php-ks. Kui nimetate faili ümber, ärge unustage rea faili nime ümber nimetada
Kui salvestate selle koodi HTML-faili ja vaatate seda oma lemmikbrauseriga, näete tuttavat HTML-vormi:
Tag
, määrab tegelikult vormi. Selle atribuudid on mõlemad valikulised:
toiming – määrab URL-i (täielik või suhteline), millele vorm saadetakse. Kui seda atribuuti pole määratud, saadab enamik brausereid (täpsemalt kõik mulle teadaolevad brauserid) vormi praegusele dokumendile, see tähendab "iseendale". See on mugav stenogramm, kuid HTML-standardi järgi on action atribuut vajalik.
meetod – vormi esitamise viis. Neid on kaks. Kui meetodi atribuuti pole määratud, eeldatakse GET-i.
Tag - määrab vormi elemendi, mis on määratletud tüübi atribuudiga:
Väärtus "text" määrab üherealise tekstisisestusvälja
Väärtus "submit" määrab nupu, millel klõpsamisel saadetakse vorm serverisse
Võimalikud on ka muud väärtused (ja - pole ainus silt, mis määrab vormielemendi).
Mis juhtub siis, kui klõpsame "OK"?
Brauser vaatab vormis sisalduvaid elemente ja koostab vormiandmed nende nime ja väärtuse atribuutide põhjal. Oletame, et nimi Vasya on sisestatud. Sellisel juhul on vormi andmed name=Vasya&okbutton=OK
Brauser loob ühenduse serveriga, saadab serverile taotluse märgendi action atribuudis määratud dokumendi kohta
Server analüüsib saadud päringut, genereerib vastuse, saadab selle brauserisse ja sulgeb ühenduse
Brauser kuvab serverist saadud dokumendi
Sama päringu käsitsi saatmine (telneti abil) näeb välja järgmine (eeldusel, et saidi domeeninimi on www.example.com):
Telnet www.example.com 80 GET /cgi-bin/form_handler.cgi?name=Vasya&okbutton=OK HTTP/1.0\r\n Host: www.example.com\r\n \r\n
Nagu olete ilmselt juba arvanud, on esitamisnupu klõpsamine vormil "GET" esitamismeetodiga sama, mis vastava URL-i (küsimärgi ja vormiandmetega lõpus) sisestamine brauseri aadressiribale:
Http://www.example.com/cgi-bin/form_handler.cgi?name=Vasya&okbutton=OK
Tegelikult kasutatakse GET-meetodit alati, kui taotlete serverilt dokumenti, sisestades lihtsalt selle URL-i või klõpsates lingil. Kasutades
Ridadel 8-12 näidatud vorm sisaldab kahte elementi: nimi ja oknupp. Atribuut Method määrab vormi esitamise meetodi POST, atribuut action aga URL-i, kuhu vorm saadetakse, ja see täidetakse serveri muutuja PHP_SELF väärtusega – hetkel töötava skripti aadressiga.
=$_SERVER["PHP_SELF"]?>- lühendatud vorm jaoks echo $_SERVER["PHP_SELF"]; ?> .
Oletame, et sisestasime nimeväljale väärtuse Vasya ja klõpsasime nuppu OK. Sel juhul saadab brauser serverile POST-päringu. Päringu sisu: name=Vasya&okbutton=OK . PHP täidab automaatselt massiivi $_POST:
$_POST ["nimi"] = "Vasja" $_POST ["okbutton"] = "OK"
Tegelikkuses saadab brauser väärtuse "Vasya" URL-koodi kujul; Windows-1251 kodeeringu puhul näeb see väärtus välja nagu %C2%E0%F1%FF . Aga kuna PHP tegeleb vajaliku dekodeerimisega automaatselt, võime selle funktsiooni "unustada" – seni, kuni peame HTTP päringutega käsitsi tegelema.
Kuna päringu sisu määrab ainult nimed ja väärtused, kuid mitte vormielementide tüübid, pole PHP-l aimugi, kas $_POST["nimi"] vastab sisendstringile, nupule või loendikastile. Kuid üldiselt ei vaja me seda teavet üldse. :)
Kuna me ei pea teadma, mida esitamisnupp ütleb, saame realt 11 eemaldada atribuudi nimi, lühendades nupu kirjeldust nii . Sel juhul saadab brauser POST-päringu name=Vasya.
Ja nüüd sama asi, kuid vormi GET jaoks:
if (isset($_GET [ "nimi" ])) ( kaja" Tere, " . $_GET [ "nimi" ] . " !"
;
}
?>
8. reale võiks sama lihtsalt kirjutada
Siin ei kasutata uusi tehnikaid. Mõelge välja, käivitage kood, proovige muuta ...
Muudame viimast näidet nii, et kasutaja ei peaks välju uuesti täitma. Selleks täitke vormielementide väärtusatribuudid äsja sisestatud väärtustega.
$nimi = isset($_POST [ "nimi" ]) ? $_POST [ "nimi"] : "" ; $year = isset($_POST [ "aasta" ]) ? $_POST [ "aasta" ] : "" ;If (isset($_POST [ "nimi" ], $_POST [ "aasta" ])) ( if ($_POST [ "nimi" ] == "" ) ( kaja "Palun sisestage nimi! "
;
) else if ($_POST [ "aasta" ]<
1900
||
$_POST
[
"year"
] >
2004
) {
kaja "Palun täpsustage sünniaasta! Kehtiv väärtusvahemik: 1900..2004 "
;
) muidu ( kaja "Tere," . $_POST ["nimi"]. "! "
;
$vanus = 2004 – $_POST [ "aasta" ]; kaja "Teile". $vanus . "aastad "
;
}
kaja"
"
;
}
?>
4. ja 5. rida võivad veidi segadusse ajada. Kõik on väga lihtne: 4. rida võiks kirjutada nii:
if (isset($_POST [ "nimi" ])) $nimi = $_POST ["nimi" ]; muidu $nimi = "" ;
Võib tekkida küsimus - miks mitte visata read 4-5 välja ja kirjutada:
Sisestage oma nimi:
">
Sisestage oma sünniaasta:
">
Asi on selles, et kui need POST-muutujad ei ole defineeritud – ja see juhtub siis, kui vorm pole veel täidetud –, annab PHP hoiatusi initsialiseerimata muutujate kasutamise kohta (ja täiesti mõistlikult: selline teade võimaldab teil kiiresti leida muutujate nimedes raskesti tuvastatavad kirjavead ja hoiatab ka võimalike "aukude" eest saidil). Isset-koodi saab muidugi otse vormi panna, kuid see on liiga tülikas.
Sain aru? Nüüd proovige antud koodist viga leida. No mitte just viga, vaid viga.
htmlspecialchars()
Ei leidnud? Ma annan sulle vihje. Sisestage väljale "nimi" näiteks topelttsitaat ja mõni tekst, näiteks "Va" Saada vorm ja vaadake saadud lehe lähtekoodi. Neljandal real on midagi sellist:
Sisestage oma nimi:
See tähendab, et ei midagi head. Mis siis, kui kaval kasutaja sisestas JavaScripti koodi?
Selle probleemi lahendamiseks peate kasutama funktsiooni htmlspecialchars(), mis asendab erimärgid nende HTML-i esitusega (näiteks tsitaat "-ga):
$nimi = isset($_POST [ "nimi" ]) ? htmlspecialchars ($_POST [ "nimi" ]) : "" ; $year = isset($_POST [ "aasta" ]) ? htmlspecialchars ($_POST [ "aasta" ]) : "" ;If (isset($_POST [ "nimi" ], $_POST [ "aasta" ])) ( if ($_POST [ "nimi" ] == "" ) ( kaja "Palun sisestage nimi! "
;
) else if ($_POST [ "aasta" ]<
1900
||
$_POST
[
"year"
] >
2004
) {
kaja "Palun täpsustage sünniaasta! Kehtiv väärtusvahemik: 1900..2004 "
;
) muidu ( kaja "Tere," . $nimi. "! "
;
$vanus = 2004 – $_POST [ "aasta" ]; kaja "Teile". $vanus . "aastad "
;
}
kaja"
"
;
}
?>
Korrake katset ja veenduge, et HTML-kood on nüüd õige.
Pidage meeles – funktsiooni htmlspecialchars() tuleb kasutada alati, kui kuvatakse muutuja sisu, mis võib sisaldada HTML-i erimärke.
phpinfo()
Funktsioon phpinfo() on PHP-s üks olulisemaid. See kuvab teavet PHP sätete, erinevate konfiguratsioonimuutujate väärtuste kohta ...
Miks ma seda vorme käsitlevas artiklis mainin? phpinfo() on mugav silumistööriist. phpinfo() prindib muu hulgas kõigi muutujate $_GET, $_POST ja $_SERVER väärtused. Nii et kui vormimuutuja läheb kaduma, on kõige lihtsam viis viga teada saada, kasutades funktsiooni phpinfo(). Tagamaks, et funktsioon kuvab ainult muutujate väärtusi (ja ilma, et peaksite kümneid lehekülgi kerima), tuleks seda kutsuda järgmiselt: phpinfo(INFO_VARIABLES); , või - mis on absoluutselt sama asi - phpinfo(32) ;.
phpinfo(32); ?>
Või näiteks selline olukord: soovite teada saada külastaja IP-aadressi. Mäletate, et vastav muutuja on salvestatud massiivi $_SERVER, kuid - halb õnn - unustasite, kuidas seda muutujat täpselt nimetatakse. Jällegi helistage phpinfo(32); , otsige märgist oma IP-aadressi ja leidke see realt $_SERVER["REMOTE_ADDR"] .
Laboratoorsed tööd 1. HTTP protokoll. Meetodid GET, POST. HTML vormid.
Teoreetiline osa
HTTP-päringu elutsükkel
Brauser avab ühenduse serveriga Brauser saadab serverile päringu lehe vastuvõtmiseks Server genereerib vastuse (kõige sagedamini HTML-koodi) brauserile ja sulgeb ühenduse Brauser töötleb HTML-koodi ja kuvab lehe
Pöörake tähelepanu esiletõstetud julge . Isegi enne, kui näete ekraanil soovitud lehte, on ühendus serveriga suletud ja see on teid unustanud. Ja kui sisestate erineva (või sama) aadressi või klõpsate lingil või klõpsate HTML-vormi nupul, kordub sama muster uuesti.
Seda tüüpi tööd nimetatakse "klient-server" . Klient on sel juhul brauser.
Seega kestab ühendus veebiserveriga vaid mõne sekundi (või sekundi murdosa) – see on ajavahemik lingil (või muud tüüpi päringul) klõpsamise ja lehe kuvamise vahel. Enamik brausereid kuvab ühenduse ajal mingit indikaatorit, näiteks MS Internet Explorer kuvab paremas ülanurgas animatsiooni.
HTTP kui "musta kasti" tajumisest igaveseks vabanemiseks "teeskleme" telneti kasutavat brauserit:
Käivitame telnet ya.ru 80 Sisestame terminali aknasse järgmise (kui sisendit ei kuvata, pole midagi):
GET / HTTP/1.0 [vajutage siin Enter] Saatejuht: ya.ru [vajutage siin kaks korda sisestusklahvi]
Sisestusklahvi vajutamine vastab tavaliselt märkide kombinatsioonile CR + LF, mis on tähistatud kui \r\n . Seda tähistust kasutatakse allpool.
Lehe http://ya.ru/ HTML-kood jookseb üle ekraani. Nagu näete, pole midagi keerulist.
Praeguse lehe lähtekoodi saab vaadata peaaegu igas brauseris, valides menüüst "View|Source".
Pildid, raamid - kõik need on lisasoovid, täpselt samad. Tegelikult, kust tulevad pildid brauseriaknas: HTML-koodi sõelumisel (töötlemisel) kohtab brauser sildi https://i1.wp.com/ pilt"> teeb serverile lisapäringu – päring Pildid ja kuvab selle kohas, kus silt on .
Proovige:
Telnet www.google.ru 80
HANKIGE /php/php5ru.png HTTP/1.0 \r\n Saatejuht: ya.ru \r\n\r\n
See, mida näete, kui vaatate seda png-faili tekstiredaktoris, vilgub üle ekraani.
I-2. HTML vormid. Andmete serverisse saatmise meetodid
Tõenäoliselt olete juba kohanud HTML-i vorme:
Sisestage oma nimi: