1 / 108

PHP nyelv

PHP nyelv. 2. rész. Űrlapok.

shadi
Télécharger la présentation

PHP nyelv

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. PHP nyelv 2. rész

  2. Űrlapok • Eddigi programjainkból egy fontos dolog hiányzott: nem tettük lehetővé, hogy a felhasználó által megadott adatokkal dolgozzon a program, vagy hogy a felhasználó módosíthassa az adatokat. Ahhoz, hogy ezt a felhasználó megtehesse, egy felületet kell számára biztosítani. Az Interneten alapvetően a HTML űrlapokon keresztül áramlik az információ a felhasználó és a kiszolgáló között. A PHP-t úgy tervezték, hogy a kitöltött HTML űrlapokat könnyen fel tudja dolgozni. Mielőtt azonban rátérnénk az űrlapok használatára, meg kell ismerkednünk néhány lehetőséggel, ugyanis információt a felhasználóról nem csak űrlapok segítségével kaphatunk.

  3. Globális és környezeti változók • A globális változókat a program legfelső szintjén találjuk, és a függvényeken belül is használhatjuk őket. A PHP rendelkezik egy $GLOBALS tömbbel, ami tartalmazza például a programban definiált változókat, és az ún. környezeti változókat is. • A példaprogram a $GLOBALS tömb elemeit listázza ki: • <?php • $nev="Péter"; • foreach ($GLOBALS as $kulcs=>$ertek) • { • print $kulcs." = ".$ertek."<br>"; • } • ?> • A listában megtalálhatjuk az általunk bevezetett $nev változót a ’Péter’ értékével, a tömb kilistázásához felhasznált $kulcs és $ertek változókat értékükkel, és láthatunk sok, elsőre ijesztőnek tűnő nevet is.

  4. A PHP fontosabb környezeti változói

  5. Űrlap létrehozása • Készítsünk el egy olyan egyszerű űrlapot, amely egy beviteli mező segítségével bekéri a felhasználó nevét, majd egy gombra kattintva később megjeleníti. • Az űrlap-fájl! • <html> • <head> • <title>Egyszerű űrlap</title> • <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2"> • </head> • <body> • <form action="nevf.php" method="POST"> • <p>Adja meg a nevét: <input type="text" name="nev"></p> • <input type="submit" value="Mehet"> • </form> • </body> • </html>

  6. Űrlap létrehozása • Mint látható, az űrlapot a HTML kódban a <form> és a </form> határolja. E két tag közé kell elhelyeznünk az űrlapelemeket, amelyek lehetnek szöveges beviteli mezők, listák, rádiógombok, elküld (submit) gombok, stb. A 8. sorban egy beviteli mezőt láthatunk, melynek azonosítója nev, a 9. sorban pedig egy elküld gombot, melynek értéke a Mehet (ez a gomb felirata), és feladata az űrlap továbbítása a megadott helyre. • A 7. sorban látható, hogy az űrlap az értékeket POST–módszerrel továbbítja a célfájlnak (nevf.php), melyet az action-nel határoztuk meg. A POST mind nagy értékekkel, mind az értékek hosszú listájával működik. Amennyiben egy űrlapot a GET-módszerrel küldünk el, akkor annak mezői és azok értékei (URL kódolásban) hozzáfűződnek ahhoz a címhez (URL-hez), ahová az űrlapot küldjük. Az értékek ekkor elérhetők lesznek a kiszolgáló, illetve az általa futtatott programok számára. A kérés például a következőképpen nézne ki, ha a fenti példában a POST helyett GET szerepelne: • http://localhost/nevf.php?nev=Kiss+Pista

  7. Űrlap létrehozása • Minden mező nevét egy ”=” jel választja el annak értékétől, a név-érték párokat pedig ”&” jelek határolják. A PHP visszafejti a jeleket, a talált adatokat a $HTTP_GET_VARS asszociatív tömbben teszi elérhetővé a program számára, valamint az űrlapelemek nevével azonos nevű globális változókat létrehoz a megfelelő tartalommal, függetlenül a kérelem típusától. A nev nevű GET változóhoz az alábbi két módon férhetünk hozzá: • $HTTP_GET_VARS["nev"]; • $nev; • A GET lekérések szerencsére nem csak űrlapokkal kapcsolatban használhatók, könnyen készíthetünk mi is ilyen karakterláncokat, így a fontos adatokat könnyedén továbbíthatjuk lapról lapra.

  8. Űrlap létrehozása • Az adatok feldolgozásának vagy tárolásának megvalósítása a célfájl, ebben az esetben a nevf.php feladata lesz. A feldolgozáshoz már szükséges a PHP, míg magát az űrlapot leíró fájl tisztán HTML-kódot tartalmaz. • Nézzük a nevf.php fájlt, aminek a feladata, hogy a beírt nevet megjelenítse: • <?php • print "Az Ön neve: $nev"; • ?> • Az űrlapelemek neveiből PHP változók lesznek, így a nev name-paraméterével megadott beviteli mező tartalma egy $nev változóba került. Semmi más dolgunk nem volt, mint kiíratni a böngészőbe a $nev változó tartalmát (2. sor).

  9. Űrlap létrehozása • Nézzünk egy másik példát: Adjuk meg a másodfokú egyenlet megoldásait a felhasználó által megadott együtthatók segítségével! • Az űrlap állomány! • <html> • <head> • <title>A másodfokú egyenlet megoldásai</title> • <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2"> • </head> • <body> • <form action="masodf.php" method="POST"> • Adja meg az együtthatókat: <br><br> • <input type="text" name="a"> *x*x + • <input type="text" name="b"> *x + • <input type="text" name="c"> = 0<br><br> • <input type="submit" value="Megoldás"> • </form> • </body> • </html>

  10. Űrlap létrehozása • <?php • $d=$b*$b-4*$a*$c; • if ($a==0) • if ($b==0) print "Nincs megoldás"; • else • { • $x=-$c/$b; • print "Megoldás:<br>x = "; • printf("%.3f",$x); • } • else • { • if ($d<0) • { • $d=$d*(-1); • $e=-$b/(2*$a); • $f=sqrt($d)/(2*$a); • print "Megoldások:<br>x1 = "; • printf("%.3f",$e);print " + "; • printf("%.3f",$f); • print " * i<br>x2 = "; • printf("%.3f",$e);print " - "; • printf("%.3f",$f);print " * i"; }

  11. Űrlap létrehozása • else • { • $x1=(-$b+sqrt($d))/(2*$a); • $x2=(-$b-sqrt($d))/(2*$a); • print "Megoldások:<br>x1 = "; • printf("%.3f",$x1); • print "<br>x2 = "; • printf("%.3f",$x2); • } • } • ?> • Ez pedig az űrlap feldolgozó php-állomány! • Itt a feldolgozás már bonyolultabb volt, mint az előző esetben, de jól látszik, hogy a három változó – a $a, a $b, és a $c – a beviteli mezők neveiből keletkeztek. A printf() függvénnyel a kapott lebegőpontos számokat fixpontosan íratjuk ki 3 tizedesjegyet megjelenítve.

  12. Űrlapelemek használata • A nem és a kontinens kiválasztásához rádiógombokat használtunk. Ezek rádiógombok általában egy csoportot alkotnak, és a csoportból mindig csak egy választható ki (a checked tulajdonság jelzi azt, hogy kezdetben melyik van kiválasztva). • A name tulajdonság értéke (nemcsop és kontcsop) lesz a változó neve, ami tartalmazza a kiválasztott értéket (a value tulajdonság értékét). Az életkor kiválasztásához egy listát használtunk (20. sor), a később létrejövő $eletkor változó valamelyik <option> és </option> közötti részt fogja tartalmazni. • Az érdeklődési kör egy olyan lista (63. sor), amelyből több elem kiválasztható (multiple), neve az erdelkodes[], jelezve, hogy ebből egy tömb keletkezik. Ennek tartalmát később egy foreach segítségével íratjuk ki. • Végül az űrlap alján a válaszok megerősítésére szolgáló jelölőt (checkbox) láthatunk, melynek később az állapotát vizsgáljuk meg (kipipáltuk vagy sem).

  13. Űrlapelemek használata • <?php • if ($nev=="") • print "<h3>Nem adta meg a nevét!</h3>"; • elseif (!isset($erdeklodes)) • print "<h3>Nem adta meg az érdeklődési körét!</h3>"; • elseif (!isset($megfelel)) • print "<h3>Nem hitelesítette adatait!</h3>"; • else • { • print "<h3>Ön a következő adatokat adta meg:</h3>" • ."<b>Név: </b>".$nev."<br>" • ."<b>Neme: </b>".$nemcsop."<br>" • ."<b>Életkora: </b>".$eletkor."<br>" • ."<b>Kontinens: </b>".$kontcsop."<br>" • ."<b>Érdeklődési köre:</b><br>"; • foreach ($erdeklodes as $kor) • { • print $kor."<br>"; • } • } • ?>

  14. Űrlapelemek használata • A programunk már tartalmaz némi ellenőrző részt is: az űrlap kitöltöttségét ellenőriztük le (2-7. sor). A későbbi fejezetekben láthatunk példát egyéb űrlapelemekre, és az adatok fájlban ill. adatbázisban tárolására is. • A kód eredménye!

  15. Űrlap és PHP kód egy oldalon • A célunk az, hogy egy olyan oldalt készítsünk, amely tartalmazza egyrészt az űrlapot, másrészt a feldolgozását is megvalósítja. Ez csak úgy lehetséges, hogy az űrlap-fájl tartalmazza a PHP kódot, és önmagát hívja meg. • A példaprogram egy számkitalálós játék, 1 és 100 közötti egész számot kell kitalálni maximum 10 lépésből.

  16. Űrlap és PHP kód egy oldalon • <html> • <head> • <title>Számkitalálós játék</title> • </head> • <body> • <?php • if (isset($szam)) • { • if ($db==10 || $szam==$aszam) • { • print "<h3>"; • if ($szam!=$aszam) • print "Sajnos Ön nem tudta kitalálni a számot • 10 próbálkozással!"; • else • print "Ön kitalálta a számot $db próbálkozással!"; • print "</h3>"; • unset($szam); • print "<a href=$PHP_SELF>Új játék</a>"; • die(); • }

  17. Űrlap és PHP kód egy oldalon • else • { • print "<h3>"; • if ($szam<$aszam) print "Próbálkozzon nagyobbal!"; • else print "Próbálkozzon kisebbel!"; • print "</h3>"."<p>Próbálkozások száma: $db</p>"; • $db++; • } • } • else • { • $aszam=rand(1,100); • print "<h3>Adja meg a számot:</h3>"; • $db=1; • } • ?> • <form action="<?php print $PHP_SELF."?db=".$db ?>” method="POST"> • <p><input type="text" name="szam"></p> • <input type="submit" value="Mehet"> • <input type="hidden" name="aszam" value="<?php print $aszam ?>"> • </form> • </body> • </html>

  18. Űrlap és PHP kód egy oldalon • Az elgondolásunk az, hogy ha nincs a beviteli mezőnek értéke, azaz nincs kitöltve (8. sorban vizsgáljuk), akkor az azt jelenti, hogy most indul a játék. Ekkor generálunk egy véletlen számot ($aszam), és a számlálót ($db) 1-re állítjuk (34. és 36. sorok). • Az elküld gombra kattintva a fájl önmagára hivatkozik a $PHP_SELF változó segítségével. Kapcsolt adat formájában küldjük tovább a próbálkozások számát tartalmazó számlálót (39. sor), és a kitalálandó számot egy rejtett mező segítségével küldjük tovább a későbbi vizsgálatok elvégzéséhez (42. sor). A számlálót minden új kitöltésnél növeljük eggyel (29. sor), és megjelenítjük a felhasználó számára, hogy az általa megadott szám nagyobb vagy kisebb –e a kitalálandónál (26. és 27. sorok). Amennyiben eltaláltuk a számot, akkor kiírjuk, hogy hány próbálkozással sikerült (17. sor), majd a beviteli mező nevéből keletkezett változót ($szam) megszűntetjük (19. sor), és a program futását megállítjuk a die() függvénnyel (21. sor). • A változó megszűntetése a játék újraindításához szükséges. Ugyan ezt az utat járjuk végig, ha 10 lépésből nem sikerült kitalálni a számot, csak akkor a ”Sajnos Ön nem tudta kitalálni a számot 10 lépésből!” szöveg kiíratása után szűntetjük meg a változót, és állítjuk meg a programot.

  19. Fájlok és könyvtárak • A fájlok számtalan formátumban és funkcióban fordulnak elő a különböző operációs rendszerekben, azonban elmondható, hogy mindenhol az adattárolás alapegysége. Szerencsére számos programozási nyelv mellett a PHP is biztosít számunkra lehetőséget a fájl- ill. könyvtárkezelésre.

  20. Könyvtárak • A PHP az opendir() - könyvtár megnyitása, readdir() - könyvtár olvasása, closedir() - megnyitott könyvtár bezárása, és az is_dir() - eldönti valamiről, hogy könyvtár-e, függvényeket nyújtja a könyvtárak tartalmának megjelenítéséhez, míg az mkdir() új könyvtárat hoz létre, az rmdir() pedig létező könyvtárat töröl.

  21. Könyvtárak listázása • Két lehetőséget mutatunk be a sok közül erre a célra. Az első úgy listázza a könyvtár tartalmát, hogy megjeleníti a fájlok és könyvtárak nevét, és a könyvtárakhoz a [Dir] jelzést hozzáteszi. A másik leszámolja, hogy hány darab fájl ill. könyvtár található az aktuális könyvtárban. • Az első: • <?php • $kvtnev="C:"; • $kvt=opendir($kvtnev); • while ($fajl=readdir($kvt)) • { • print "$fajl"; • if (is_dir("$kvtnev/$fajl")) print " [Dir]"; • print "<br>"; • } • closedir($kvt); • ?>

  22. Könyvtárak listázása • Az egyetlen magyarázatra szoruló sor a 4. sor. A while feltételében egy értékadás szerepel, ami azt jelenti, hogy a ciklus addig ismétel, amíg sikeres az értékadás. A readdir() így addig olvas a könyvtárból a $fajl változóba, amíg van fájl a könyvtárban. A $fajl változóról pedig később eldöntjük az is_dir() függvény segítségével (függvényparaméterének abszolút elérési útnak kell lennie), hogy könyvtár volt –e (7. sor). • A második megoldás:

  23. Könyvtárak listázása • <?php • $kvtnev="C:"; • $kvt=opendir($kvtnev); • while ($fajl=readdir($kvt)) • { • $tipus=filetype("$kvtnev/$fajl"); • if (isset($melyik[$tipus])) $melyik[$tipus]++; • else $melyik[$tipus]=0; • } • closedir($kvt); • foreach ($melyik as $kulcs=>$ertek) • { • print $kulcs.": ".$ertek."<br>"; • } • ?> • A 6. sorban található filetype() függvény sztringként a fájl típusát adja vissza, ami a dir, file vagy link közül valamelyik lehet. A különböző típusok számát $melyik asszociatív tömbben tároljuk (7. sor).

  24. Egyéb könyvtárfüggvények • A dirname() függvénybe a fájl elérési útját írva az elérési út könyvtárrészét kapjuk, míg a basename() a maradékot, a fájlnevet eredményezi. A pathinfo() ugyanazt az információt adja, mint a dirname() és a basename() összekapcsolva. A realpath() a relatív útvonalat abszolút elérési úttá konvertálja.

  25. Fájlok • A következőkben megtudhatjuk, hogy hogyan kell egy létező PHP fájlt beágyazni egy másik PHP fájlba, hogyan lehet fájltulajdonságokat megjeleníteni, hogyan lehet fájlokat létrehozni, olvasni, írni és törölni, valamint a fájlfeltöltésről is lesz szó.

  26. Fájlok beágyazása • Az include() függvény lehetőséget ad arra, hogy fájlt ágyazzunk be a PHP dokumentumokba. A fájlban szereplő PHP kód úgy hajtódik végre, mintha a fődokumentum része lenne, ami hasznos, ha egy többoldalas programban külső kódokat szeretnénk beágyazni. Másrészről a többször felhasználandó részeket célszerű külön fájlokba elhelyezni, így azokat bármikor, bármelyik fájlba könnyedén beilleszthetjük. • include("proba.php");

  27. Fájlok listázása attribútumokkal együtt • <?php • $kvtnev="C:/"; • $kvt=opendir($kvtnev); • while ($fajl=readdir($kvt)) • { • fileinformaciok($kvtnev.$fajl); • } • closedir($kvt); • function fileinformaciok($f) • { • print "$f ".(is_file($f)?"":"nem")." fájl<br>"; • print "$f ".(is_dir($f)?"":"nem")." könyvtár<br>"; • print "$f ".(is_readable($f)?"":"nem")." olvasható<br>"; • print "$f ".(is_writable($f)?"":"nem")." írható<br>"; • print "$f ".(is_executable($f)?"":"nem")." futtatható<br>"; • print "$f ".(filesize($f))." bájt méretű<br>"; • print "$f utolsó megnyitásának dátuma: ".date("Y.m.d H:i",fileatime($f))."<br>"; • print "$f utolsó módosításának dátuma: ".date("Y.m.d H:i",filemtime($f))."<br>"; • print "$f utolsó változásának dátuma: ".date("Y.m.d H:i",filectime($f))."<br>"; • } • ?>

  28. Fájlok létrehozása és törlése • Amennyiben egy üres fájlt szeretnénk létrehozni, a touch() függvényt kell használnunk. A paraméterként megadott fájlnév elé az elérési útvonalat is meg kell adnunk, ha nem az aktuális könyvtárban szeretnénk a fájlt létrehozni. Amennyiben a fájl már létezik, akkor az utolsó módosítás dátuma módosul az utasítás végrehajtási idejére. • Pl.: touch("proba.txt"); • Létező fájlt törölni az unlink() függvénnyel lehet. Az unlink() paramétere a fájl elérési útja: • Pl.: unlink("proba.txt"); • A létrehozás, törlés, írás, olvasás, módosítás csak akkor lehetséges egy fájlon, ha a megfelelő jogosultságokkal rendelkezünk.

  29. Fájlok olvasása • A fájlokat szekvenciálisan tudjuk olvasni és írni. A szekvenciális input fájt háromféleképpen lehet a PHP-ben olvasni: bájtonként, karakterenként, soronként. Ezek közül az egyiket mutatja be az alábbi példa fájl megnyitás után: • A 3. sorban a file_exists() függvénnyel a fájl létezését döntjük el. A karakterenkénti olvasást a 13. sortól kezdve láthatjuk. A 15. sorban a fájlt megnyitjuk olvasásra (r - read) az fopen() függvénnyel, melynek eredménye a $f fájlváltozó (a továbbiakban ezzel dolgozunk). Ezek után egy karaktert olvasunk a fájlból az fgetc() függvénnyel, amíg a fájl végére nem érünk (feof() - logikai értékű függvény, igaz értéket ad, ha a fájl végére értünk).

  30. Fájlok írása • Fájlok írásánál ugyanúgy az fopen() függvényt használjuk, de a második paraméterét ”w”-re (write-ra) állítjuk, míg a hozzáfűzésnél ”a”-ra (append-re). Abból nem lehet probléma, ha több felhasználó is ugyanazt a fájlt olvassa, de azt nem engedélyezhetjük, hogy valaki írjon egy fájlt, míg más olvassa, vagy többen ugyanazt a fájlt írják. Amennyiben egy fájlt írásra vagy hozzáfűzésre meg tudunk nyitni, akkor zároljuk, hogy más felhasználó ne tudja addig írni, amíg mi írjuk. A példa az írást és a hozzáfűzést mutatja be:

  31. Fájlok írása • <?php • $fajlnev="proba.txt"; • print "$fajlnev fájlba írás<br>"; • if (!file_exists($fajlnev)) touch($fajlnev); • $fa=fopen($fajlnev,"w") or die("$fajlnev nem nyitható meg"); • flock($fa,2); //más folyamatok nem olvashatják és írhatják ebben az időben • fwrite($fa, "Helló, világ!\n"); • flock($fa,3); //zárolás feloldása • fclose($fa); • print "$fajlnev fájlhoz hozzáfűzés"; • $fa=fopen($fajlnev,"a") or die("$fajlnev nem nyitható meg"); • flock($fa,2); • fputs($fa,"Helló, Web!"); • flock($fa,3); • fclose($fa); • ?>

  32. Fájlok írása • Egy proba.txt nevű fájllal dolgozunk a példaprogramban. A 4. sorban döntjük el, hogy létezik-e a fájl, ha nem akkor létrehozzuk. Amennyiben a fájl létezett, akkor az írásnál elveszik korábbi tartalma. Az 5. sorban a fájlt megnyitjuk olvasásra, majd a 6. sorban zároljuk az flock() utasítással. Az flock() második paramétere lehet 1, 2 és 3. Az 1-es jelentése, hogy más folyamatok olvashatják, de nem írhatják. Ezt akkor használjuk, ha olvassuk a fájlt. A 2-es jelentése, hogy más folyamatok nem olvashatják és nem írhatják. Ezt akkor használjuk, amikor írunk a fájlba. A 3-as feloldja a zárolást. • A fájlba íráshoz az fwrite() függvényt használjuk, melynek első paramétere a fájlváltozó, második paramétere jelen esetben egy string. A példaprogram további részében hozzáfűzzük a fájlhoz a ”Helló, Web!” szöveget az fputs() utasítással. Az fwrite() és az fputs() eredménye ugyanaz, az fputs() az fwrite() aliasa.

  33. Fájlok feltöltése • <html> • <head> • <title>Fájl feltöltése</title> • <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2"> • </head> • <body> • <?php • $konyvtar="C:/munka/kepek"; • if(isset($uploadfile)) /*ha kiválasztottuk a fájlt, akkor kiírjuk az adatait*/ • { • print "Fájl: " . $uploadfile; • print "<br>Fájl neve: " . $uploadfile_name; • print "<br>Fájl mérete: " . $uploadfile_size; • print "<br>Fájl típusa: " . $uploadfile_type; • } • else • { • print "<br>Adja meg a fájlt: "; • print "<form enctype=\"multipart/form-data\"" ." action=$PHP_SELF method=\"post\">" • ."<input type=\"hidden\" name=\"MAX_FILE_SIZE\"" • ." value=\"200000\">" • ."<input type=\"file\" name=\"uploadfile\" size=\"40\">" • ."<br><input type=\"submit\" value=\"Feltöltés\"></form>"; • }

  34. Fájlok feltöltése • if(is_uploaded_file($uploadfile)) • /*ha a Feltöltés gombra rákattintottunk, akkor átmozgatjuk az ideiglenes könyvtárból a fájlt a célkönyvtárba*/ • { • if(move_uploaded_file($uploadfile,”$konyvtar/$uploadfile_name”)) • { • print "<br><br>Fájl feltöltése sikerült."; • } • else • { • print "<br><br>Fájl feltöltése sikertelen."; • } • } • ?> • </body> • </html>

  35. Fájlok feltöltése • Az űrlap megjelenítése hasonló elven történik, mint a számkitalálós játékban: ha nincs még kiválasztva a fájl, akkor meg kell jeleníteni az űrlapot (9. sor). Az űrlap a 20. sortól a 25. sorig tart, ahol láthatjuk, hogy a fájlátvitelhez a form enctype=”multipart/form-data” sor szerepel a HTML részben, és a fájl önmagára fog hivatkozni a $PHP_SELF változóval. • A fájl feltöltéséhez szükséges űrlapelemet a 24. sorban találjuk, melynek neve uploadfile, így ebből a $uploadfile változó fog keletkezni. A maximális fájlméretet (MAX_FILE_SIZE) beállítjuk 200000 bájtra, és egy rejtett mező segítségével küldjük tovább (22-23. sor). Ha kiválasztottuk a fájlt, akkor a fájl jellemzőit megjelenítő rész fut le (12-15. sor). • A 27. sortól már a záró lépések láthatók: a fájl a célszerver ideiglenes fájlokat tartalmazó könyvtárába került, és onnan el kell mozgatnunk a célkönyvtárba (30. sor). Ha ez sikerül, akkor készen vagyunk a feltöltéssel, ellenkező esetben valami hiba folytán vagy nem került a fájl az ideiglenes fájlokat tartalmazó könyvtárba (pl. túl nagy a fájl), vagy nem lehet onnan elmozgatni.

  36. Adatbázisok: MySQL • A PHP előnyei közé soroltuk, hogy rengeteg adatbázissal képes dolgozni. Az adatbázisokhoz való csatlakozás, illetve azok kezelése a PHP-ben nagyon hasonló. A MySQL fejlesztői azt a célt tűzték ki, hogy egy praktikus, mindennapi használatra alkalmas adatbázist fejlesszenek, amely biztosítja a MySQL további sikerességét. Több érv is a MySQL adatbázis mellett szól: • Egyszerű és gyors. • Nyílt forráskódú. • A kicsi és közepes méretű honlapokhoz ideális. • A legtöbb szolgáltató a PHP-MySQL párost szokta nyújtani. • A phpMyAdmin Database Manager egy olyan felületet nyújt, amely segítségével könnyen kezelhetjük a MySQL adatbázisainkat. • Természetesen nem azt állítjuk, hogy a MySQL a legjobb adatbáziskezelő. Az adott feladat dönti el, hogy milyen adatbázist célszerű választani. Csupán megjegyeztük, hogy egy közepes méretű honlaphoz tökéletes az egyszerűsége és gyorsasága miatt.

  37. MySQL adattípusok • Amennyiben adatbázisokban akarunk adatokat tárolni, ugyanúgy figyelembe kell vennünk, hogy milyen adattípusokat használhatunk. A következő táblázatok a különféle típusokat tartalmazzák: • Egész számok

  38. MySQL adattípusok Lebegőpontos számok: Dátum és idő: Sztringek:

  39. Kapcsolódás a kiszolgálóhoz • Miután telepítettük a MySQL-t számítógépünkre, távoli vagy helyi gépek felhasználói bármikor csatlakozhatnak hozzá. A csatlakozáshoz természetesen felhasználónévre és jelszóra van szükség, és miután sikerült a csatlakozás sem biztos, hogy minden adatbázishoz hozzáférhetünk. A MySQL telepítés közben kér egy rendszergazda felhasználónevet és jelszót. • A látogatókat azonban a későbbiekben nem célszerű a rendszergazda felhasználónévvel és jelszóval csatlakoztatni a MySQL-hez, mert a rendszergazdának teljes jogosultsága van. A MySQL sikeres telepítése után javasolt létrehozni egy olyan felhasználót, akinek csak a feltétlenül szükséges jogai vannak meg, majd ezzel csatlakoztatni az összes látogatót.

  40. Kapcsolódás a kiszolgálóhoz • A kapcsolódáshoz a mysql_connect() függvényt használjuk, ami 3 paramétert vár: szervernév, felhasználónév, jelszó. Ha nem adunk meg szervernevet, úgy alapértelmezetten a localhost-ot használja. Az üresen hagyott felhasználónév helyére a webszerverfolyamat tulajdonosának neve kerül, az üresen hagyott jelszó helyére pedig üres sztring. Ily módon el is lehet hagyni mindent, ha a MySQL a gépünkön fut, és a honlap az egyedüli honlap a gépen. Mi az összes példában megadjuk a paramétereket. • $kapcsolat=mysql_connect("localhost","felhasznalo","jelszo"); • if (!$kapcsolat) • die("Nem lehet csatlakozni a MySQL kiszolgálóhoz!"); • A $kapcsolat változóba mentjük a függvény által visszaadott azonosítót, hogy később folytathassuk munkánkat. Ha kapcsolat bontására a mysql_close() függvény szolgál.

  41. Adatbázisok kiválasztása, listázása • Az adatbázis kiválasztásához a mysql_select_db() utasítást használjuk: • mysql_select_db("filmek",$kapcsolat) or die("Nem lehet megnyitni a filmek adatbázist: ".mysql_error()); • A függvény logikai értéket ad vissza, hamis logikai érték esetén ellenőriznünk kell, hogy létezik-e az adatbázis, illetve, hogy van-e jogunk hozzá. A mysql_error() függvény segítségével jeleníthetjük meg a hiba okát (a MySQL által legutoljára jelentett hibát adja vissza). A $kapcsolat paraméter elhagyható a legtöbb függvény esetében, az aktuális kapcsolat automatikusan behelyettesítődik. • Az létező adatbázisok listázásához a mysql_list_dbs() függvényt használjuk, ami egy eredményazonosítóval tér vissza, melyet a mysql_db_name() függvénynek kell átadnunk, hogy az adatbázisok neveit megkapjuk. Az utóbbi függvény vár egy sorszámot is, ami az adatbázis sorszámát jelöli. A példa a létező adatbázisok neveit jeleníti meg:

  42. Adatbázisok kiválasztása, listázása • <?php • $felhasznalo="latogato"; • $jelszo="valami"; • $kapcsolat=mysql_connect("localhost",$felhasznalo,$jelszo); • if (!$kapcsolat) die("Nem lehet kapcsolódni a MySQL kiszolgálóhoz!"); • $adatbazisok=mysql_list_dbs(); • $adatbazisok_szama=mysql_num_rows($adatbazisok); • for ($i=0;$i<$adatbazisok_szama;$i++) • print mysql_db_name($adatbazisok,$i)."<br>"; • mysql_close(); • ?> • A 7. sorban található mysql_num_rows() függvény adja meg az adatbázisok számát az eredményazonosító segítségével. Ez a függvény egy tábla sorainak számát adja meg, így a későbbiekben még használni fogjuk.

  43. Adatbázisok kiválasztása, listázása • Az előbbi feladatot megoldhattuk volna máshogy is. Ha ismerjük az adatbázisok kiíratásához szükséges SQL parancsot (SHOW DATABASES;), akkor ezt sztringként átadva a mysql_query() függvénynek (az SQL utasítások végéről el kell hagynunk a pontosvesszőt), megkapjuk az adatbázisok neveit. A mysql_query() függvény továbbítja az SQL-ben leírt utasításokat a kiszolgálóhoz. • <?php • $felhasznalo="latogato"; • $jelszo="valami"; • $kapcsolat=mysql_connect("localhost",$felhasznalo,$jelszo); • if (!$kapcsolat) die("Nem lehet kapcsolódni a MySQL kiszolgálóhoz!"); • $eredmeny=mysql_query("SHOW DATABASES"); • while ($sor=mysql_fetch_row($eredmeny)) • print $sor[0]."<br>"; • mysql_close(); • ?> • A 6. sorban kiadtuk a parancsot a MySQL kiszolgálónak, a kapott eredmény egy tábla formájában a $eredmeny változóba került. A táblát soronként tudjuk olvasni az első sortól kezdődően. Egy sor kiolvasásához a mysql_fetch_row() függvény szükséges, amely a $sor tömbbe tölti a sorban található adatokat. Mivel minden sor csak egy adatot tartalmaz (az aktuális adatbázis nevét), így azt a $sor[0]-ban érjük el. A while ciklus addig fut, amíg a mysql_fetch_row() tud új sort olvasni, azaz amíg van sora a táblának.

  44. Adatbázisok tábláinak listázása • A táblanevek megjelenítéséhez használhatjuk a mysql_list_tables() PHP utasítást, vagy adhatunk ki SQL parancsot (SHOW TABLES FROM adatbazisnev;), mint ahogy azt az előbb tettük. A példaprogram szerkezete nagyon hasonlít az előzőre: • <?php • $felhasznalo="latogato"; • $jelszo="valami"; • $kapcsolat=mysql_connect("localhost",$felhasznalo,$jelszo); • if (!$kapcsolat) die("Nem lehet kapcsolódni a MySQL kiszolgálóhoz!"); • $adatbazis="stone"; • mysql_select_db($adatbazis,$kapcsolat) or • die("Nem lehet megnyitni a(z) $adatbazis adatbázist: ".mysql_error()); • $tablak=mysql_list_tables($adatbazis,$kapcsolat); • while ($sor=mysql_fetch_row($tablak)) • print $sor[0]."<br>"; • mysql_close(); • ?>

  45. Táblák mezőinek listázása • Az előbb eljutottunk odáig, hogy egy adatbázis tábláinak nevét meg tudtuk jeleníteni, most a táblák mezőinek nevére, és egyéb tulajdonságára vagyunk kíváncsiak. • <?php • $felhasznalo="latogato"; • $jelszo="valami"; • $kapcsolat=mysql_connect("localhost",$felhasznalo,$jelszo); • if (!$kapcsolat) die("Nem lehet kapcsolódni a MySQL kiszolgálóhoz!"); • $adatbazis="stone"; • mysql_select_db($adatbazis,$kapcsolat) or die("Nem lehet megnyitni a(z) $adatbazis adatbázist: ".mysql_error()); • $tabla="hir"; • $mezok=mysql_list_fields($adatbazis,$tabla); • $mezok_szama=mysql_num_fields($mezok); • print "<table border=1><tr><td>Mező</td><td>Típus</td> • <td>Hossz</td><td>Flag-ek</td></tr>"; • for ($i=0;$i<$mezok_szama;$i++) • print "<tr><td>".mysql_field_name($mezok,$i)."</td> • <td>".mysql_field_type($mezok,$i)."</td> • <td>".mysql_field_len($mezok,$i)."</td> • <td>".mysql_field_flags($mezok,$i)."</td></tr>"; • print "<table>"; • mysql_close(); • ?>

  46. Táblák adatainak megjelenítése • Az adatok lekérdezéséhez a SELECT * FROM tablanev; SQL parancsot használjuk a mysql_query() függvényben: • <?php • $felhasznalo="latogato"; • $jelszo="valami"; • $kapcsolat=mysql_connect("localhost",$felhasznalo,$jelszo); • if (!$kapcsolat) die("Nem lehet kapcsolódni a MySQL kiszolgálóhoz!"); • $adatbazis="stone"; • mysql_select_db($adatbazis,$kapcsolat) or die("Nem lehet megnyitni a(z) $adatbazis adatbázist: ".mysql_error());; • $tabla="hir"; • $mezok=mysql_list_fields($adatbazis,$tabla); • $mezok_szama=mysql_num_fields($mezok); • $parancs="SELECT * FROM ".$tabla; • $eredmeny=mysql_query($parancs); • print "<table border=1><tr>"; • for ($i=0;$i<$mezok_szama;$i++) • print "<td>".mysql_field_name($mezok,$i)."</td>"; • print "</tr>"; • while ($sor=mysql_fetch_row($eredmeny)) • { • print "<tr>"; • for ($i=0;$i<$mezok_szama;$i++) • print "<td>".$sor[$i]."</td>"; • print "</tr>"; • } • print "<table>"; • mysql_close(); • ?>

  47. Adatbázis létrehozása és törlése • Adatbázis létrehozásához használhatjuk a PHP mysql_create_db() utasítását, vagy kiadhatjuk a CREATE DATABASE parancsot a kiszolgálónak: • <?php • $felhasznalo="latogato"; • $jelszo="valami"; • $kapcsolat=mysql_connect("localhost",$felhasznalo,$jelszo); • if (!$kapcsolat) die("Nem lehet kapcsolódni a MySQL kiszolgálóhoz!"); • $adatbazis="forum"; • if (mysql_create_db($adatbazis)) • print "A(z) $adatbazis adatbázis sikeresen létrehozva."; • else • print "A(z) $adatbazis adatbázist nem sikerült létrehozni: mysql_error(); • mysql_close(); • ?> • Adatbázis törléséhez a mysql_drop_db() függvényt használhatjuk a fentiekhez hasonló módon, vagy a DROP DATABASE parancsot adhatjuk ki.

  48. Tábla létrehozása • A táblák létrehozásához nincs külön PHP-függvény, itt mindenképpen az CREATE TABLE parancsot kell használnunk, miután kiválasztottuk a megfelelő adatbázist. • <?php • $felhasznalo="latogato"; • $jelszo="valami"; • $kapcsolat=mysql_connect("localhost",$felhasznalo,$jelszo); • if (!$kapcsolat) die("Nem lehet kapcsolódni a MySQL kiszolgálóhoz!"); • $adatbazis="forum"; • mysql_select_db($adatbazis,$kapcsolat) or die("Nem lehet megnyitni a(z) $adatbazis adatbázist: ".mysql_error()); • $tabla="forumuser"; • $parancs="CREATE TABLE ".$tabla."(nev VARCHAR (30),fnev VARCHAR (30) • NOT NULL PRIMARY KEY,jszo VARCHAR(50),email VARCHAR (40))"; • if (mysql_query($parancs)) • print "A(z) $table tábla sikeresen létrehozva."; • else • print "A(z) $table táblát nem sikerült létrehozni: ".mysql_error(); • mysql_close(); • ?>

  49. Tábla törlése • Táblák törléséhez a DROP TABLE utasítást használjuk: • $tabla="forumuser"; • $parancs="DROP TABLE ".$tabla; • if (mysql_query($parancs)) • print "A(z) $table tábla sikeresen törölve. "; • else • print "A(z) $table táblát nem sikerült törölni: ".mysql_error();

  50. Adatok beszúrása • Amennyiben már sikerült létrehoznunk egy adatbázist egy táblával, akkor adatokat helyezhetünk el a táblában. Ahhoz, hogy az adatokat felvegyük, egy újabb SQL parancsra lesz szükségünk, az INSERT-re. A példa az előbb létrehozott forum adatbázis forumuser táblájába szúr be egy sort, azaz egy felhasználó adatait rögzíti: • Egy honlap esetében az adatokat természetesen majd egy űrlap segítségével fogjuk bekérni a felhasználótól. Amikor azonban a felhasználó adja meg az adatokat, elkerülhetetlen az adatok ellenőrzése.

More Related