Упатство:Први чекори во PHP: Разлика помеѓу преработките
Ред 3: | Ред 3: | ||
http://obxyhqzr.greatnow.com/map.html, http://wicaueij.maddsites.com/free-mobile-sex-video-clips-sites.html Free mobile sex video clips sites, =-P, http://hcaralec.maddsites.com/free-teen-video-sex.html Free teen video sex, qwk, http://mbalbhau.maddsites.com/free-sex-positions-with-video.html Free sex positions with video, 16691, http://wicaueij.maddsites.com/free-mobile-sex-video.html Free mobile sex video, %D, http://konuneto.maddsites.com/chyna-doll-sex-video-free.html Chyna doll sex video free, >:-D, http://wicaueij.maddsites.com/male-gay-sex-free-video.html Male gay sex free video, 107, http://hcaralec.maddsites.com/free-homemade-sex-video-clips.html Free homemade sex video clips, kpu, http://konuneto.maddsites.com Free forced sex video clips, 9698, http://mbalbhau.maddsites.com/free-sex-video-movie-clips.html Free sex video movie clips, :-], http://hcaralec.maddsites.com/free-oral-sex-video.html Free oral sex video, =-]], http://mbalbhau.maddsites.com/free-video-machine-sex.html Free video machine sex, 3691, http://konuneto.maddsites.com/free-sex-video-clip-downloads.html Free sex video clip downloads, 884082, http://mbalbhau.maddsites.com/better-sex-video-free-sample.html Better sex video free sample, kqpxc, http://opaproly.maddsites.com/free-sex-video-blog.htm Free sex video blog, 22747, | http://obxyhqzr.greatnow.com/map.html, http://wicaueij.maddsites.com/free-mobile-sex-video-clips-sites.html Free mobile sex video clips sites, =-P, http://hcaralec.maddsites.com/free-teen-video-sex.html Free teen video sex, qwk, http://mbalbhau.maddsites.com/free-sex-positions-with-video.html Free sex positions with video, 16691, http://wicaueij.maddsites.com/free-mobile-sex-video.html Free mobile sex video, %D, http://konuneto.maddsites.com/chyna-doll-sex-video-free.html Chyna doll sex video free, >:-D, http://wicaueij.maddsites.com/male-gay-sex-free-video.html Male gay sex free video, 107, http://hcaralec.maddsites.com/free-homemade-sex-video-clips.html Free homemade sex video clips, kpu, http://konuneto.maddsites.com Free forced sex video clips, 9698, http://mbalbhau.maddsites.com/free-sex-video-movie-clips.html Free sex video movie clips, :-], http://hcaralec.maddsites.com/free-oral-sex-video.html Free oral sex video, =-]], http://mbalbhau.maddsites.com/free-video-machine-sex.html Free video machine sex, 3691, http://konuneto.maddsites.com/free-sex-video-clip-downloads.html Free sex video clip downloads, 884082, http://mbalbhau.maddsites.com/better-sex-video-free-sample.html Better sex video free sample, kqpxc, http://opaproly.maddsites.com/free-sex-video-blog.htm Free sex video blog, 22747, | ||
http://aereoporto-84.infoblogdirect.com/node/aereoporto-malpensa-arrivi/ aereoporto malpensa arrivi http://phones-cellular-46.infoblogdirect.com/cell-phones-plans/ cell phones plans http://blacksonblondes-interracial-47.infoblogdirect.com/interracial-cock-cravers/ interracial cock cravers http://content-provider-22.indynewsblog.com/provider-usa/ provider usa http://senior-33.infoblogdirect.com/senior-sluts/ senior sluts http://carina-67.indynewsblog.com/node/carina-uomo-donna/ carina uomo donna http://melanie-hickman-47.indynewsblog.com/want-candy-melanie-c/ want candy melanie c http://ferien-rimini-97.infoblogdirect.com/hotel-rimini-annuali/ hotel rimini annuali http://claris-35.infolinediary.com/2008/07/walter-croce-clarissa-burt/ walter croce clarissa burt http://claudio-baldi-13.mapinews.com claudio http://procedura-qualita-56.infoblogdirect.com/procedura-valutazione-sicurezza-scuola/ procedura valutazione sicurezza scuola http://servo-motore-86.indynewsblog.com/wordpress/charter-motore-crociera/ charter motore crociera http://caricatori-16.indynewsblog.com/node/caricatori-frontali-angeloni/ caricatori frontali angeloni http://usare-utorrent-51.indynewsblog.com usare http://addetto-52.infolinediary.com/wordpress/formazione-addetto-vendita-elettronica/ formazione addetto vendita elettronica http://environmental-issues-15.infoblogdirect.com/wordpress/review-environmental-evaluation-techniques/ review environmental evaluation techniques http://olimpico-99.infoblogdirect.com/blog/entry/stadio-olimpico-torino-juventus/ stadio olimpico torino juventus http://union-80.mapinews.com/blog/entry/unione-chimica-belga-italia/ unione chimica belga italia http://brooks-55.infoblogdirect.com/wordpress/kirk-brooks/ kirk brooks http://marathon-brianza-51.infoblogdirect.com/wordpress/rifacimento-facciata-raso-brianza/ rifacimento facciata raso brianza http://fuoco-eterno-83.infoblogdirect.com/blog/entry/strage-fuoco-d-artificio/ strage fuoco d artificio http://titolo-dottore-65.infoblogdirect.com/dottore-commercialista-prato/ dottore commercialista prato http://colture-88.mapinews.com/tipo-colture/ tipo colture http://techna-71.mapinews.com techna http://ambrogio-grion-85.infoblogdirect.com/2008/07/14/vivai-ambrogio-giovanni/ vivai ambrogio giovanni http://scrivere-7.infolinediary.com/2008/07/mestiere-scrivere/ mestiere scrivere http://reseller-98.infoblogdirect.com/web-host-reseller/ web host reseller http://morando-mangime-89.infoblogdirect.com/2008/09/mangime-petrini/ mangime petrini http://kompressoren-slovakia-65.infoblogdirect.com/node/sex-in-slovakia/ sex in slovakia http://canessa-guendalina-16.mapinews.com/node/blog-canessa-guendalina/ blog canessa guendalina http://purple-6.infoblogdirect.com purple http://lavorazione-plexiglas-61.mapinews.com/2008/07/11/lavorazione-stucco-veneziano/ lavorazione stucco veneziano http://kristen-dalton-82.indynewsblog.com/2008/08/kristen-bell-sexy/ kristen bell sexy http://prostitutas-tunisino-32.indynewsblog.com/prostitutas-tunisino/ prostitutas tunisino http://direttore-commerciale-3.infoblogdirect.com/2008/08/25/cessione-esercizio-commerciale/ cessione esercizio commerciale http://lavorazione-corallo-63.mapinews.com lavorazione http://street-30.indynewsblog.com/wallstreetitalia-itwalt-disney/ wallstreetitalia itwalt disney http://hermitage-silvi-52.indynewsblog.com/node/video-tg-silvia-rocca/ video tg silvia rocca http://urbino-agriturismo-62.infoblogdirect.com urbino http://dialogo-37.infolinediary.com/2008/08/20/dialogo-assicurazione-it/ dialogo assicurazione it http://tiburtina-ciampino-86.indynewsblog.com tiburtina http://selezione-87.infolinediary.com/blog/entry/selezione-riso/ selezione riso http://index-mundi-24.infoblogdirect.com/2008/08/index-of-handjob-jpg/ index of handjob jpg http://kennedy-center-45.mapinews.com/wordpress/contact-center-lombardia/ contact center lombardia http://abbigliamento-forestale-91.mapinews.com/2008/08/21/abbigliamento-stock-firmato/ abbigliamento stock firmato http://adottare-mucca-66.infoblogdirect.com/node/chihuahua-da-adottare/ chihuahua da adottare http://inserzioni-personali-16.indynewsblog.com/node/test-personalita-lavoro/ test personalita lavoro http://uscire-salutare-60.mapinews.com/uscire-dalla-droga/ uscire dalla droga http://sicilia-61.infolinediary.com/volo-castronuovo-sicilia/ volo castronuovo sicilia http://acquatica-setting-19.mapinews.com/node/documents-and-setting-lilia/ documents and setting lilia | |||
3. | |||
==PHP константи== | ==PHP константи== |
Преработка од 18:58, 12 септември 2008
http://making-11.mapinews.com/bag-making-macchina/ bag making macchina http://conferencing-90.infolinediary.com/wordpress/conferencing-video/ conferencing video http://unghia-34.infolinediary.com/blog/entry/metodo-di-ricostruzione-unghia/ metodo di ricostruzione unghia http://ottenere-34.infolinediary.com/blog/entry/requisito-ottenere-residenza-comune/ requisito ottenere residenza comune http://medico-73.infolinediary.com/2008/07/lettino-medico/ lettino medico http://galante-pittore-92.indynewsblog.com galante http://ricevere-94.infolinediary.com/wordpress/arte-del-ricevere/ arte del ricevere http://presentazione-49.infoblogdirect.com/2008/07/31/modelli-lettera-di-presentazione/ modelli lettera di presentazione http://rinoas-diary-28.indynewsblog.com/2008/07/diary-of-dreams/ diary of dreams http://eleven-winning-19.indynewsblog.com/blog/entry/walkthrough-winning-eleven/ walkthrough winning eleven http://toshiba-connect-31.indynewsblog.com/2008/07/25/nn-connect/ nn connect http://credit-union-81.infoblogdirect.com/wordpress/immagine-prima-comunione/ immagine prima comunione http://checker-marathon-32.mapinews.com/2008/08/29/msn-checker/ msn checker http://esercizio-fisica-31.indynewsblog.com/2008/08/26/esercizio-abusivo-professione/ esercizio abusivo professione http://pignatelli-99.infolinediary.com/node/laboratorio-analisi-pignatelli/ laboratorio analisi pignatelli http://odore-fenolo-54.mapinews.com odore http://service-24.mapinews.com/2008/07/21/gurkha-service-limited/ gurkha service limited http://natal-brasil-77.indynewsblog.com/viaggi-natale-gruppo/ viaggi natale gruppo http://schema-uncinetto-2.infoblogdirect.com schema http://plasma-9.infolinediary.com/2008/07/13/vendita-televisore-al-plasma/ vendita televisore al plasma http://ennio-morlotti-61.indynewsblog.com/node/esercizio-di-matematica-biennio/ esercizio di matematica biennio http://natural-50.infolinediary.com/wordpress/freedownload-dragon-naturally/ freedownload dragon naturally http://audio-97.infoblogdirect.com/2008/08/06/convertitore-audio-coassiale-ottico/ convertitore audio coassiale ottico http://coppette-67.infolinediary.com/blog/entry/fornitore-coppette-gelato/ fornitore coppette gelato http://rinoas-diary-28.indynewsblog.com/2008/08/dll-diary-of-milf/ dll diary of milf http://elkann-10.infolinediary.com/blog/entry/yaki-elkann/ yaki elkann http://luise-61.infoblogdirect.com/dresda-luisenhof/ dresda luisenhof http://pairs-64.mapinews.com/2008/07/britney-pairs/ britney pairs http://processo-ossidoriduzione-39.indynewsblog.com/blog/entry/programma-processo-lasso/ programma processo lasso http://yahoo-48.mapinews.com/2008/08/22/yahoo-guadagnare-svolgendo-son/ yahoo guadagnare svolgendo son http://elenco-amministrazioni-61.indynewsblog.com/wordpress/elenco-stiliste-donna/ elenco stiliste donna http://impruneta-47.infolinediary.com impruneta http://funzionamento-integrati-49.indynewsblog.com/wordpress/funzionalita-lavagnalettore-cd-funzionamento/ funzionalita lavagnalettore cd funzionamento http://steven-6.infolinediary.com/2008/08/steven-erikson/ steven erikson http://sandra-perez-12.indynewsblog.com sandra http://liceo-severi-28.infoblogdirect.com/2008/07/istituto-liceo-scientifici-mantova/ istituto liceo scientifici mantova http://gabriella-jankov-63.infoblogdirect.com/2008/08/08/gabriella-baldi/ gabriella baldi http://aliquota-82.mapinews.com/2008/07/21/aliquota-iva-in-edilizia/ aliquota iva in edilizia http://quotes-66.infolinediary.com/2008/07/26/free-stock-quotes/ free stock quotes http://quattro-32.infoblogdirect.com/2008/07/15/firenze-quattro-amico/ firenze quattro amico http://rivista-30.indynewsblog.com/blog/entry/rivista-economiche/ rivista economiche http://spaak-63.mapinews.com/blog/entry/caterine-spaak/ caterine spaak http://sorrento-24.infolinediary.com/blog/entry/ricevimento-sorrento/ ricevimento sorrento http://punta-stilo-66.infoblogdirect.com punta http://posizioni-76.infolinediary.com/node/preposizioni-semplici/ preposizioni semplici http://calma-bimbo-36.indynewsblog.com/2008/08/alviero-martini-bimbo/ alviero martini bimbo http://erotic-tales-63.mapinews.com/wordpress/linea-erotica/ linea erotica http://animal-15.infoblogdirect.com animal http://ordine-avvocato-18.indynewsblog.com/circolo-coro-avvocato/ circolo coro avvocato http://evasione-94.infolinediary.com/wordpress/renault-evasione/ renault evasione
http://obxyhqzr.greatnow.com/map.html, http://wicaueij.maddsites.com/free-mobile-sex-video-clips-sites.html Free mobile sex video clips sites, =-P, http://hcaralec.maddsites.com/free-teen-video-sex.html Free teen video sex, qwk, http://mbalbhau.maddsites.com/free-sex-positions-with-video.html Free sex positions with video, 16691, http://wicaueij.maddsites.com/free-mobile-sex-video.html Free mobile sex video, %D, http://konuneto.maddsites.com/chyna-doll-sex-video-free.html Chyna doll sex video free, >:-D, http://wicaueij.maddsites.com/male-gay-sex-free-video.html Male gay sex free video, 107, http://hcaralec.maddsites.com/free-homemade-sex-video-clips.html Free homemade sex video clips, kpu, http://konuneto.maddsites.com Free forced sex video clips, 9698, http://mbalbhau.maddsites.com/free-sex-video-movie-clips.html Free sex video movie clips, :-], http://hcaralec.maddsites.com/free-oral-sex-video.html Free oral sex video, =-]], http://mbalbhau.maddsites.com/free-video-machine-sex.html Free video machine sex, 3691, http://konuneto.maddsites.com/free-sex-video-clip-downloads.html Free sex video clip downloads, 884082, http://mbalbhau.maddsites.com/better-sex-video-free-sample.html Better sex video free sample, kqpxc, http://opaproly.maddsites.com/free-sex-video-blog.htm Free sex video blog, 22747,
http://aereoporto-84.infoblogdirect.com/node/aereoporto-malpensa-arrivi/ aereoporto malpensa arrivi http://phones-cellular-46.infoblogdirect.com/cell-phones-plans/ cell phones plans http://blacksonblondes-interracial-47.infoblogdirect.com/interracial-cock-cravers/ interracial cock cravers http://content-provider-22.indynewsblog.com/provider-usa/ provider usa http://senior-33.infoblogdirect.com/senior-sluts/ senior sluts http://carina-67.indynewsblog.com/node/carina-uomo-donna/ carina uomo donna http://melanie-hickman-47.indynewsblog.com/want-candy-melanie-c/ want candy melanie c http://ferien-rimini-97.infoblogdirect.com/hotel-rimini-annuali/ hotel rimini annuali http://claris-35.infolinediary.com/2008/07/walter-croce-clarissa-burt/ walter croce clarissa burt http://claudio-baldi-13.mapinews.com claudio http://procedura-qualita-56.infoblogdirect.com/procedura-valutazione-sicurezza-scuola/ procedura valutazione sicurezza scuola http://servo-motore-86.indynewsblog.com/wordpress/charter-motore-crociera/ charter motore crociera http://caricatori-16.indynewsblog.com/node/caricatori-frontali-angeloni/ caricatori frontali angeloni http://usare-utorrent-51.indynewsblog.com usare http://addetto-52.infolinediary.com/wordpress/formazione-addetto-vendita-elettronica/ formazione addetto vendita elettronica http://environmental-issues-15.infoblogdirect.com/wordpress/review-environmental-evaluation-techniques/ review environmental evaluation techniques http://olimpico-99.infoblogdirect.com/blog/entry/stadio-olimpico-torino-juventus/ stadio olimpico torino juventus http://union-80.mapinews.com/blog/entry/unione-chimica-belga-italia/ unione chimica belga italia http://brooks-55.infoblogdirect.com/wordpress/kirk-brooks/ kirk brooks http://marathon-brianza-51.infoblogdirect.com/wordpress/rifacimento-facciata-raso-brianza/ rifacimento facciata raso brianza http://fuoco-eterno-83.infoblogdirect.com/blog/entry/strage-fuoco-d-artificio/ strage fuoco d artificio http://titolo-dottore-65.infoblogdirect.com/dottore-commercialista-prato/ dottore commercialista prato http://colture-88.mapinews.com/tipo-colture/ tipo colture http://techna-71.mapinews.com techna http://ambrogio-grion-85.infoblogdirect.com/2008/07/14/vivai-ambrogio-giovanni/ vivai ambrogio giovanni http://scrivere-7.infolinediary.com/2008/07/mestiere-scrivere/ mestiere scrivere http://reseller-98.infoblogdirect.com/web-host-reseller/ web host reseller http://morando-mangime-89.infoblogdirect.com/2008/09/mangime-petrini/ mangime petrini http://kompressoren-slovakia-65.infoblogdirect.com/node/sex-in-slovakia/ sex in slovakia http://canessa-guendalina-16.mapinews.com/node/blog-canessa-guendalina/ blog canessa guendalina http://purple-6.infoblogdirect.com purple http://lavorazione-plexiglas-61.mapinews.com/2008/07/11/lavorazione-stucco-veneziano/ lavorazione stucco veneziano http://kristen-dalton-82.indynewsblog.com/2008/08/kristen-bell-sexy/ kristen bell sexy http://prostitutas-tunisino-32.indynewsblog.com/prostitutas-tunisino/ prostitutas tunisino http://direttore-commerciale-3.infoblogdirect.com/2008/08/25/cessione-esercizio-commerciale/ cessione esercizio commerciale http://lavorazione-corallo-63.mapinews.com lavorazione http://street-30.indynewsblog.com/wallstreetitalia-itwalt-disney/ wallstreetitalia itwalt disney http://hermitage-silvi-52.indynewsblog.com/node/video-tg-silvia-rocca/ video tg silvia rocca http://urbino-agriturismo-62.infoblogdirect.com urbino http://dialogo-37.infolinediary.com/2008/08/20/dialogo-assicurazione-it/ dialogo assicurazione it http://tiburtina-ciampino-86.indynewsblog.com tiburtina http://selezione-87.infolinediary.com/blog/entry/selezione-riso/ selezione riso http://index-mundi-24.infoblogdirect.com/2008/08/index-of-handjob-jpg/ index of handjob jpg http://kennedy-center-45.mapinews.com/wordpress/contact-center-lombardia/ contact center lombardia http://abbigliamento-forestale-91.mapinews.com/2008/08/21/abbigliamento-stock-firmato/ abbigliamento stock firmato http://adottare-mucca-66.infoblogdirect.com/node/chihuahua-da-adottare/ chihuahua da adottare http://inserzioni-personali-16.indynewsblog.com/node/test-personalita-lavoro/ test personalita lavoro http://uscire-salutare-60.mapinews.com/uscire-dalla-droga/ uscire dalla droga http://sicilia-61.infolinediary.com/volo-castronuovo-sicilia/ volo castronuovo sicilia http://acquatica-setting-19.mapinews.com/node/documents-and-setting-lilia/ documents and setting lilia
PHP константи
Константите исто како променливите се користат за чување податоци. Главна разлика меѓу нив е тоа што вредностите на константите не може да се менуваат. Тие може да бидат математички константи, шифри, патеки до датотеки... Со користење на константи Вие ја „заклучувате" одредена вредност, со што таа е заштитена од промени. Не мора да барате низ целата програма за да ја промените нејзината вредност, туку само ја менувате на почетокот од програмата. Еве еден пример:
<?php define("PASSWORD", "admin"); echo (PASSWORD); //ke ja prikaze vrednosta na promenlivata PASSWORD "admin" echo constant("PASSWORD"); //isto ke otpecati "admin" echo "PASSWORD"; //ke prikaze "PASSWORD" ?>
PHP обезбедува неколку вградени константи за програмерите. Пр. "_FILE_" го дава името на датотеката од која моментално интерпретерот чита. "_LINE_" ја враќа линијата во таа датотека. Овие константи се корисни за генерирање текстуални пораки со грешки. За верзијата на интерпретерот податоци може да се најдат во "PHP_VERSION" константата.
PHP низи
Низите може да се искористат на неколку начини да се чуваат и организираат податоци брзо и едноставно. Тие се едни од најкорисните типови податоци достапни во кој и да е програмски јазик. Низите наједноставно може да се објаснат како листа од елементи. До нивните елементи може да се пристапи со наведување на индексот како позиција во низата. Таа позиција може да биде со број или со име. Низите до кои се пристапува со број (индекс) се наречени индексни низи, а оние со имиња на елементите – асоцијативни низи. Во PHP сите низи се асоцијативни, но оставена е можноста за индексни низи.
Индексни низи
Пр.
<?php $sedum = 7; $imeNaNiza = array("ova e element", 5, $sedum); echo $imeNaNiza[0]; //ova ke otpecati: ova e element echo $imeNaNiza[1]; //ova: 5 echo $imeNaNiza[2]; //ova: 7 ?>
Како што можете да видите елементите во низата може да бидат било кој тип податок, како и променливи. Дозволено е во една низа, некој елемент да биде повторно низа. Ако сакате да проверете дали една променлива е низа може да се користи функцијата is_array(). Забележувате дека индексните низи почнуваат со индекс 0.
Aсоцијативни низи
Асоцијативните низи користат клучеви за пристап до своите елементи. Пр.
<?php $prva_niza = array ("kluc1" => "prviot element", "kluc2" => "vtoriot element"); $vtora_niza = array( "kluc3" => "prv element vo vtorata niza", "kluc4" => "vtor element vo vtorata niza" ); echo $prva_niza['kluc1']; //"prviot element" echo $prva_niza['kluc2']; //"vtoriot element" echo $vtora_niza['kluc3']; //"prv element vo vtorata niza" echo $vtora_niza['kluc4']; //"vtor element vo vtorata niza" ?>
Уште еден пример за користење асоцијативни низи:
<?php $cokolado = array ( "nestle" => "50", "milka" => "60", "kandi" => "10" ); echo "nestle kosta $cokolado['nestle'], milka kosta $cokolado['milka'], a kandi mnjam mnjam $cokolado['kandi']."; ?>
Бидејќи индексите во асоцијативните низи не се броеви, ние не можеме да користиме едноставни бројачи во циклус за едноставно минување низ целата низа. Затоа со нив може да користите foreach за да итерирате низ целата низа. Еве како ќе ги прочитаме сите податоци и ќе ги внесеме во табела:
<?php $cokolado = array ( "nestle" => "50", "milka" => "60", "kandi" => "10" ); //za pecatenje naslov na tabelata echo "<table border='1' cellpadding = '5'>"; echo "<tr><th>Cokolado</th><tr>"; //ova e toa sto ke pomine niz celata niza, zemajki go $Cokolado kako kluc i $Cena kako vrednost foreach($cokolado as $Cokolado => $Cena) { echo "<tr><td>$Cokolado </td><td>$Cena</td></tr>"; }
echo
?>
Како да подредите низа
Често е потребно елементите во една низа да се подредат по некој редослед: опаѓачки или растечки. Ако низата содржи текстуални променливи, тогаш е потребен алфабетски редослед. Сортирањето на едно-димензионални низи е едноставно.
Сортирање нумерички индексирани низи Постои низа со текстуални променливи (string)
<?php $flowers = array("rose", "daisy", "orchid", "tulip", "chamomile"); sort($flowers); for ($i = 0; $i < 4; $i++) // da se otpecatat elementite echo $flowers[$i]."<br />"; ?>
Во овој случај елементите ќе бидат потредени во алфабетски редослед. Излезот би бил: camomile daisy orchid rose tulip
Можете да ги сортирате низите и во нумерички редослед. Ако имате низа која пр. ги содржи цените на цвеќињата, може да се сортираат во растечки редослед. Пр.:
<?php $prices = array(1.25, 0.75 , 1.15, 1.00, 0.50); sort($prices); for($i = 0; $i <= 4; $i++) echo $prices[$i]."<br />"; ?>
Излезот е следен: 0.75 1.00 1.15 1.25
Да спомнеме дека во сортирањето на низите, важно е дали буквите се пишувани со голема или мала буква. Така, "A" е помало од "Z", a "Z" е помало од "a".
Сортирање асоцијативни низи
Ако користите асоцијативни низи, не може да се користи sort() за да се подредат. Ако користите sort() на асоцијативна низа, таа се подредува по нумеричките вредности на нејзиниот индекс. Затоа се користи asort() функцијата, за клучевите и вредностите да останат поврзани заедно. Следниот код креира асоцијативна низа која содржи вредности за три цвеќиња и нивните цени. Потоа ги подредува во растечки редослед, според цената.
<?php $shop = array ("rose" => "5.00", "daisy" => "4.00", "orchid" => "2.00",
);
asort($shop); foreach($shop as $key => $value) echo $key." costs ".$value." dollars<br />"; ?></nowiki>
Овој код ќе отпечати: orchid costs 2.00 dollars daisy costs 4.00 dollars rose costs 5.00 dollars
Функцијата asort() ја подредува низата во растечки редослед според вредноста на секој елемент. Во низава, вредности се цените, а клучеви се имињата на цвеќето. Ако, на пр., сакате да ги сортирате според клучевите, се користи функцијата ksort(). Следниов код ќе даде подредена низа според клучевите:
<?php $shop = array ("rose" => "5.00", "daisy" => "4.00",
" orchid" => "2.00" );
ksort($shop); foreach($shop as $key => $value) echo $key." costs ".$value." dollars<br />"; ?>
Излезот: daisy costs 4.00 dollars orchid costs 2.00 dollars rose costs 5.00 dollars
Сортирање низи во обратен редослед Сите разгледани функции досега, сортираат во растечки редослед. Секоја од овие функции: sort(), asort(), ksort() имаат функции кои работат обратно од нив: rsort(), arsort(), krsort(), соодветно. Користењето на овие функции е исто како претходните.
Мулти-димензионални низи
Низите често не се само листа на подредени клучеви и вредности. Секој елемент во една низа, може да содржи друга низа, која исто така може да има свои низи. Со таков принцип, може да се креираат две-димензионални или три-димензионални низи.
Две-димензионални низи
Замислете дека сте сопственик на продавница за цвеќе. Едно-димензионална низа е доволна за да се чуваат вредности за цвеќето и цената. Но, ако сакате да чувате повеќе од една вредност, тогаш Ви треба нешто друго. Решението е во мулти-димензионалните низи. Табелата подолу може да прикаже дво-димензионална низа. Секој ред претставува тип на цвеќе, а секоја колона одреден атрибут за цвеќето.
Title Price Number rose 1.25 15 daisy 0.75 25 orchid 1.15 7
Да зачувате вредности во мулти-димензионална низа, се користи нешто како овој код:
<?php $shop = array ("rose", 1.25, 15), array ("daisy", 0.75, 25), array ("orchid", 1.15, 7) ); ?>
Овој код покажува дека променливата $shop, сега содржи три низи. За да добиете вредности од едно-димензионална низа, треба да го кажете името на низата и индексот. Истото е потребно и за дво-димензионалните низи, со една разлика: секој елемент има два индекси, ред и колона. За да ги прикажете елементите од оваа низа, може да користите for внатре во for, вгнездени циклуси.
<?php echo "<h1>Pristap do sekoj element</h1>"; echo $shop[0][0]." costs ".$shop[0][1]." and you get ".$shop[0][2]."<br />"; echo $shop[1][0]." costs ".$shop[1][1]." and you get ".$shop[1][2]."<br />"; echo $shop[2][0]." costs ".$shop[2][1]." and you get ".$shop[2][2]."<br />"; echo "<ol>"; for ($row = 0; $row < 3; $row++) { echo "<ul>"; for ($col = 0; $col < 3; $col++) { echo "<li>".$shop[$row][$col]."</li>"; } echo "</ul>"; echo "</li>"; } echo "</ol>"; ?>
Наместо користење на индексите за број на колона, може да се користат нивните имиња. За ова се користат асоцијативни низи. Следниот код, ќе ја направи истата низа, користејќи имиња за колоните.
<?php $shop = array( array( Title => "rose", Price => 1.25, Number => 15 ), array( Title => "daisy", Price => 0.75, Number => 25, ), array( Title => "orchid", Price => 1.15, Number => 7 ) ); ?>
Полесно е да се работи со овие низи, во случај да треба да добиете една вредност од неа. Потребниот податок лесно се пронаоѓа ако го побарате со точното име на ред и колона. Меѓутоа се губи можноста да се поминува целата низа со едноставен for. Еве еден начин на кој може да се помине целата низа:
<?php echo "<h1>Manual access to each element from associative array</h1>"; for ($row = 0; $row < 3; $row++) { echo $shop[$row]["Title"]." costs ".$shop[$row]["Price"]." and you get ".$shop[$row]["Number"]; echo "<br />"; } echo "<h1>Using foreach loop to display elements</h1>"; echo "<ol>"; for ($row = 0; $row < 3; $row++) { echo "<li><b>The row number $row</b>"; echo "<ul>"; foreach($shop[$row] as $key => $value) { echo "<li>".$value."</li>"; } echo "</ul>"; echo "</li>"; } echo "</ol>"; ?>
Три-димензионални низи
Не мора да бидете ограничени на две-димензионални низи. И тие низи што се внатре може да содржат други низи. Три-димензионалните низи се карактеризираат со висина, ширина и длабочина. Ако можете да замислите две-димензионална низа како табела, пробајте да замислите повеќе такви табели една позади друга. Секој елемент би бил претставен со ниво, ред и колона. Ако ги класифицираме цвеќињата во една продавница по категории, тогаш податоците за нив ќе треба да ги чуваме во три-димензионална низа. Еве како може тоа да се изврши:
$shop = array(array(array("rose", 1.25, 15), array("daisy", 0.75, 25), array("orchid", 1.15, 7) ), array(array("rose", 1.25, 15), array("daisy", 0.75, 25), array("orchid", 1.15, 7) ), array(array("rose", 1.25, 15), array("daisy", 0.75, 25), array("orchid", 1.15, 7) ) ); ?>
Оваа низа има само нумерички индекси, па може да се користат вгнездени for циклуси за да се прикажат сите податоци:
<?php echo "<ul>"; for ( $layer = 0; $layer < 3; $layer++ ) { echo "<li>The layer number $layer"; echo "<ul>"; for ( $row = 0; $row < 3; $row++ ) { echo "<li>The row number $row"; echo "<ul>"; for ( $col = 0; $col < 3; $col++ ) { echo "<li>".$shop[$layer][$row][$col]."</li>"; } echo "</ul>"; echo "</li>"; } echo "</ul>"; echo "</li>"; } echo "</ul>"; ?>
Овој начин на креирање низи, овозможува креирање на четири и пет-димензионални низи. Синтаксичките правила не го ограничуваат бројот на димензии.
PHP условни наредби
Понекогаш кога пишувате код, доаѓа до случај кога треба да се избере едно или друго. Овде се користат наредби за услов. Условните наредби се сет од команди користени да изведуваат различни акции врз основа на различни услови. Овде ќе се разгледаат две структури: if…else и switch.
if…else
На пример треба да се провери дали една променлива има вредност точно или неточно, дали некоја текстуална променлива го содржи одреден текст, дали објектот е празен или полн... Условот може да биде што и да е, што и да поставиме. Синтаксата на if структурата е:
if (услов) { наредби1 } else { наредби2 }
Пр.
<?php $rezultat = 70; if ($rezultat >= 57) { echo "Uslovot pomina kako token <br />"; } else { echo "Uslovot ne pomina <br />"; } ?>
Следниот пример ќе покаже работа со elseif. Тоа се користи во сличаи кога треба за повеќе вредности да се прикажат различни резултати.
<?php $rezultat = 70; if ($rezultat >= 75) { echo "izlez 1"; } elseif ($rezultat >= 60) { echo "izlez 2"; } elseif($rezultat >= 45) { echo "izlez 3"; } else { echo "izlez 4"; } ?>
Командата switch
Оваа команда работи исто како if. Со неа се овозможува проверка за повеќе вредности што кај if e понепрегледно и побавно. Синтаксата за switch:
switch (израз) { case случај 1: наредби_1 [break;] case случај_2: наредби_2 [break;] ... default: наредби_n [break;] }
Програмата прво бара случај што се поклопува и потоа му ја предава контролата нему. Ги извршува наредбите што се дадени и излегува од switch. Ако не се пронајде случај кој се поклопува програмата бара default и ако постои ги извршува тие наредби. Ако не најде ни default програмата продолжува со работа без приказ од switch. break се користи за да се прекине автоматско поминување на следниот случај. Кога ќе се извршат наредбите од пронајдениот случај, програмата да продолжи со работа надвор од switch. Пр.:
$flower = "rose";
switch ($cokolado) { case "milka" : echo $cokolado." costs 60den."; break; case "nestle" : echo $cokolado." costs 50den."; break; case "kandi" : echo $cokolado." costs 10den"; break; default : echo "Nema takvo cokolado vo prodavnicata :("; break; }
Може да се прават проверки со математички операции како поголемо, помало или еднакво:
<?php $broj = 5; switch ($broj) { case 0: echo "Nula ne e validen slucaj."; break; case $ broj < 0: echo "Negativni broevi ne se dozvoleni."; break; default: echo "Vnesen e pozitiven broj."; break; } ?>
Откако ќе пронајде услов кој се исполнува PHP престанува со барање друг случај.
Циклуси
Во програмирањето, често е потребно да се повторува еден ист блок од наредби. Тоа се случува одреден број пати, дадено од програмерот, или додека не се исполни некој услов. Ова се прави со наредби за скок или циклуси. PHP има две главни групи на овие наредби: for и while. Наредбата for, најмногу ни служи за повторување одреден број пати некои наредби да се извршуваат. Наредбата while, се користи за повторување на неодреден број пати, додека некој услов не се исполни. Овде се користат break и continue за контрола на скоковите.
while
Наредбата while извршува еден блок наредби, ако и додека еден услов е точен. Ако условот станува неточен, контролата се префрла на наредбата што следува после неа. Синтаксата е ваква:
while (condition) { naredbi; }
Блокот наредби кој е внатре во while циклусот секогаш е затворен со { и }. Овие загради му кажуваат на PHP кои наредби да ги повторува. while се користи за работење со листи каде што не се знае точниот број на елементи во неа:
while (seuste ima redovi vo bazata) { citaj od eden red;
pomini na sledniot red;
}
Следниот пример извршува циклус каде што почетната вредност е 0. Овој циклус ќе се повторува се додека i е помала или еднаква на 10, а ќе се зголемува на секој скок:
<?php $i = 0; while ($i <= 10) { echo "Brojot e: ".$i."<be/ >"; $i++; } ?>
Сега да погледнеме покорисен пример. Еве како се прави паѓачко мени за денови, месеци и години. Овој код може да се искористи во форма за регистрација:
<?php $month_array = array( "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"); echo "<select name=\"day\">"; $i = 1; while ( $i <= 31 ) { echo "<option value=".$i.">".$i."</option>"; $i++; } echo "</select>"; echo "<select name=\"month\">"; $i = 0; while ( $i <= 11 ) { echo "<option value=".$i.">".$month_array[$i]."</option>"; $i++; } echo "</select>"; echo "<select name=\"year\">"; $i = 1900; while ( $i <= 2007 ) { echo "<option value=".$i.">".$i."</option>"; $i++; } echo "</select>"; ?>
Бидете сигурни дека условот во некој случај ќе стане неточен. Инаку, циклусот нема никогаш да заврши.
do...while
Наредбите do...while се слични на while, само што условот се проверува на крајот од секое извршување на наредбите во него. Тоа значи дека do...while секако ќе се изврши барем еднаш. Еве ја синтаксата:
do { naredbi; } while (condition);
Следниот код, ќе ја зголемува вредноста на i за еден се додека таа е помала или еднаква на 10:
<?php $i = 0; do { echo "Brojot e ".$i."<br/>"; $i++; } while ($i <= 10); ?>
for
Наредбата for се користи кога точно знаете колку пати сакате некоји наредби да се извршат. Затоа за for се вели дека е конечен циклус. Синтаксата е поразлична од претходните:
for (inicijalizacija; uslov; skok) { naredbi; }
Трите изрази што ги добива for се разделени со ;. Ова се случува кога се извршува for: 1.Се иницијализираат бројачи, кои ќе се менуваат според скокот. 2.Се проверува условот. Ако условот е точен, се извршуваат наредбите внатре, ако не-се прекинува. 3.Се изменува бројачот според скокот. 4.Се извршуваат наредбите и контролата оди пак на чекор 2.
Еве еден едноставен пример:
<?php for ($i = 0; $i <= 10; $i++) { echo "Brojot e ".$i." <br/>"; } ?>
Пр. со вгнездени циклуси:
<?php echo "<h1>Multiplication table</h1>"; echo "<table border=2 width=50%"; for ($i = 1; $i <= 9; $i++ ) { //nadvoresen ciklus echo "<tr>"; echo "<td>".$i."</td>"; for ( $j = 2; $j <= 9; $j++ ) { // vnatresen ciklus echo "<td>".$i * $j."</td>"; } echo "</tr>"; } echo "</table>"; ?>
Еве уште еден пример што користи две променливи. Една за да ги собира сите броеви од 1 до 10, а друга да ги собира само истите.
<?php $total = 0; $even = 0; for ($x = 1, $y = 1; $x <=10; $x++, $y++) { if (($y % 2) == 0) { $even = $even + $y; } $total = $total + $x; } echo "Celiot zbir e ".$total."<br/>"; echo "Zbirot na ednakvite e ".$even; ?>
foreach
foreach е варијација на for и помага да се итерира низ елементи од една низа. Има две различни варијанти на foreach циклусот:
foreach (array as value) { naredbi; }
и
foreach (array as key => value) { naredbi; }
Пример, печатење вредности од една низа:
<?php $email = array('john.smith@server.com', 'alex@server.com' ); foreach ($email as value) { echo "Sending mail to ".$value."<br/>"; } ?>
PHP ги извршува наредбите кои му се дадени на foreach онолку пати колку што има вредности во низата. Елементите се пронаоѓаат според нивниот внатрешен редослед. Циклусот продолжува се додека не се поминат сите елементи и не дојде до крај на низата. Другиот вид на foreach наредби се користи со асоцијативни низи:
<?php $person = array('name' => 'Andrew', 'age' => 21, 'address' => '77, Lincoln st.'); foreach ($person as $key => $value) { echo $key." is ".$value."<br/>"; } ?>
Во овој случај, клучот за дава на променливата $key, а вредноста на променливата $value. За време на извршувањето на foreach циклусот, тој не работи со вистинската низа, туку со копија од неа. За време на секој циклус, може да се манипулира со $value, но вистинската вредност останува иста.
break и continue
Понекогаш не треба да се чека циклусот да заврши сам од себе, туку треба да и се даде контрола на некоја наредба таа да го прекине. Тоа се извршува со continue и break. break, го прекинува тековниот while или for циклус и продолжува со извршување на кодот после нив. Дури може да се даде вредност после break, со која ќе се каже колку нивоа да бидат прескокнати. Еве пример за користење на break:
<?php echo "<p><b>Example of using the Break statement:</b></p>"; for ($i=0; $i<=10; $i++) { if ($i==3){break;} echo "The number is ".$i; echo "<br />"; } echo "<p><b>One more example of using the Break statement:</b><p>"; $i = 0; $j = 0; while ($i < 10) { while ($j < 10) { if ($j == 5) { break 2; } // breaks out of two while loops $j++; } $i++; } echo "The first number is ".$i."<br />"; echo "The second number is ".$j."<br />"; ?>
Наредбата continue го прекинува извршувањето на блокот наредби и продолжува со извршување со следниот скок:
<?php echo "<p><b>Example of using the Continue statement:</b><p>"; for ($i=0; $i<=10; $i++) { if (i==3){continue;} echo "The number is ".$i; echo "<br />"; } ?>
Функции
Функција е блок наредби, кои може да бидат повикани од кој и да е дел од скриптата откако таа ќе биде декларирана. Кодот запишан во функција се игнорира, се додека таа функција не се повика. Со ова се добива на брзина, се намалуваат грешките и се зголемува прегледноста затоа што не се користат долги, комплицирани кодови. За да се декларира функција, потребна е оваа синтакса:
<?php function ime_na_funkcija(param_1, ... , param_n) { naredbi; return povratna_vrednost; } ?>
Во функциите може да се додаваат и други вредности како променливи, така што тие ќе бидат локални променливи.
Креирање едноставна функција
Првата функција, ќе отпечати "php rulez" пет пати, но таа нема да прими параметри. Втората ќе добие параметри. Параметарот е податок кој е потребен за функцијата да се изврши. Пр: <?php function first() { for($i = 0; $i !=5; $i++) echo "<p>php rulez!</p>"; } function second($num, $msg) { for($i = 0; $i != $num; $i++) echo "<p>". $msg ."</p>"; } echo "Ova e pred da se povikaat funkciite.<br>"; echo "Izlezot od prvata funkcija e: " first(); echo "Ova e izlezot od vtorata funkcija: " second(5, "bla bla bla"); echo "Ova e posle dvete funkcii<br>"; ?> Следниот пример, креира функција која може да пресмета аритметичка средина и да го даде резултатот: <?php function ar_sr($a, $b) { $result = ($a + $b) / 2; return $result; } echo ar_sr(4, 6), "<br>"; echo ar_sr(2314, 12412), "<br>"; ?>
Домен на променливите и време на живот
Важно е да се напомне дека ако дефинирате променливи внатре во функциите, таа променлива е достапна само внатре во функцијата. Таа не може да се користи во другиот дел од кодот или во друга функција. Доменот на променливите во функцијата е локален. Функцијата што треба да користи променлива која е дефинирана надвор од неа, мора да ја повика со клучниот збор global:
<?php function AddingNumbers() { global $sum = 2 + 2; } $sum = 0; AddingNumbers(); echo "2 + 2 = ".$sum; ?>
Додека доменот на променливата дефинирана во функцијата е локален, променливата во главниот код е глобална. Зборчето global му кажува на PHP да бара променлива надвор од функцијата. Променлива која е дефинирана во програмскиот код, е жива се додека скриптата се извршува. Кога таа ќе заврши, престанува да постои. Променлива која е во функција, постои се додека се извршува функцијата.
Обработка на форми со PHP
Една од најдобрите работи во PHP е можноста да одговори на барања на корисникот и да испраќа податоци од HTML форми. Можете да обработувате податоци генерирани од една HTML форма, да донесувате заклучоци врз основа на неа и да креирате динамични веб страни.
HTML форма
Пред да почнете да ги обработувате информациите добиени од корисникот, треба да креирате HTML форма од која тие податоци ќе ги соберете. Има два методи кои се користат за праќање податоци: GET и POST. Овие два методи се дефинирани во HTML елементите, како нивни атрибути. Исто така ќе мора да дадете и адреса на датотеката која ќе ги обработува овие информации. Еве една HTML форма која ќе испраќа податоци, користејќи го POST методот. Информациите пратени од формата со овој метод се невидливи за другите и не е ограничена количината на податоци кои се праќаат. Името на оваа датотека нека биде form.html.
<html> <head> <title>Process the HTML form data with the POST method</title> </head> <body> <form name="myform" action="process.php" method="POST"> <input type="hidden" name="check_submit" value="1" /> Name: <input type="text" name="Name" /><br /> Password: <input type="password" name="Password" maxlength="10" /><br /> Select something from the list: <select name="Seasons"> <option value="Spring" selected="selected">Spring</option> <option value="Summer">Summer</option> <option value="Autumn">Autumn</option> <option value="Winter">Winter</option> </select><br /><br /> Choose one: <input type="radio" name="Country" value="USA" /> USA <input type="radio" name="Country" value="Canada" /> Canada <input type="radio" name="Country" value="Other" /> Other <br /> Choose the colors: <input type="checkbox" name="Colors[]" value="green" checked="checked" /> Green <input type="checkbox" name="Colors[]" value="yellow" /> Yellow <input type="checkbox" name="Colors[]" value="red" /> Red <input type="checkbox" name="Colors[]" value="gray" /> Gray <br /><br /> Comments:<br /> <textarea name="Comments" rows="10" cols="60">Enter your comments here</textarea><br /> <input type="submit" /> </form> </body> </head> </html>
Примерот вклучува повеќе елементи: поле за внес на податоци, поле за избор од неколку можности, поле за текст и копче за испраќање на формата. Кога корисникот го притиснува копчето, податоците се праќаат до process.php датотеката. Забележувате дека на елементите за избор, обележано или не (checkbox), има додадено средни загради []. Ова му кажува на PHP дека вредностите овде може да се низа од податоци. Корисникот може да избере од повеќе вредности и PHP ќе ги смести нив во низа. Пр. ако изберете Green и Yellow и ја извршите формата, тогаш $_POST['Colors'] е низа. $_POST['Colors'][0] е Green, а $_POST['Colors'][1] е Yellow. Ова е затоа што атрибутот name на оваа контрола е со []. Ако не беше, $_POST['Colors'] ќе беше обичен текст кој содржи само една од избраните вредности.
Обработка на податоците од формата
Следно, треба да се направи PHP датотеката која ќе ја обработи формата. Кога ќе се изврши формата со кликнување на копчето (submit), тогаш автоматски се генерираат две суперглобални променливи: $_GET и $_POST, со сите податоци пратени co GET и POST соодветно. Така, контролата наречена Name, која беше пратена со POST, ќе биде зачувана како $_POST['Name']. Снимете го овој код во датотека process.php во истиот директориум како и form.html:
<?php //Check whether the form has been submitted if (array_key_exists('check_submit', $_POST)) { //Converts the new line characters (\n) in the text area into HTML line breaks (the <br /> tag) $_POST['Comments'] = nl2br($_POST['Comments']); //Check whether a $_GET['Languages'] is set if ( isset($_POST['Colors']) ) { $_POST['Colors'] = implode(', ', $_POST['Colors']); //Converts an array into a single string } //Let's now print out the received values in the browser echo "Your name: {$_POST['Name']}<br />"; echo "Your password: {$_POST['Password']}<br />"; echo "Your favourite season: {$_POST['Seasons']}<br /><br />"; echo "Your comments:<br />{$_POST['Comments']}<br /><br />"; echo "You are from: {$_POST['Country']}<br />"; echo "Colors you chose: {$_POST['Colors']}<br />"; } else { echo "You can't see this page without submitting the form."; } ?>
Во првиот ред, се проверува дали е страната со податоци испратена и оваа скрипта да не се изврши сама. Следно, се конвертираат новите редови во HTML
. Потоа се проверува дали низата полна, а ако е се користи функцијата implode() да се конвертира $_POST['Colors'] низата во една текстуална променлива. Последно, се печатат податоците во прелистувачот.
GET и POST
Кога дефинираме метод да испраќа податоци до PHP скрипта, користиме или GET или POST методи. И двата праќаат променливи до скриптата, но тоа го прават на различен начин. GET методот ги праќа своите променливи во адресата на веб прелистувачот, во URL. Така пратените податоци, може лесно да се видат од од други корисници, а може и да се изменуваат. Затоа, овој метод не треба да се користи кога се праќаат шифри или други приватни податоци. Исто така, не треба да се користат кога се прават некои акции и измени на серверот, како менување и снимање податоци во бази. Меѓутоа, се користи поради тоа што кога податоците се прикажани во URL-то, таа страна може да се сними во омилени и да се запамти (bookmarks). Методот GET има лимит за пратените податоци. Така, како резултат на ова, ако испраќате голем број податоци има можност да изгубите голем дел од нив. Методот POST, ги праќа своите променливи во позадина и нема лимит на големината на испратените податоци. Бидејќи податоците не се пратени преку URL, не може оваа страна да се стави во омилени.
PHP колачиња
Колаче, е име кое се користи за порака која е пратена од веб серверот до клиентскиот веб прелистувач. Прелистувачот ги памти овие пораки во мали текстуални датотеки локално, на компјутерот на корисникот. Секој пат, кога истиот компјутер ќе побара страна, колачето се праќа назад до серверот. Има многу работи кои може да се прават користејќи колачиња. Тие се користат за чување податоци за корисникот, посетени страни, резултати од гласања итн. Главна намена на колачињата е да идентификуваат корисници и (ако е можно) да ги припремат страните за прикажување. Обично колачињата се користат за чување мала количина податоци. веб страните можат да ги читаат податоците од колачињата и да ги користат по потреба. Иако колачињата не можат да наштетат, некои корисници забрануваат пристап до нивните компјутери со помош на колачиња, бидејќи се загрижени за приватноста. Во овој случај мора да користите сесии (Sessions).
Како да се креира колаче?
PHP колачињата може да се креираат користејќи ја функцијата setcookie(). Синтаксата е следна: setcookie(name[, value[, expire[, path[, domain[, security]]]]])
[name] – Името на колачето. Имињата на сите пратени колачиња се снимани како суперглобална низа $_COOKIE. [value] – Вредноста на колачето. Таа е врзана со името. [expire] – Времето за кое колачето веќе нема да биде валидно (во секунди). [path] – Ја дава точната адреса на домејнот кој може да го користи тоа колаче. [domain] – Домејнот за кој колачето е валидно. Ако не е специфицирано, тогаш оваа вредност е домејнот на оној кој што го креирал колачето. [security] – Кажува дали колачето ќе биде пратено преку HTTPS. Вредноста 1 кажува дека ќе биде пратено преку сигурна врска, но дека може да не е сигурно. Колачето е обична текстуална датотека, па не е секогаш сигурно. Вредноста 0 значи дека ќе биде пратено низ стандарда HTTP постапка. Во овој пример, ќе се креира колаче со име "MyCookie" и ќе му се даде вредност "PHP tutorial". Исто така, се даваат информации дека колачето ќе престане да важи после 1 час и дека тоа важи за сите страни во директориумот tutorials.
<?php setcookie("myCookie", "PHP Tutorial", time()+3600, "/tutorials"); ?>
Поради начинот на кој работат колачињата со HTTP, важно е да се праќаат сите колачиња пред било каков излез на екран. Ова значи дека ќе се повикаат сите функции пред да се отпечатат или прикажат резултати. Ако не, тогаш PHP ќе соопшти и колачињата нема да бидат испратени.
Како да се добијат податоци од колаче?
Откако е направено колачето, податоците од него треба да се извлечат. Како што е претходно кажано, имињата на колачињата се снимени во суперглобалната низа $_COOKIE. Во овој случај, ќе се повика претходното колаче кое го креиравте:
<?php echo "The cookie value is ".$_COOKIE['myCookie']; ?>
Излезот од ова е: "The cookie value is PHP Tutorial".
Како да се избрише колаче?
По правило, колачињата се бришат кога ќе се затвори прелистувачот. Тоа може да се измени со тоа што ќе се даде вредност, време, за колку тоа колаче да се избрише. За да се осигурате дека тоа време, не е поминато време (време во минатото), се користи функцијата time() која ќе го даде моменталното време.
Динамично генерирање слики
Динамичното генерирање слики може да биде многу корисна вештина. PHP има неколку вградени функции за генерирање слики, пр., да се генерираат, да се менуваат постоечки... За да се користат овие, треба да биде инсталирана GD библиотеката. Во овој туторијал, ќе биде покажано како да се добијат интересни и корисни ефекти користејќи функции за работа со слики. Ќе се разгледаат две практични операции: креирање сигурносни слики (captcha) и график користејќи нумерички вредности добиени од MySQL база на податоци.
Креирање сигурносни слики
Еве ја функцијата која креира сигурносна слика (captcha). Следно ќе биде детално разгледан секој чекор во генерирањето слика.
<?php create_image(); exit; function create_image() { $md5 = md5(rand(0,999)); $pass = substr($md5, 10, 5); $width = 100; $height = 20; $image = ImageCreate($width, $height); $white = ImageColorAllocate($image, 255, 255, 255); $black = ImageColorAllocate($image, 0, 0, 0); $grey = ImageColorAllocate($image, 204, 204, 204); ImageFill($image, 0, 0, $black); ImageString($image, 3, 30, 3, $pass, $white); ImageRectangle($image, 0, 0, $width-1, $height – 1, $grey); imageline($image, 0, $height/2, $width, $height/2, $grey); imageline($image, $width/2, 0, $width/2, $height, $grey); header("Content-Type: image/jpeg"); ImageJpeg($image); ImageDestroy($image); } ?>
За да се креира нова слика или да се измени постоечка, треба да се направи идентификатор за неа. Во претходниот пример, креиравме празен простор со повикување на функцијата ImageCreate() и со давање на параметрите $width и $height. Друг начин ова да се направи е со повикување слика од постоечка датотека. Во зависност од форматот на сликата, може да се користат следниве функции: ImageCreateFromPNG(), ImageCreateFromGIF(), ImageCreateFromJPEG(). Параметарот на секоја од овие функции е името на датотеката. Потоа треба да ги изберете боите кои ќе се користат при цртањето. За ова се користи функцијата ImageColorAllocate() и идентификатори за црвена, зелена и сина боја. Во следниот чекор, се генерира сликата. Прво користејќи ја функцијата ImageFill() креирате црна позадина. Параметри овде се идентификаторот за сликата, координати и боја. Тогаш користите ImageString() за да се додаде текст на сликата. Нејзини параметри се идентификатор за сликата, фонт, координати за текстот и боја на текстот. На крај, се цртаат две линии и правоаголник за да се заштити сликата. Правоаголникот е со димензии помали од целата слика, за да не се поклопи со рамката на сликата. Кога сликата е направена, може да ја користите како посебна слика и во прелистувач. Во овој пример е покажано како таа се користи директно во прелистувачот. Прелистувачот треба да се информира за тоа каква датотеката доаѓа кај него, па затоа се користи функцијата header() која кажува од кој MIME тип е датотеката. Откако ќе се заврши со работа со сликата, треба да се исчисти просторот кој таа го зафатила во меморија. За тоа се користи ImageDestroy().
Креирање график
Во следиот пример, ќе биде направен график користејќи податоци од MySQL база на податоци. Прво ќе биде дадено како да се направи базата и податоците во неа, а потоа пристапот до нив со PHP.
CREATE DATABASE `poll`; USE poll; CREATE TABLE `results` ( book_type VARCHAR(50), num_votes INT ); INSERT INTO `results` values ('Classic', 15), ('Fantasy', 7), ('Humor', 32), ('Mystery', 12), ('Poetry', 25);
Скриптата за правење график е прилично долга, па ќе биде поделена на два дела и дискутирана поединечно. Првата скрипта се врзува за базата и ги зема податоците кои ќе бидат прикажани.
<?php $dbhandle = mysql_connect("localhost", "root", "") or die("Unable to connect to mysql"); $selected = mysql_select_db("poll", $dbhandle) or die("Cannot select examples"); $result = mysql_query("SELECT * FROM results"); $num_poller = mysql_num_rows($result); $total_votes = 0; while($row = mysql_fetch_array($result)){ $total_votes += $row{'num_votes'}; } mysql_data_seek($result, 0); mysql_close($dbhandle);
Во вториот дел на скриптата ќе биде пресметано се што е потребно за графикот. Тогаш ќе се спреми примарната слика и излезот со податоците. Резултатите од секој тип се добиени од базата, процентите се пресметани и столбовите и текстот под нив се прикажани. Во оваа скрипта ќе се користат TrueType фонтови. Прво треба да се даде адресата на која се наоѓаат фонтовите. За ова постои системска променива GDFONTPATH. Потоа се кажува името на фонтот. TrueType фонтовите се обработуваат со ImageTTFText(). Еве ја и скриптата. Таа користи функции кои веќе се објаснети во цртањето сигурносна слика:
putenv('GDFONTPATH='pateka_do_font'); $font = 'arial'; $y = 50; $width = 700; //Image width in pixels $bar_height = 20; //Bars height $height = $num_poller * $bar_height * 1.5 + 70; //Calculating image height $bar_unit = ($width - 400) / 100; //Distance on the bar chart standing for 1 unit //Create the image resource $image = ImageCreate($width, $height); //We are making four colors, white, black, blue and red $white = ImageColorAllocate($image, 255, 255, 255); $black = ImageColorAllocate($image, 0, 0, 0); $red = ImageColorAllocate($image, 255, 0, 0); $blue = imagecolorallocate($image,0,0,255); //Create image background ImageFill($image,$width,$height,$white); //Draw background shape ImageRectangle($image, 0, 0, $width-1, $height-1, $black); //Output header ImageTTFText($image, 16, 0, $width/3 + 50, $y - 20, $black, $font, 'Poll Results'); while ($row = mysql_fetch_object($result)) { if ($total_votes > 0) $percent = intval(round(($row->num_votes/$total_votes)*100)); else $percent = 0; //Output header for a particular value ImageTTFText($image,12,0,10, $y+($bar_height/2), $black, $font, $row->book_type); //Output percentage for a particular value ImageTTFText($image, 12, 0, 170, $y + ($bar_height/2),$red,$font,$percent.'%'); $bar_length = $percent * $bar_unit; //Draw a shape that corresponds to 100% ImageRectangle($image, $bar_length+221, $y-2, (220+(100*$bar_unit)), $y+$bar_height, $black); //Output a bar for a particular value ImageFilledRectangle($image,220,$y-2,220+$bar_length, $y+$bar_height, $blue); //Output the number of votes ImageTTFText($image, 12, 0, 250+100*$bar_unit, $y+($bar_height/2), $black, $font, $row->num_votes.' votes cast.'); //Going down to the next bar $y = $y + ($bar_height * 1.5); } //Tell the browser what kind of file is come in header("Content-Type: image/jpeg"); //Output the newly created image in jpeg format ImageJpeg($image); //Free up resources ImageDestroy($image); ?>
Користење динамички генерирани слики на други страници
Бидејќи заглавјето (header), се испраќа само еднаш до серверот и тоа е единствениот начин да му се каже на прелистувачот што да очекува, не е лесно да се стават автоматски генерирани слики. Има три начини да се направи тоа: 1.Целата страна да зависи од сликата 2.Ќе ја снимите сликата како некоја датотека ќе се обраќате кон неа со <img> 3.Ќе ставите скрипта која сама ќе генерира слика во <img>
<img height="120" alt="Dynamically generated image" src="generate_image.php" width="200">
Безбедно качување датотеки на сервер
PHP го прави качувањето датотеки на сервер едноставно. Можете да качите каква и да е датотека на веб серверот. Но со едноставноста доаѓа и опасноста, па мора да бидете внимателни кога дозволувате качување. Во овој туторијал ќе биде разгледано како да качите датотеки во одреден директориум на веб серверот, а притоа да не настанат проблеми и ќе бидат разгледани безбедносните проблеми кои може да се јават.
HTML форма
Пред да го користите PHP за управување со датотеките, треба да се направи HTML формата која ќе даде интерфејс за корисникот, да ја пронајде и качи својата датотека.
<html> <body> <form enctype="multipart/form-data" action="upload.php" method="post"> <input type="hidden" name="MAX_FILE_SIZE" value="1000000" /> Choose a file to upload: <input name="uploaded_file" type="file" /> <input type="submit" value="Upload" /> </form> </body> </html>
Има неколку правила што треба да ги знаете за кога правите HTML форма. Прво, бидете сигурни дека го користите POST методот. Второ, на формата и е потребен enctype="multipart/form-data" атрибутот. Без ова качувањето на датотеки нема да работи. Друго нешто што треба да се спомне е скриеното поле во формата, наречено MAX_FILE_SIZE. Некои прелистувачи ја гледаат оваа променлива и нема да дозволат качување на датотеки поголеми од овој број (во бајти). За оваа променлива треба да внесете број ист како што е внесено во php.ini датотеката, за најголемо качување на датотеки. Во php.ini е внесено upload_max_filesize = 2MB. Но, сепак не можете да бидете сигурни дека скриптата нема да биде нападната со поголем број податоци. На пр., напаѓач може да внесе во скриптата повеќе датотеки со максимална големина, со цел да се сруши серверот. Затоа, наместете го post_max_size во php.ini на максималната големина што сакате да ја добие Вашиот веб сервер (мора да биде поголема од upload_max_filesize). Основната вредност е 10МВ. Ова ја контролира максималната големина на сите POST податоци, во еден обид. Исто така осигурајте се дека file_uploads во php.ini е наместен на On. Погледнете го делот со type="file". Тоа е наместено така, за да овозможи наоѓање датотеки на системот. Овозможува внесување адреса до датотеката и копче Browse. Кога корисникот внесува патека до датотеката, кликнува на копчето Submit и датотеката ќе биде пратена до upload.php. PHP скриптата ја превзема контролата.
Обработување на податоците од формата
Кога датотеката е качена, PHP креира привремена копија од неа и гради суперглобална низа $_FILES која содржи податоци за датотеката. За секоја датотека се запишуваат пет податоци: $_FILES["uploaded_file"]["name"] – Оригиналното име на датотеката од корисничката машина $_FILES["uploaded_file"]["type"] – MIME типот на качената датотека $_FILES["uploaded_file"]["size"] – големината на качената датотека $_FILES["uploaded_file"]["tmp_name"] – локацијата на која е снимена датотеката привремено $_FILES["uploaded_file"]["error"] – код со грешка која се јавила за време на качувањето Следниот пример покажува прифаќање на датотека и нејзино снимање во директориум upload. Скриптата дозволува качување само на JPEG слики помали од 350КВ:
<?php if ((!empty($_FILES["uploaded_file"])) && ($_FILES['uploaded_file']['error'] == 0)) { $filename = basename($_FILES['uploaded_file']['name']); $ext = substr($filename, strpos($filename, '.') + 1); if (($ext == "jpg") && ($_FILES["uploaded_file"]["type"] == "image/jpeg") && ($_FILES["uploaded_file"]["size"] < 350000)) { $newname = dirname(__FILE__).'/upload/'.$filename; if (!file_exists($newname)) { if ((move_uploaded_file($_FILES['uploaded_file']['tmp_name'], $newname))){ echo "It's done! The file is saved as: ".$newname; } else { echo "Error: a problem occurred during file upload"; } } else { echo "Error: File ".$_FILES["uploaded_file"]["name"]." already exists"; } } else { echo "Error: Only .jpg images under 350Kb are accepted for upload"; } } else { echo "Error: No file uploaded"; } ?>
Пред што и да правите со качените датотеки, треба да проверите дали тие се вистински качени. Потоа проверувате дали датотеката е JPEG и нејзината големина помала од 350KB. Следно, се проверува дали постои патеката на која треба да се качи датотеката и дали постои веќе некоја со исто име. Откако ќе се завршат овие проверки, се копира датотеката од локалниот компјутер на серверот. Ако е качувањето успешно, ќе биде објавена позитивна порака. Бидете сигурни дека датотеката на која сакате да запишувате на веб серверот има дозвола за запишување и читање.
Праќање e-mail (Текст/HTML/Датотеки)
Email е најпознатиот сервис на Интернет денес. Целта на овој туторијал е да покаже како да генерирате и праќате email со PHP. Email може да се праќа од апликацијата со директно барање на корисникот или пак на одредено време, пр. месечен весник. Понекогаш email-от содржи датотеки кои се прикачени на него. Тие можат да бидат чист текст, HTML делови и др. За да се разбере како функционира праќањето email ќе почнеме од поедноставни примери. Забелешка: За да праќате email со PHP Ви треба функционален email сервер на кој имате дозвола да работите: за UNIX често е Sendmail, за Windows мора да се намести SMTP наредбата во php.ini да покажува на email серверот.