Na ) Kwa hili, seti ya sifa uundaji , formmethod , formenctype na formtarget hutumiwa, ambazo ni analogi za sifa zinazolingana bila kiambishi awali cha fomu. Mfano wa 4 unaonyesha matumizi ya sifa hizi.Mfano 4: Kuwasilisha fomu
HTML5 IE Cr Op Sa Fx
Kuwasilisha fomu
Sifa zote mpya za fomu hazitumiki na baadhi ya vivinjari, hasa Internet Explorer na Safari.
Moja ya kazi maarufu zaidi kwenye tovuti ni fomu ya maombi au utaratibu, data ambayo hutumwa kwa barua pepe kwa mmiliki wa tovuti. Kama sheria, fomu kama hizo ni rahisi na zina sehemu mbili au tatu za kuingiza data. Jinsi ya kuunda fomu ya kuagiza vile? Hii inahitaji matumizi ya lugha ya alama za HTML na lugha ya programu ya PHP.
Lugha ya alama ya HTML yenyewe ni rahisi; unahitaji tu kujua jinsi na wapi kuweka vitambulisho fulani. Kwa lugha ya programu ya PHP, mambo ni ngumu zaidi.
Kwa mpangaji wa programu, kuunda fomu kama hiyo sio ngumu, lakini kwa mbuni wa mpangilio wa HTML, vitendo vingine vinaweza kuonekana kuwa ngumu.
Unda fomu ya kuwasilisha data katika html Mstari wa kwanza utakuwa kama ifuatavyo
Sasa hebu tuweke kila kitu pamoja.
Sasa hebu tufanye mashamba katika fomu ya lazima. Tunayo nambari ifuatayo:
Unda faili inayokubali data kutoka kwa fomu ya HTML Hii itakuwa faili inayoitwa send.php
Katika faili, katika hatua ya kwanza, unahitaji kukubali data kutoka kwa safu ya posta. Ili kufanya hivyo, tunaunda vigezo viwili:
$fio = $_POST["fio"]; $barua pepe = $_POST["barua pepe"];
Majina yanayobadilika katika PHP hutanguliwa na ishara ya $ na nusu-colon huwekwa mwishoni mwa kila mstari. $_POST ni safu ambayo data kutoka kwa fomu hutumwa. Katika fomu ya html, njia ya kutuma imebainishwa kama method="post". Kwa hivyo, vigezo viwili kutoka kwa fomu ya html vinakubaliwa. Ili kulinda tovuti yako, unahitaji kupitisha vigezo hivi kupitia vichungi kadhaa - kazi za php.
Kazi ya kwanza itabadilisha herufi zote ambazo mtumiaji atajaribu kuongeza kwenye fomu:
Katika kesi hii, vigezo vipya havikuundwa katika php, lakini zilizopo hutumiwa. Kichujio kitafanya nini ni kubadilisha tabia "<" в "<". Также он поступить с другими символами, встречающимися в html коде.
Chaguo za kukokotoa za pili husimbua URL ikiwa mtumiaji atajaribu kuiongeza kwenye fomu.
$fio = urldecode($fio); $barua pepe = urldecode($email);
Kwa kazi ya tatu tutaondoa nafasi kutoka mwanzo na mwisho wa mstari, ikiwa ipo:
$fio = trim($fio); $barua pepe = trim($email);
Kuna vitendaji vingine vinavyokuruhusu kuchuja vigeu vya php. Matumizi yao yanategemea jinsi unavyojali kwamba mshambuliaji atajaribu kuongeza msimbo wa programu kwenye fomu hii ya uwasilishaji ya barua pepe ya html.
Uthibitishaji wa data iliyohamishwa kutoka fomu ya HTML hadi faili ya PHP
Ili kuangalia ikiwa nambari hii inafanya kazi na ikiwa data inahamishwa, unaweza kuionyesha kwenye skrini kwa kutumia kitendakazi cha mwangwi:
echo $ fio; mwangwi" "; echo $ fio;
Mstari wa pili hapa unahitajika kutenganisha pato la vigeu vya php katika mistari tofauti.
Inatuma data iliyopokelewa kutoka kwa fomu ya HTML kwa barua pepe kwa kutumia PHP Ili kutuma data kwa barua pepe, unahitaji kutumia kazi ya barua pepe katika PHP.
mail("anwani ipi ya kutuma", "somo la barua", "Ujumbe (mwili wa barua)","Kutoka: ambayo barua inatumwa \r\n");
Kwa mfano, unahitaji kutuma data kwa barua pepe ya mmiliki wa tovuti au meneja [barua pepe imelindwa] .
Mada ya barua inapaswa kuwa wazi, na ujumbe wa barua unapaswa kuwa na kile ambacho mtumiaji alibainisha katika fomu ya HTML.
barua (" [barua pepe imelindwa] ", "Maombi kutoka kwa tovuti", "Jina kamili:".$fio.". Barua pepe: ".$email ,"Kutoka: [barua pepe imelindwa] \r\n");
Inahitajika kuongeza hali ambayo itaangalia ikiwa fomu ilitumwa kwa kutumia PHP kwa anwani maalum ya barua pepe.
ikiwa (barua (" [barua pepe imelindwa] ", "Agizo kutoka kwa tovuti", "Jina kamili:".$fio.". Barua pepe: ".$email ,"Kutoka: [barua pepe imelindwa] \r\n")) { echo "ujumbe uliotumwa kwa mafanikio"; ) mwingine ( }
Kwa hivyo, msimbo wa programu ya faili ya send.php, ambayo itatuma data ya fomu ya HTML kwa barua pepe, itaonekana kama hii:
$fio = $_POST["fio"]; $barua pepe = $_POST["barua pepe"]; $fio = htmlspecialchars($fio); $barua pepe = htmlspecialchars($email); $fio = urldecode($fio); $barua pepe = urldecode($email); $fio = trim($fio); $barua pepe = trim($email); // echo $ fio; // mwangwi" "; // echo $ barua pepe; ikiwa (barua (" [barua pepe imelindwa] ", "Maombi kutoka kwa tovuti", "Jina kamili:".$fio.". Barua pepe: ".$email ,"Kutoka: [barua pepe imelindwa] \r\n")) ( echo "ujumbe umetumwa kwa mafanikio"; ) mwingine ( echo "makosa yalitokea wakati wa kutuma ujumbe"; }?>
Mistari mitatu ya kuangalia ikiwa data inahamishiwa kwenye faili imetolewa maoni. Ikiwa ni lazima, zinaweza kuondolewa, kwani zilihitajika tu kwa kurekebisha.
Tunaweka msimbo wa HTML na PHP kwa kuwasilisha fomu katika faili moja Katika maoni kwa kifungu hiki, watu wengi huuliza swali la jinsi ya kuhakikisha kuwa fomu ya HTML na nambari ya PHP ya kutuma data kwa barua pepe iko kwenye faili moja, na sio mbili.
Ili kutekeleza kazi hii, unahitaji kuweka msimbo wa HTML wa fomu katika faili ya send.php na kuongeza hali ambayo itaangalia uwepo wa vigezo katika safu ya POST (safu hii inatumwa kutoka kwa fomu). Hiyo ni, ikiwa vigezo katika safu hazipo, basi unahitaji kuonyesha mtumiaji fomu. Vinginevyo, unahitaji kupokea data kutoka kwa safu na kuituma kwa mpokeaji.
Hebu tuone jinsi ya kubadilisha msimbo wa PHP katika faili ya send.php:
Fomu ya maombi kutoka kwa tovuti //angalia ikiwa vigeuzo vipo kwenye safu ya POST if(!isset($_POST["fio"]) na !isset($_POST["email"]))( ?>
) mwingine ( //onyesha fomu $fio = $_POST["fio"]; $barua pepe = $_POST["barua pepe"]; $fio = htmlspecialchars($fio); $barua pepe = htmlspecialchars($email); $fio = urldecode($fio); $barua pepe = urldecode($email); $fio = trim($fio); $barua pepe = trim($email); ikiwa (barua (" [barua pepe imelindwa] ", "Maombi kutoka kwa tovuti", "Jina kamili:".$fio.". Barua pepe: ".$email ,"Kutoka: [barua pepe imelindwa] \r\n"))( echo "Ujumbe umetumwa kwa mafanikio"; ) mwingine ( echo "Makosa yalitokea wakati wa kutuma ujumbe"; } } ?>
Tunaangalia kuwepo kwa kutofautiana katika safu ya POST na kazi ya isset() PHP. Alama ya mshangao kabla ya chaguo hili la kukokotoa katika hali ina maana ya kukanusha. Hiyo ni, ikiwa kutofautiana haipo, basi tunahitaji kuonyesha fomu yetu. Ikiwa singeweka alama ya mshangao, hali hiyo ingemaanisha "ikiwa ipo, basi onyesha fomu." Na hii sio sawa katika kesi yetu. Kwa kawaida, unaweza kuipa jina tena kwa index.php. Ikiwa utabadilisha jina la faili, usisahau kubadilisha jina la faili kwenye mstari
Kwa kuhifadhi msimbo huu katika faili ya HTML na kuitazama kwa kutumia kivinjari chako unachopenda, utaona fomu inayojulikana ya HTML:
Lebo
, kwa kweli huweka fomu. Sifa zake zote mbili ni za hiari:
kitendo - inabainisha URL (kamili au jamaa) ambayo fomu itatumwa. Ikiwa sifa hii haijabainishwa, vivinjari vingi (kwa usahihi zaidi, vivinjari vyote vinavyojulikana kwangu) hutuma fomu kwa hati ya sasa, ambayo ni, "kwenyewe." Huu ni mkato unaofaa, lakini kulingana na kiwango cha HTML, sifa ya hatua inahitajika.
njia - njia ya kuwasilisha fomu. Kuna wawili kati yao. Ikiwa sifa ya mbinu haijabainishwa, GET inachukuliwa.
Lebo - inabainisha kipengee cha fomu kinachofafanuliwa na sifa ya aina:
Thamani "maandishi" hubainisha sehemu ya maandishi ya mstari mmoja
Thamani ya "tuma" inabainisha kitufe ambacho, kinapobofya, hutuma fomu kwa seva
Thamani zingine zinawezekana (na - sio lebo pekee inayobainisha kipengee cha fomu).
Kwa hivyo ni nini hufanyika tunapobofya "Sawa"?
Kivinjari hutazama vipengele vilivyojumuishwa katika fomu na hujenga data ya fomu kutoka kwa jina lao na sifa za thamani. Wacha tuseme jina la Vasya limeingizwa. Katika hali hii, data ya fomu ni jina=Vasya&okbutton=Sawa
Kivinjari huanzisha muunganisho na seva, hutuma kwa seva ombi la hati iliyoainishwa katika sifa ya kitendo cha tepe.
Seva inachambua ombi lililopokelewa, hutoa jibu, hutuma kwa kivinjari na kufunga uunganisho
Kivinjari kinaonyesha hati iliyopokelewa kutoka kwa seva
Kutuma ombi moja kwa mikono (kwa kutumia telnet) inaonekana kama hii (ikizingatiwa kuwa jina la kikoa la tovuti ni www.example.com):
Telnet www.example.com 80 PATA /cgi-bin/form_handler.cgi?name=Vasya&okbutton=OK HTTP/1.0\r\n Mpangishi: www.example.com\r\n \r\n
Kama ambavyo pengine umekisia, kubofya kitufe cha kuwasilisha kwenye fomu yenye mbinu ya kuwasilisha ya "GET" ni sawa na kuandika URL inayolingana (yenye alama ya kuuliza na data ya fomu mwishoni) kwenye upau wa anwani wa kivinjari:
Http://www.example.com/cgi-bin/form_handler.cgi?name=Vasya&okbutton=OK
Kwa kweli, mbinu ya GET inatumika wakati wowote unapoomba hati kutoka kwa seva kwa kuingiza URL yake au kubofya kiungo. Kutumia
Fomu iliyoonyeshwa kwenye mstari wa 8-12 ina vipengele viwili: jina na okbutton. Sifa ya mbinu inabainisha mbinu ya uwasilishaji wa fomu ya POST, ilhali sifa ya kitendo inabainisha URL ambayo fomu inatumwa, na imejaa thamani ya tofauti ya seva ya PHP_SELF - anwani ya hati inayoendeshwa kwa sasa.
=$_SERVER["PHP_SELF"]?>- fomu iliyofupishwa kwa echo $_SERVER["PHP_SELF"]; ?> .
Tuseme tumeingiza thamani ya Vasya kwenye uwanja wa jina na bonyeza kitufe cha OK. Katika kesi hii, kivinjari hutuma ombi la POST kwa seva. Mwili wa ombi: name=Vasya&okbutton=OK . PHP inajaza kiotomati safu $_POST:
$_POST ["jina" ] = "Vasya" $_POST ["okbutton" ] = "Sawa"
Kwa kweli, thamani "Vasya" inatumwa na kivinjari katika fomu ya urlencode; kwa usimbaji wa windows-1251 thamani hii inaonekana kama %C2%E0%F1%FF . Lakini kwa kuwa PHP hushughulikia kiotomati usimbaji unaohitajika, tunaweza "kusahau" kuhusu kipengele hiki - hadi tutakapolazimika kushughulikia maombi ya HTTP kwa mikono.
Kwa kuwa sehemu kubwa ya ombi hubainisha majina na thamani pekee, lakini si aina za vipengele, PHP haijui kama $_POST["jina"] inalingana na mfuatano wa ingizo, kitufe, au kisanduku cha orodha. Lakini sisi, kwa ujumla, hatuhitaji habari hii hata kidogo. :)
Kwa kuwa hatuhitaji kujua kitufe cha kuwasilisha kinasema nini, tunaweza kuondoa sifa ya jina kwenye mstari wa 11, tukifupisha maelezo ya kitufe kuwa . Katika kesi hii, kivinjari kitatuma jina la ombi la POST=Vasya.
Na sasa jambo lile lile, lakini kwa fomu ya GET:
ikiwa (isset($_GET [ "jina" ]))) ( mwangwi" Habari, " . $_GET [ "jina"] ." !"
;
}
?>
Kwenye mstari wa 8 mtu anaweza kuandika kwa urahisi vile vile
Hakuna mbinu mpya zinazotumiwa hapa. Itambue, endesha msimbo, jaribu kurekebisha...
Wacha tubadilishe mfano wa mwisho ili mtumiaji asilazimike kujaza sehemu tena. Ili kufanya hivyo, jaza sifa za thamani za vitu vya fomu na maadili ambayo tumeingiza.
$name = isset($_POST [ "jina" ]) ? $_POST [ "jina" ] : "" ; $year = isset($_POST [ "year" ]) ? $_POST [ "year" ] : "" ;Ikiwa (isset($_POST [ "jina" ], $_POST [ "mwaka" ])) ( ikiwa ($_POST [ "jina" ] == "" ) ( echo "Tafadhali weka jina! "
;
) vinginevyo ikiwa ($_POST ["mwaka"]<
1900
||
$_POST
[
"year"
] >
2004
) {
mwangwi "Tafadhali taja mwaka wa kuzaliwa! Mfululizo halali wa maadili: 1900..2004 "
;
) mwingine ( mwangwi "Habari," . $_POST [ "jina" ] . "! "
;
$age = 2004 - $_POST [ "mwaka" ]; mwangwi "Kwako". Umri wa $. "miaka "
;
}
mwangwi"
"
;
}
?>
Mstari wa 4 na wa 5 huenda ukachanganya kwa kiasi fulani. Kila kitu ni rahisi sana: mstari wa 4 unaweza kuandikwa hivi:
ikiwa (isset($_POST [ "jina" ])) $name = $_POST ["jina" ]; mwingine $name = "" ;
Swali linaweza kutokea - kwa nini usitupe mistari 4-5 na uandike:
Ingiza jina lako:
">
Weka mwaka wako wa kuzaliwa:
">
Jambo ni kwamba ikiwa anuwai hizi za POST hazijafafanuliwa - na hii itakuwa kesi ikiwa fomu bado haijajazwa - PHP itatoa maonyo juu ya utumiaji wa vigeu visivyojulikana (na, kwa sababu nzuri kabisa: ujumbe kama huo hukuruhusu pata haraka typos ngumu kugundua katika majina tofauti, na pia anaonya juu ya "mashimo" yanayowezekana kwenye wavuti). Unaweza, bila shaka, kuweka msimbo wa isset moja kwa moja kwenye fomu, lakini itakuwa ngumu sana.
Nimeelewa? Sasa jaribu kupata kosa katika nambari uliyopewa. Kweli, sio kosa haswa, lakini dosari.
htmlchars maalum()
Hukuipata? Nitakupa dokezo. Ingiza, kwa mfano, katika sehemu ya "jina" nukuu mara mbili na maandishi kadhaa, kwa mfano, "Va" Tuma fomu, na uangalie msimbo wa chanzo wa ukurasa unaofuata. Mstari wa nne utakuwa na kitu kama:
Ingiza jina lako:
Hiyo ni, hakuna kitu kizuri. Je, ikiwa mtumiaji mjanja angeingiza msimbo wa JavaScript?
Ili kutatua tatizo hili, unahitaji kutumia kazi ya htmlspecialchars(), ambayo itachukua nafasi ya herufi maalum na uwakilishi wao wa HTML (kwa mfano, nukuu na "):
$name = isset($_POST [ "jina" ]) ? htmlspecialchars ($_POST [ "jina" ]) : "" ; $year = isset($_POST [ "year" ]) ? htmlspecialchars ($_POST [ "year" ]) : "" ;Ikiwa (isset($_POST [ "jina" ], $_POST [ "mwaka" ])) ( ikiwa ($_POST [ "jina" ] == "" ) ( echo "Tafadhali weka jina! "
;
) vinginevyo ikiwa ($_POST ["mwaka"]<
1900
||
$_POST
[
"year"
] >
2004
) {
mwangwi "Tafadhali taja mwaka wa kuzaliwa! Mfululizo halali wa maadili: 1900..2004 "
;
) mwingine ( mwangwi "Habari," . $jina . "! "
;
$age = 2004 - $_POST [ "mwaka" ]; mwangwi "Kwako". Umri wa $. "miaka "
;
}
mwangwi"
"
;
}
?>
Rudia jaribio na uhakikishe kuwa msimbo wa HTML sasa ni sahihi.
Kumbuka - htmlspecialchars() chaguo za kukokotoa lazima zitumike wakati wowote unapoonyesha yaliyomo kwenye kigezo ambacho kinaweza kuwa na herufi maalum za HTML.
phpinfo()
phpinfo() kazi ni mojawapo ya muhimu zaidi katika PHP. Inaonyesha habari kuhusu mipangilio ya PHP, maadili ya anuwai anuwai ya usanidi ...
Kwa nini ninaitaja katika makala kuhusu fomu? phpinfo() ni zana rahisi ya kurekebisha hitilafu. phpinfo(), miongoni mwa mambo mengine, huchapisha thamani za $_GET, $_POST na $_SERVER vigezo vyote. Kwa hivyo ikiwa muundo wa kutofautisha utapotea, njia rahisi ya kujua ni nini kibaya ni kutumia phpinfo() kazi. Ili kuhakikisha kuwa chaguo la kukokotoa linaonyesha tu maadili ya vigezo (na bila wewe kuvinjari kurasa kadhaa), inapaswa kuitwa kama ifuatavyo: phpinfo(INFO_VARIABLES); , au - ambayo ni kitu kimoja - phpinfo(32) ;.
phpinfo(32); ?>
Au, kwa mfano, hali hii: unataka kujua anwani ya IP ya mgeni. Unakumbuka kuwa tofauti inayolingana imehifadhiwa katika safu ya $_SERVER, lakini - bahati mbaya - umesahau ni nini hasa kinachoitwa. Tena, piga phpinfo(32); , tafuta anwani yako ya IP kwenye ishara na uipate kwenye mstari $_SERVER["REMOTE_ADDR"] .
Kazi ya maabara 1. Itifaki ya HTTP. Mbinu GET, POST. Fomu za HTML.
Sehemu ya kinadharia
Mzunguko wa Maisha ya Ombi la HTTP
Kivinjari hufungua muunganisho na seva Kivinjari hutuma ombi kwa seva ili kupokea ukurasa Seva hutoa jibu (mara nyingi msimbo wa HTML) kwa kivinjari na hufunga muunganisho Kivinjari huchakata msimbo wa HTML na kuonyesha ukurasa
Makini na yalionyesha ujasiri . Hata kabla ya kuona ukurasa ulioombwa kwenye skrini, unganisho kwenye seva imefungwa na imekusahau. Na unapoingiza anwani tofauti (au ile ile), au ubofye kiungo, au ubofye kitufe cha fomu ya HTML, mchoro sawa utajirudia tena.
Aina hii ya kazi inaitwa "seva ya mteja" . Mteja katika kesi hii ni kivinjari.
Kwa hivyo, uunganisho kwenye seva ya wavuti huchukua sekunde chache tu (au sehemu za sekunde) - hii ni kipindi cha muda kati ya kubofya kiungo (au aina nyingine ya ombi) na ukurasa kuanza kuonyeshwa. Vivinjari vingi huonyesha aina fulani ya kiashirio wakati wa muunganisho, kwa mfano, MS Internet Explorer huonyesha uhuishaji kwenye kona ya juu kulia.
Ili kuondoa kabisa mtazamo wa HTTP kama "kisanduku cheusi", hebu "tujifanye" kuwa kivinjari kwa kutumia telnet:
Hebu tuzindue telnet ya.ru 80 Wacha tuingize zifuatazo kwenye dirisha la terminal (ikiwa pembejeo haijaonyeshwa, ni sawa):
PATA / HTTP/1.0 [bonyeza Enter hapa] mwenyeji ni ya.ru [hapa bonyeza Enter mara mbili]
Kubonyeza Enter kwa kawaida hulingana na mseto wa herufi CR + LF, inayoashiria kama \r\n . Nukuu hii itatumika hapa chini.
Nambari ya HTML ya ukurasa http://ya.ru/ itaendeshwa kwenye skrini. Kama unaweza kuona, hakuna kitu ngumu.
Msimbo wa chanzo wa ukurasa wa sasa unaweza kutazamwa karibu katika kivinjari chochote kwa kuchagua "Tazama|Chanzo" kutoka kwenye menyu.
Picha, muafaka - yote haya ni maombi ya ziada, sawa kabisa. Kwa kweli, picha zinatoka wapi kwenye dirisha la kivinjari: wakati wa kuchanganua (kuchakata) msimbo wa HTML, kivinjari hukutana na lebo https://i1.wp.com/ picha"> hufanya ombi la ziada kwa seva - ombi Picha , na kuionyesha mahali ambapo lebo iko .
Jaribu:
Telnet www.google.ru 80
PATA /php/php5ru.png HTTP/1.0 \r\n mwenyeji ni ya.ru \r\n\r\n
Utakachoona ukitazama faili hii ya png kwenye kihariri maandishi kitamulika kwenye skrini.
I-2. Fomu za HTML. Njia za kutuma data kwa seva
Labda tayari umekutana na fomu za HTML:
Ingiza jina lako: