Előadást letölteni
Az előadás letöltése folymat van. Kérjük, várjon
1
PHP ALAPOK Dr. Nagy Enikő PhD. egyetemi adjunktus
PTE Pollack Mihály Műszaki és Informatikai Kar, Műszaki Informatika és Villamos Intézet, Rendszer- és Szoftvertechnológiai Tanszék
2
Szerver konfigurálás PHP alapok Vezérlési szerkezetek Adatbázis-kapcsolat
3
A szerver konfigurálása
Konfigurációs lépések megtételére van szükség. Saját gép esetén nem probléma Más esetben rendszergazdai vagy szolgáltatói jogosultság szükséges
4
Fontosabb konfigurációs lehetőségek Apache konfigurálása
Legfontosabb állomány: httpd.conf xampp/apache/conf/httpd.conf – programozói editorral megnyitni Változtatások érvényesüléséhez webszerver újraindítása
5
Változó neve Funkciója Példa ServerRoot Apache szerver telepítési útvonal meghatározása ServerRoot „C:/xampp/apache” LoadModule Opcionális Apache modulok betöltése LoadModule rewrite_module modules/mod_rewrite.so DocumentRoot Azoknak az állományoknak a helye, amelyeket elérhetővé kell tenni a szerver számára. DocumentRoot „C:/xampp/htdocs” Directory A megadott könyvtár tartalmát hogyan szolgálja ki a webszerver. <Directory „C:/xampp/htdocs”> Options Indexes FollowsSymLinks Includes ExeCGI AllowOverride All Order allow, deny Allow from all </Directory> IfModule Betöltés után veszi figyelembe <IfModule dir_module>…</IfModule> DirectoryIndex Meghatározza, hogy egy könyvtár lekérésekor mi történjen. DirectoryIndex index.php index.php4 index.php3 index.cgi index.html
6
A PHP konfigurálása - alapvető információk az Apache, PHP konfigurációkról. Távoli szolgáltató esetén i.php állományt kell létrehozni és gyökérkönyvtárba feltölteni a következő tartalommal: <?php phpinfo() ?>
7
Változó neve Funkciója Példa short_open_tag <?php helyett használható-e a <? short_open_tag=on safe_mode PHP futtatókörnyezet biztonsági problémáinak kiküszöbölése safe_mode=Off disable_functions Függvények letiltása show_source, system max_execution_time Meddig futhat PHP kód. max_execution_time=60 memory_limit Mennyi memóriát használhat a futtatáshoz? memory_limit=32M post_max_size upload_max_filesize Maximálisan elfogadható adatmennyiséget (méretet) írja le. post_max_size=64M upload_max_filesize=64M extension_dir extension Megadja a PHP-hez telepített beépülő ill. betöltendő beépülő csomagok helyét. extension_dir=„c:\xampp\php\ext\” extension=php_gd2.dll session.save_path session.auto_start Munkamenetek állományainak helyét határozza meg, ill. a munkamenetek automatikus indítását tiltja le. session.save_path=„c:\xampp\tmp” session.auto_start=0
8
A phpMYAdmin konfigurálása
MySQL adatbázisok konfigurálásának adminisztrációs felületének elérési útvonala:
9
A MySQL konfigurálása XAMPP esetén
C:\xampp\mysql\bin\my.ini Beállítási példák: port= Ezen a porton érhető el az SQL szerver. datadir=„c:/xampp/mysql/data” - adatbázisok helye. log_error=„mysql_error.log” - ide loggolja a hibaüzeneteket.
10
Jogosultságkezelés Rendkívül fontos szerepet tölt be.
Automatikusan települ a mysql adatbázis tartalmára és figyelembe veszi, hogy Honnan kapcsolódunk Kik vagyunk Mit tehetünk
11
Az adatbázis tábláinak szerepe
User: Ki, honnan kapcsolódhat. Globális jogok is. Db: Melyik adatbázishoz, ki férhet hozzá. Adatbázis szintű jogok is. Host: Melyik adatbázishoz honnan lehet csatlakozni. Tables_priv, columns_priv: Tábla és mezőszintű jogok. A hitelesítés 2 lépésben történik: Van-e jogunk csatlakozni? Van-e jogunk az adott parancsot lefuttatni?
12
Karakterkódolás Használjunk mindenhol UTF 8-at! Miért?
Mert a magyar nyelv nem triviális. Mert az UTF-8 egyre dominánsabb, bár nem problémamentes.
13
PHP ALAPOK PHP: Hypertext Preprocessor – szerver oldali szkriptnyelv
Dinamikus és interaktív weboldalak készítése PHP kód HTML kódba ágyazása Szintaxis hasonló C/C++, Java, Javasrcipt, Perl nyelvekhez Tartalmaz szöveget, HTML tagokat, PHP kódokat (szkripteket) Szerveren fut Kommunikálhat adatbázis-szerverrel (pl. MySQL, Oracle stb.) Kiterjesztése .php Szabadon letölthető és használható
14
Szintaxis <?php … ?> vagy <? … ?>
PHP kódot nem lehet böngészővel megnézni, mert az előállított HTML kimenet látható. PHP kód kezdete, vége: <?php … ?> vagy <? … ?>
15
<html> <body> <. php echo „Hello world. ”;
<html> <body> <?php echo „Hello world!”; ?> </body> </html> print
16
Print és echo nélküli kimenet kezelés:
<acronym class=„datum” title=„<?= $datum[‘hosszu’] ?>”> <span class=„honap”><?= $datum[‘honap’] ?></span> <span class=„nap”><?= $datum[‘nap’] ?></span> </acronym <?= kifejezés ?>
17
Megjegyzések Egysoros megjegyzések: // Egy soros megjegyzés Többsoros megjegyzés: /* Ez egy több soros megjegyzés. */
18
Változók gettype – változó típusának lekérdezése
$ karakterrel kezdődnek a változók nevei Szövegeket, számokat, tömböket tartalmazhatnak Nevek: ABC betűi, számok, aláhúzás karakter, NEM kezdődik számmal, szóközt NEM tartalmazhatnak Gyengén típusos - nincs szükség a változó előzetes megadására (értékadásnál beállítódik) Típusok: Logikai (boolean), Egész számok (integer), Lebegőpontos számok (double), Sztringek(string), Tömbök(array), Objektumok(object), Erőforrások (adatbázis azonosítója), NULL gettype – változó típusának lekérdezése
19
Típuskonverziók Implicit Explicit $a=3 $b=2.4 print $a + $b
print ‘2 alma’ + ‘3 körte’ $a= print (integer)($a*100)/100.0 print $a + (integer)$b 1. Valós számmá konvertálódik 2. Egész számmá konvertálódik 3. Valós számmá konvertálódik
20
Eddig nem változtak a típusok
Szükség lehet a típus változtatására – settype Változó változók: $a= ‘b’; $b= ‘alma’; $$a=‘alma’
21
A sztringek Létrehozás aposztróffal
‘heredoc’ szintaxis $t= <<< EOS Több soros sztring, melyben hosszú fülű, törpe tacsi szerepel. EOS; Létrehozás aposztróffal echo ‘Hamlet kérdi: „Lenni vagy nem lenni…”’; Létrehozás idézőjellel: $kutya= ‘tacsi’; echo „törpe $kutya hosszú fülekkel”; echo „ hosszú $kutyafülek”; echo „ hosszú ${kutya}fülek”; echo „ hosszú {$kutya }fülek” String karaktereinek elérése, módosítása: $p = ‘ÉVA’; $elso = $p{0}; $harmadik = $p{2}; $p{2} = „I”;
22
Operátorok és kifejezések
Értékadó operátorok Aritmetikai operátorok Összehasonlító operátorok Logikai operátorok
23
Értékadó operátorok = $x=$y $x=$y; += $x+=$y $x=$x+$y; -= $x-=$y
Példa Jelentés = $x=$y $x=$y; += $x+=$y $x=$x+$y; -= $x-=$y $x=$x-$y; *= $x*=$y $x=$x*$y; /= $x/=$y $x=$x/$y; %= $x%=$y $x=$x%$y; .= $x.=$y $x=$x.$y;
24
Aritmetikai operátorok
Példa Eredmény + $x=2; $x+2 4 - 5-$x 3 * $x=4; $x*5 20 / 5/2 2.5 % 5%2 1 ++ $x=5; $x $x $x=6 -- $x— $x $x=4
25
Összehasonlító operátorok
Művelet Példa Eredmény == Egyenlő 5==8 false != Nem egyenlő 5!=8 true > Nagyobb 5>8 < Kisebb 5<8 >= Nagyobb-egyenlő 5>=8 <= Kisebb-egyenlő 5<=8 === Típus és érték egyenlő ‘5’===5
26
Logikai operátorok Operátor Művelet Példa Eredmény && and és $x=6 $y=3
($x< 10 and $y>1) True || or Vagy ($x==5 || $y==5) ($x==5 or $y==5) False ! nem !($x==$y)
27
Operátorok precedenciája
++, --, /,*,% +,- <, <=, >, >= ==, !=, == && || =, +=, -=, /=, *=, %=, .= And or Rövidzár kiértékelés ( $x < 5 ) && ( $y == 5 )
28
Tömbök 1 vagy több értéket tárolhat egyetlen változónévvel. Típusai:
Sorszámozott – egyedi numerikus azonosító kulcsai vannak Asszociatív – egyedi szöveg azonosító kulcsai vannak Többdimenziós tömb – 1 vagy több tömböt tartalmaz
29
Sorszámozott tömbök $nevek = array( „Anna”, „Attila”, „Anita”);
$nevek[0]= „Anna”; $nevek[1]= „Attila”; $nevek[2]= „Anita”; echo $nevek[0] . „ and „ . $nevek[1] . „ and „ . $nevek[2] . „jó barátok.”;
30
Asszociatív tömbök $korok = array („Anna”= >18, „Attila”=>20, „Anita”=>21); $korok[‘Anna’] = „18”; $korok[‘Attila’] = „20”; $korok[‘Anita’] = „21”; echo „Attila” . $korok[‘Attila’] . „éves.”;
31
Többdimenziós tömbök $csalad = array ( „Kovacs” => array( „Anna”, „Attila” ), „Nagy” => array( „Anita” );
32
Vezérlési szerkezetek
Elágazások – if, elseif és else Ciklusok – while, do-while, for, foreach Függvények használata
33
Elágazások - if-else szerkezet
if (feltétel) végrehajtandó kód, ha a feltétel teljesül; else végrehajtandó kód, ha a feltétel nem teljesül; Pl. $n=date(„N”); if ($n==„Reggel” ) echo „Jó reggelt!”; echo „Jó napot!”; $n=date(„N”); if ($n==„Reggel”) { echo „Szia! <br>”; echo „Jó reggelt! <br>”; echo”Jó munkát mára <br>”; }
34
Az elseif szerkezet if (feltétel1) végrehajtandó kód, ha a feltétel1 teljesül; elseif (feltetel2) végrehajtandó kód, ha a feltétel2 teljesül; else végrehajtandó kód, ha a feltétel nem teljesül; $n=date(„N”); if ($n==„Reggel” ) echo „Jó reggelt!”; elseif ($n== „Este”) echo „Jó estét!”; else echo „Jó napot!”;
35
A switch szerkezet switch (kif) { case cimke1:
Akkor használjuk, ha más-más kódot akarunk végrehajtani egy kifejezés lehetséges értékei alapján. Elkerülhetők a hosszú if-es blokkok. Egy kif. egyszer végrehajtódik, A kif. összahsonlításra kerül minden case kif-sel Ha egyezik, akkor a kód végrehajtódik Ezután a break leállítja a kód végrehajtását A default-tal kezeljük a case által nem kezelt eseteket. switch (kif) { case cimke1: végrehajtandó kód, ha a kif = cimke1 break; case cimke2: végrehajtandó kód, ha a kif = cimke2 default; végrehajtandó kód Ha a kif különbözik cimke1 és címke2 – től; }
36
Ciklusok – a while ciklus PHP-ben
Szintaxis: while (feltetel) ciklusmag $i=1; while($i<=5) { echo „ A szám „ . $i .” <br>”; $i++; }
37
A do-while ciklus $i=0; Szintaxis: do { ciklusmag; } while (feltetel);
echo „A szám” . $i . „<br>”; } while ($i<5);
38
A for ciklus Amikor előre tudjuk hányszor kell futtatni a kódot.
Szintaxis: for (inicializálás; feltétel;növelés) { ciklusmag; } for ($i=1; $i<=5; $i++) { echo „Hello Világ! <br>”; } $i=1; while ($i<=5) { echo „Hello Világ! <br>”; $i++; }
39
A foreach ciklus Tömbelemekre alkalmazzuk Kilépés ciklusból:
Tömb elemek kiíratása: $tomb=array(„egy”, „kettő”, „három”); foreach ($tomb as $ertek) echo „Érték: „ . $ertek . „<br>”; Kilépés ciklusból: break utasítással lehetséges. Ciklusmag végrehajtásának megszakítása: continue utasítással lehetséges.
40
Függvények használata
Kb beépített függvény Kódblokk function szóval kezdődik A név utaljon a függvény funkciójára. A PHP kód tetszőleges pontján meghívhatjuk. Paraméterezés
41
Példák egyszerű függvényre
Function Kiir($nev) { echo „ A nevem Nagy $nev . <br>”; } Kiir(„Anna”); Kiir(„Attila”); Kiir(„Anita”); Function Kiirfoglalk($nev, $fogl) { echo „ A nevem Nagy $nev, $fogl vagyok . <br>”; } Kiirfoglalk(„Anna”, „Óvodapedagógus”); Kiirfoglalk(„Attila”, „Építőmérnök”); Kiirfoglalk(„Anita”, „Tanárnő”);
42
Paraméterátadás, visszatérési érték
A paraméterek közül egyet vagy többet elhagyhatunk, ha a következőképpen adjuk meg a függvényben: function fuggvenynev($nev; $ertek = „Adott”) { … } function osszeg($x,$y) { $ossz= $x+$y; return $ossz; } echo „3+5 =” . osszeg(3,5)
43
Adatbázis-kapcsolat MySQL a legnépszerűbb
Adatbázis adataihoz való hozzáféréshez kapcsolatot kell létrehozni az adatbázishoz. mysql_connect() Szintaxis: mysql_connect(servername, username, password);
44
$con = mysql_connect („localhost”, „peter”, „abc123”); if (
$con = mysql_connect („localhost”, „peter”, „abc123”); if (! $con) { die(‘Nem sikerült kapcsolatot kiépíteni:’ . mysql_error()); } mysql_close($con);
45
Adatbázisok és táblák létrehozása
Adattípusok Elsődleges kulcsok Adatok bevitele adatbázisba Lekérdezés Eredmények megjelenítése Műveletek rekordokkal (feltételek, rendezések, módosítás, törlés)
46
Adatbázisok és táblák létrehozása
Szerverkapcsolódás után létrehozzuk az adatbázis(oka)t és a táblá(ka)t. CREATE DATABASE adatbneve $con = mysql_connect („localhost”, „peter”, „abc123”); if (! $con) { die(‘Nem sikerült kapcsolatot kiépíteni:’ . mysql_error()); } If (mysql_query(„CREATE DATABASE my_db”, $con)) { echo „Adatbázis létrehozva”; } else { echo „Sikertelen adatbázis létrehozás.” . mysql_error(); mysql_close($con);
47
mysql_select_db(„my_db”, $con); $sql=„CREATE TABLE person (
CREATE TABLE tablanev ( Oszlopnev1 adattipus, Oszlopnev2 adattipus, Oszlopnev3 adattipus, … ) mysql_select_db(„my_db”, $con); $sql=„CREATE TABLE person ( keresztnev varchar(15), vezeteknev varchar(15), kor int )”; mysql_query($sql, $con); mysql_close($con);
48
Adattípusok I. Numerikus – egész és tizedes számok, size max. számjegyek száma, d tizedes jegyek száma int(size), smallint(size), tinyint(size), mediumint(size), bigint(size) decimal(size,d), double(size,d), float(size,d) Szöveges adattípusok – sztring, betűk, számok, spec. karakterek char(size) – fix hosszúság varchar(size) - változó hosszúság tinytext – változó hossz, de max. 255 karakter, text, blob, mediumtext, mediumblob, longtext, longblob (max , , )
49
Adattípusok II. Dátum – dátumot és/vagy időt tartalmaz date(yyyy-mm-dd), datetime(yyyy-mm-dd hh:mm:ss), timestamp(yyyymmddhhmmss), time(hh:mm:ss) Összetett típusok – érték listázva enum(ertek1, ertek2, ertek3,….,ertekx) set
50
Elsődleges kulcs $sql=„CREATE TABLE szemely (
Minden táblának kell legyen (kivétel a kapcsoló táblák) Egyedileg azonosítja a sorokat, rekordokat Egyedinek kell lennie Nem lehet null értékű Indexelni kell a gyakori visszakeresés végett $sql=„CREATE TABLE szemely ( szemelyazon int NOT NULL AUTO_INCREMENT, PRIMARY KEY(szemelyazon), keresztnev varchar(15), vezeteknev varchar(15), kor int )”; mysql_query($sql, $con);
51
Adatbevitel - INSERT INTO
mysql_query(„INSERT INTO szemely (keresztnev, vezeteknev, kor) VALUES(‚Péter’, ‚Kovács’,’22’)”); VALUES(‚Éva’, ‚Kiss’,’25’)”); mysql_close($con);
52
Pl. <html> <body> <form action="insert.php" method="post"> keresztnev: <input type="text" name=„keresztnev"> vezeteknev: <input type="text" name=„vezeteknev"> kor: <input type="text" name=„kor"> <input type="submit" value="Elküld"> </form> </body> </html>
53
PHP kód – adatbevitel űrlapról
$con = mysql_connect("localhost","peter","abc123"); if (!$con) { die('Nem sikerült kapcsolatot kiépíteni: ' . mysql_error()); } mysql_select_db("my_db", $con); $sql="INSERT INTO person (keresztnev, vezeteknev, kor) VALUES ('$_POST[keresztnev]','$_POST[vezeteknev]','$_POST[kor]')"; if (!mysql_query($sql,$con)) { die('Hiba: ' . mysql_error()); } echo "1 rekord létrejött"; mysql_close($con)
54
Választó Lekérdezés – SELECT
$con = mysql_connect("localhost","peter","abc123"); if (!$con) { die('Nem sikerült kapcsolatot kiépíteni: ' . mysql_error()); } mysql_select_db("my_db", $con); $eredmeny = mysql_query("SELECT * FROM szemely"); while($sor = mysql_fetch_array($eredmeny)) { echo $sor[‚keresztnev'] . " " . $sor[‚vezeteknev']; echo "<br>"; } mysql_close($con);
55
Ez miben tér el az előző példától?
$con = mysql_connect("localhost","peter","abc123"); if (!$con) { die('Nem sikerült kapcsolatot kiépíteni: ' . mysql_error());} mysql_select_db("my_db", $con); $eredmeny = mysql_query("SELECT * FROM szemely"); echo "<table border='1'> <tr> <th>Vezeteknev</th> <th>Keresztnev</th> </tr>"; while($sor = mysql_fetch_array($eredmeny)) { echo "<tr>"; echo " <td>" . $sor[‚Keresztnev'] . "</td>"; echo " <td>" . $sor[‚Vezeteknev'] . "</td>"; echo "</tr>"; } echo "</table>"; mysql_close($con);
56
Feltételes választó lekérdezés – SELECT WHERE
Általános szintaktika: SELECT oszlop FROM tabla WHERE feltetel(ek) Operátor Leírás = Egyenlő != Nem egyenlő > Nagyobb < Kisebb >= Nagyobb, vagy egyenlő <= Kisebb, vagy egyenlő BETWEEN Tartományba esés LIKE Mintával való egyezés
57
Példa feltételes kiválasztásra
$con = mysql_connect("localhost","peter","abc123"); if (!$con) { die('Nem sikerült kapcsolatot kiépíteni: ' . mysql_error()); } mysql_select_db("my_db", $con); $eredmeny = mysql_query("SELECT * FROM szemely WHERE keresztnev='Péter'"); while($sor = mysql_fetch_array($eredmeny)) { echo $sor[‚keresztnev'] . " " . $row[‚vezeteknev']; echo "<br>";
58
Rendezés – ORDER BY Általános szintaktika: SELECT column_name(s) FROM table_name ORDER BY column_name Példa: $con = mysql_connect("localhost","peter","abc123"); if (!$con) { die('Nem sikerült kapcsolatot kiépíteni: ' . mysql_error()); } mysql_select_db("my_db", $con); $eredmeny = mysql_query("SELECT * FROM szemely ORDER BY kor"); while($sor = mysql_fetch_array($eredmeny)) { echo $sor[‚keresztnev']; echo " " . $sor[‚keresztnev']; echo " " . $sor[‚kor']; echo "<br>"; } mysql_close($con);
59
Rendezés növekvő és csökkenő sorrendben
SELECT column_name(s) FROM table_name ORDER BY column_name DESC
60
Rendezés két vagy több oszlop alapján
SELECT column_name(s) FROM table_name ORDER BY column_name1, column_name2
61
Adatok módosítása - UPDATE
mysql_query("UPDATE Person SET Age = '36' WHERE FirstName = 'Peter' AND LastName = 'Griffin'"); mysql_close($con);
62
Adatok törlése mysql_query("DELETE FROM Person WHERE LastName='Griffin'");
63
Adatbázis absztrakció
Ha a szolgáltató nem nyújt MySQL szolgáltatást Ha túl nagy a szerverterhelés Megoldás gyakran a PostgreSQL, Microsoft SQL Server, vagy az Oracle Database Egyre inkább elterjedt módszer Előnyei: Adatbázis-kezelő rendszer függetlenedés Verzió függetlenedés Nem kell specialistává válnunk
64
Absztrakciós réteg
65
PHP Data Object - PDO Kapcsolódás adatbázishoz:
$db = new PDO('mysql:host=localhost;dbname=test', 'user', 'pass'); Rekordszintű bejárás: foreach($db->query('select * from products') as $row) { // ... } Rekord beszúrása, és az új ID kiolvasása: $db->exec("insert into products (name) values ('Sample')"); $id = $db->lastInsertId();
66
Preparált lekérdezések
Preparált lekérdezés : $statement = $db->prepare( 'select * from products where id = ? and category = ?'); $statement->execute( array($_GET['id'], $_GET['category'])); while($statement->fetch() as $row) { // ... } Preparált módosítás: $statement = $db->prepare( 'update products set name=:name where id=:id'); $statement->execute( array('name' => $_POST['name'], 'id' => 123)); Preparált beszúrás: $statement = $db->prepare( 'insert into products (name) values(:name)'); $statement->execute( array('name' => $_POST['name'])); $newProductId = $db->lastInsertId();
67
PÉLDA 1. Űrlap készítése MySQL adatbázishoz PHP-ben
A PHP fájlba alapvetően HTML űrlapot készítünk. Az űrlap elemeit elnevezzük, ezzel fogunk tudni hivatkozni a tartalmára. Vagyis az űrlap eleme egy változó, amit a nevével azonosítunk. Űrlapokat a FORM tag-be írjuk bele. A FORM tag „action” attribútuma egy .php fájl. A „method” attribútum lehet post vagy get. A kettő között a különbség az, hogy a post estében nem fognak látszódni a paraméterek böngésző címsorában.
68
<?php global $veznev; // vezetéknevet tároljuk majd benne global $kernev; // keresztnevet tároljuk majd benne global $gender; // a nemet tároljuk majd benne global $city; // a várost tároljuk majd benne /*********************************************************** Kezdjük weboldalt. *********************************************************/ echo '<html>'; echo '<head>'; echo '<meta http-equiv="content-type" content="text/html; charset=UTF-8" >'; echo '<title>Teszt oldal űrlap kezeléshez</title>'; echo '</head>'; echo '<body>'; $host = 'XXXXXXXXX'; $user = 'XXXXXXXXX'; $password = 'XXXXXXXXX';
69
/********* Csatlakozunk az adatbázishoz ********/
$connect = mysql_connect( $host, $user, $password ) or die ( "Error: Can not connect to server" ); mysql_select_db( "teszt", $connect ) or die ( "Can not connect to database" );
70
/***** Ha az oldal kap paramétereket, akkor letároljuk a globális változókba ***/
$veznev = $_POST["vnev"]; $kernev = $_POST["knev"]; $city = $_POST["varos"]; $gender = $_POST["nem"];
71
/********* Ez a rész csak akkor fut le, ha minden paraméter létezik **********/
if ( isset($veznev) && isset($kernev) && isset($city) && isset($gender) ) { /******* beszúrjuk a kapott paramétereket a táblába ***********/ $sql = "INSERT INTO emberek (vezeteknev, keresztnev, varos, nem) VALUES ('" . $veznev ."','". $kernev. "','". $city. "','". $gender . "')"; mysql_query( $sql ) or die ("Hiba a beszúrásnál"); } $sql = "SELECT varosnev FROM varosok"; // lekérdezzük a városokat $varoslista = mysql_query( $sql ); mysql_close($connect); // lezárjuk az adatbázis-kapcsolatot
72
echo '<form action="teszt.php" method="post">';
/************ EZ AZ ŰRLAP ********************/ /***** táblázatos elrendezést használunk *****/ /***********************************************/ echo '<form action="teszt.php" method="post">'; echo '<table width=100 >'; echo '<tr><td>Vezetéknév:</td> <td><input type="text" name="vnev" value=""/></td></tr>'; echo '<tr><td>Keresztnév:</td> <td><input type="text" name="knev" value=""/></td></tr>'; echo '<tr><td>Férfi</td> <td><input type="radio" name="nem" value="Férfi"></td></tr>'; echo '<tr><td>Nő</td> <td><input type="radio" name="nem" value="Nő"></td></tr>'; echo '<tr><td>Város</td> <td><select name="varos" >'; while ( $v = mysql_fetch_array($varoslista, MYSQL_NUM) ) { echo '<option value="' . $v[0] . '">' . $v[0] . '</option>'; } echo '</select></td></tr>'; echo '<tr><td><input type="submit" value="Beszúr" /></td></tr>'; echo '</table>'; echo '</form>';
73
$sql = "SELECT vezeteknev, keresztnev, varos, nem FROM emberek";
// LEKERDEZES /******* újra csatlakozunk az adatbázishoz *********/ $connect = mysql_connect( $host, $user, $password ) or die ( "Error: Can not connect to server" ); mysql_select_db( "teszt", $connect ) or die ( "Can not connect to database" ); /******** lekérdezzük az adatbázisban szereplő embereket *********/ $sql = "SELECT vezeteknev, keresztnev, varos, nem FROM emberek"; $eredmeny = mysql_query( $sql ); /********* a lekérdezés eredményét kiírjuk egy táblázatba ****************/ echo '<center>'; echo '<table width="60%" border="1">'; echo '<tr><td bgcolor="#EEEEEE">Vezetéknév</td><td bgcolor="#EEEEEE">Keresztnév</td> <td bgcolor="#EEEEEE">Város</td><td bgcolor="#EEEEEE">Nem</td></tr>'; while ( $rekord = mysql_fetch_array($eredmeny, MYSQL_NUM) ) { echo '<tr><td>' . $rekord[0] . '</td><td>' . $rekord[1] . '</td><td>' . $rekord[2] . '</td><td>' . $rekord[3] . '</td></tr>'; } echo '</table>'; echo '</center>';
74
VÉGÜL: mysql_close($connect); // lezárjuk az adatbázis-kapcsolatot echo '</body>'; echo '</html>'; ?>
75
Mit csinál a következő PHP program?
$szam = 11; $maradek = $szam % 2; if ($maradek > 0) { echo "A $szam "; } else{ echo "A $szam "; ?>
76
PHP feladat Készítsen egy PHP függvényt, amelynek paraméterként átadja a bruttó havi fizetést és egy nevet, és ez a függvény tételesen kiírja az összes levonást illetve a nettó bért.
77
<?php $nyugdij = $brut * 0.1; $munkanelkuli = $brut * 0.015; $tb = $brut *0.07; $szja = $brut * 0.16; $osszlevonas = $nyugdij + $munkanelkuli + $tb + $szja; $net = $brut - $nyugdij - $munkanelkuli - $tb - $szja; echo "<p> Név: ". $name."</p>"; echo "<p> Bruttó jövedelem: ". $brut."</p>"; echo "<p> Havi levonások: ". $osszlevonas."</p>"; echo "<p> Amiből: </p>"; echo "<ul>"; echo "<li>TB: ".$tb."</li>"; echo "<li>Nugdíj: ".$nyugdij."</li>"; echo "<li>Munkanélküli: ".$munkanelkuli."</li>"; echo "<li>SZJA: ".$szja."</li>"; echo "</ul>"; echo "<p><strong>Havi nettó jövedelem: ".$net."</strong></p>"; } //meghívjuk a függvényt átadva neki a két kezdeti paramétert, amellyel az dolgozni fog berkalkulator("Gipsz Jakab", ); ?>
78
PHP feladat Készítsen egy olyan PHP függvényt (hozzon létre új php fájlt és új függvényt) amelynek átadja a következő asszociatív tömböt és a függvény kigenerál egy HTML táblázatot, amelyben, nettó bér szerint csökkenő sorrendbe rendezve jelennek meg a személyek és azok nettó bére. Bemeneti tömb: ["Kiss Janos" => , "Nagy Jozsef" => , "Szegeny Bela" => , "Magnas Miska" => , "Gipsz Jakab" => ] Kimenet valahogy így kellene kinézzen: Név | Nettó bér xxxxx | yyyy | zzzzz |
79
<?php function berkalkulator2($bemenet) { $kimenet = array(); foreach($bemenet as $nev => $brut) { $nyugdij = $brut * 0.1; $munkanelkuli = $brut * 0.015; $tb = $brut *0.07; $szja = $brut * 0.16; $net = $brut - $nyugdij - $munkanelkuli - $tb - $szja; $kimenet[$nev] = $net; } arsort($kimenet); eredmenyKiiras($kimenet); function eredmenyKiiras($bemenet) { echo "<table border=1 cellspacing=2 cellpadding=4><th>Név</th> <th>Nettó Bér</th>" ; foreach($bemenet as $nev => $net) { echo "<tr><td>".$nev."</td><td style='text-align:right;'>".$net."</td></tr>"; echo "</table>"; $nevek = array("Kiss Janos" => , "Nagy Jozsef" => , "Szegeny Bela" => , "Magnas Miska" => , "Gipsz Jakab" => ); berkalkulator2($nevek);
80
Állománykezelés, szöveges fájlok
Szerveren tárolt szöveges állományok (.txt, .ini, .dat) Mi a helyzet a .doc, .rtf, .pdf kiterjesztésű fájlokkal? Meghatározott szerkezetük miatt bináris fájlok olvasására, írására előre megírt, erre a célra szolgáló függvényeket kell használni. .txt fájlok kezelési technológiája
81
Kezelési technológia Meg kell nyitni a beolvasandó fájlt!
Megkapjuk az u.n. állományleírót. Egy változó amelynek segítségével érik el a függvények a fájlt. Állománymutató használata. Az állomány valamely karakterére mutat.
82
Megnyitás és bezárás fopen() – megnyit ill. létrehoz $file = fopen("adatok/nevek.txt", "r"); Megnyitás módjai: művelet állománymutató kezdeti helyzete r fájl megnyitása olvasásra fájl eleje w fájl megnyitása írásra (létrehozás/ürítés) a fájl megnyitása hozzáfűzésre (létrehozás) fájl vége
83
file_exists() - file létezését ellenőrző függvény A mód befolyásolja a használható műveletek körét. Ha például olvasási módban nyitjuk meg a fájlt, nem engedhetünk rá olyan függvényt, ami írni akarja, és fordítva is igaz. Ha olvasni és írni is akarunk a fájlba, akkor nyissuk meg kétféle módban: $file_r = fopen("file.txt", "r"); $file_w = fopen("file.txt", "a");
84
if (file_exists("file.txt")){ $file = fopen("file.txt", "r");
fclose() - Ha a fájlban elvégeztük a műveleteket amiket akartunk, és nem akarjuk tovább bántani, akkor be szokás zárni. if (file_exists("file.txt")){ $file = fopen("file.txt", "r"); // olvasás fclose($file); } $file = fopen("file.txt", "a"); // írás fclose($file);
85
Olvasás $file = fopen("file.txt", "r");
fread() - A függvény fájl olvasására használható. $file = fopen("file.txt", "r"); $content = fread($file, filesize("file.txt")); fclose($file);
86
Jobb példa, létezést is ellenőriz
function file_read($filepath){ if (file_exists($filepath)){ $file = fopen($filepath, "r"); $content = fread($file, filesize($filepath)); fclose($file); } else{ $content = false; return $content; }
87
$file = fopen("file.txt", "a"); fwrite($file, "Ez egy tengeri T-rex");
Írás fwrite() - Ezzel a függvénnyel fájlba tudunk írni. $file = fopen("file.txt", "a"); fwrite($file, "Ez egy tengeri T-rex"); fclose($file);
88
Példa Tegyük fel, hogy a nevek.txt-ben neveket tárolunk mégpedig úgy, hogy a nevek egy | karakterrel vannak elválasztva egymástól. Például legyen ilyen a tartalma: Hörb|Ismeretlen arc|DaniL|Gipsz Jakab Legyen egy űrlap, ami bekér egy nevet, és elküldés után bővíti a nevek listáját a beírt névvel, és kilistázza a neveket. Akkor hozzuk létre az urlap.php-t az alábbi tartalommal: <form method="post" action="nevek.php"> // Írd be a neved: <input type="text" name="nev" value="" /> <input type="submit" value="OK" /> </form>
89
nevek.php dolga, hogy beírja a fájlba az új nevet, amit a felhasználó megadott, majd listázza ki az addig beírt neveket <?php $filename = "nevek.txt"; // fájl írása $file = fopen($filename, "a"); fwrite($file, "|".$_POST["nev"]); fclose($file); // fájl olvasása $file = fopen($filename, "r"); $nevek = fread($file, filesize($filename)); fclose($file); // kiírás $nevtomb = explode("|", $nevek); foreach ($nevtomb as $nev){ print $nev.", "; } ?> Tömbbé alakítja a beolvasott karakterláncot
90
str_replace() függvény lecseréli a karaktereket
// kiírás $nevek = str_replace("|", ", ", $nevek); print $nevek;
91
Az újsor-karakter háromféle "változata„ van
Windows, Linux, Macintosh operációs rendszerekhez A Linux a \n escape-karaktert használja erre (egyéb nevei: LF, line feed, soremelés). A Macintosh viszont a \r karaktert (CR, carriage return, kocsivissza). A Windows szerint pedig az újsor így néz ki: \r\n, vagyis egy kocsivissza és egy soremelés karakter egymás után írva. fwrite($file, "\r\n".$_POST["nev"]);
92
1. Példa 1.) A példaprogram nem működik megfelelően, ha kezdetben nincs név a nevek.txt fájlban. Ha így futtatjuk le, az első név előtt is lesz | karakter. Próbáljuk meg ezt kiküszöbölni! Vagyis azt kell megoldani, hogy ha eredetileg üres a fájl, akkor a név elé ne írjunk ki | karaktert.
93
Megoldás $filename = "nevek.txt"; // fájl írása $file = fopen($filename, "a"); if (filesize($filename) === 0){ fwrite($file, $_POST["nev"]); } else{ fwrite($file, "|".$_POST["nev"]); fclose($file); // ...
94
2. Példa Írjuk meg az urlap.php és a nevek.php fájlt arra az esetre, amikor a nevek.txt fájl így néz ki: Ismeretlen arc;user; Az űrlap elküldése után megjelenő kimenet legyen ilyen: Hörb (rang: admin, Ismeretlen arc (rang: user, ) DaniL (rang: admin,
95
Az urlap.php fájl lehet például ilyen:
<form method="post" action="nevek.php"> Név: <input type="text" name="nev" value="" /><br /> Rang: <input type="text" name="rang" value="" /><br /> <input type="text" name=" " value="" /><br /> <input type="submit" value="OK" /> </form>
96
Az nevek.php-ben először beszúrjuk az új ember adatait, majd kiírjuk az addig összegyűjtött adatokat: // fájl olvasása $file = fopen($filename, "r"); $adatok = fread($file, filesize($filename)); fclose($file); // kiírás $adattomb = explode("\r\n", $adatok); foreach ($adattomb as $sor){ $adat = explode(";", $sor); print $adat[0]." (rang: ".$adat[1].", ".$adat[2].")<br />"; } ?> <?php $filename = "nevek.txt"; // fájl írása $file = fopen($filename, "a"); fwrite($file, "\r\n".$_POST["nev"].";".$_POST["rang"] .";".$_POST[" "]); fclose($file);
97
Állománykezelés Fájlműveletek
létrehozás, törlés, átnevezés, áthelyezés és másolás
98
Fájl létrehozása $file = fopen("data/file.doc", "w");
Fájlt létrehozni a megismert fopen() függvénnyel tudunk, függetlenül attól, hogy szöveges vagy bináris fájlról van-e szó. Ehhez írási vagy hozzáfűzési módban kell meghívni a függvényt: $file = fopen("data/file.doc", "w"); Ekkor a data könyvtárban létrejön a file.doc fájl. Létrehozás után mindjárt írhatunk is a fájlba az fwrite()-tal, mivel a fopen() hívása után meg van nyitva a fájl.
99
Fájl törlése unlink("data/file.doc");
Fájlt törölni az unlink() függvénnyel tudunk. Beadjuk paraméterként a fájl elérési útját, és máris megszabadultunk tőle: unlink("data/file.doc"); A visszatérési érték true ha sikerült a törlés, false ha nem.
100
Fájl áthelyezése és átnevezése
Mindkét műveletet a rename() függvénnyel tudjuk végrehajtani. Ezzel a függvénnyel egy fájl teljes elérési útját tudjuk módosítani. Pl. a fájl elérési útja: data/file.doc Ez azt jelenti, hogy a fájl a data könyvtárban van, és a neve file.doc. Az áthelyezés a fájl helyét módosítja, az átnevezés pedig a fájl nevét. Mivel a rename() függvénnyel magát az elérési utat tudjuk módosítani, így a segítségével egyszerre mindkét műveletet elvégezhetjük a fájllal: rename("data/file.doc", "limlom/egyeb/vacak.txt");
101
Nem túl szerencsés dolog az, ha a célfájl már létezik, vagyis már van egy limlom/egyeb/vacak.txt elérési úttal rendelkező fájlunk, és ezt adjuk meg második paraméterként. Ekkor a rename() vagy felülírja a célfájlt, vagy nem csinál semmit, ez főleg az operációs rendszertől függ, ami alatt fut. Így ha biztosra akarunk menni, ellenőrizzük le áthelyezés/átnevezés előtt a célfájlt a file_exists() függvénnyel. Ha felül szeretnénk írni, akkor előbb töröljük az eredetit az unlink()-kel, és utána indítsuk el az áthelyezést! További probléma, hogy ez a függvény nem tud könyvtárat létrehozni, így a fenti példában a limlom/egyeb könyvtárnak már léteznie kell, különben nem sok minden fog történni. Egy könyvtár létezését ugyanúgy a file_exists() függvénnyel tudjuk ellenőrizni.
102
$targetdir = "limlom/egyeb"; $targetname = "vacak
$targetdir = "limlom/egyeb"; $targetname = "vacak.txt"; $file = $targetdir."/".$targetname; if (file_exists($file)){ unlink($file); } if (file_exists($targetdir)){ rename("data/file.doc", $file);
103
Fájl másolása copy("data/file.doc", "limlom/egyeb/vacak.txt");
A másolási művelet annyiban különbözik az áthelyezéstől, hogy az eredeti helyen is megmarad a fájl. Meg persze más a függvény neve. Ezen kívül teljesen ugyanaz a helyzet: copy("data/file.doc", "limlom/egyeb/vacak.txt"); A paraméterek is teljesen ugyanúgy viselkednek. A függvény lemásolja a data könyvtárban lévő file.doc nevű fájlt, és a másolatot berakja a limlom/egyeb könyvtárba vacak.txt néven. A függvény képességei is megegyeznek a rename() függvénnyel, vagyis könyvtárat nem tud létrehozni, és már létező célfájl itt is bezavarhat, ezért hasonló vizsgálatokat érdemes elvégezni a használat előtt, mint ami fent látható, hacsak nem vagyunk biztosak abban, hogy erre nincs szükség.
104
Könyvtárak kezelése <img alt="" src="../kepek/kep.jpg" />
Egy könyvtár ugyebár fájlokat és más könyvtárakat tartalmazhat, amiknek nagyjából tetszőleges lehet a nevük (néhány speciális karakter nem használható). Azonban van két különleges állomány minden könyvtárban (egy üres könyvtárban is), a "." (egy pont karakter) és a ".." (két pont karakter). Nem fájlok és nem is könyvtárak, hanem könyvtárakra mutató hivatkozások. A "." állomány az őt tartalmazó könyvtárra hivatkozik, a ".." pedig a könyvtár szülő könyvtárára, vagyis arra, ami a könyvtárfában közvetlen felette van. Pl. html-ben a szülő könyvtár elérése: <img alt="" src="../kepek/kep.jpg" /> <a href="../../index.html" />Kezdőlap</a>
105
Elérési utak: kepek/kep.jpg relatív ./kepek/kep.jpg relatív c:/wamp/www/phptanfolyam/kepek/kep.jpg abszolút /var/www/phptanfolyam/kepek/kep.jpg abszolút abszolút Mindig az adott (böngészőben fututó) fájlhoz képest kell megadni az elérési utat.
106
Könyvtár beolvasása Egy könyvtár beolvasása valamelyest hasonlít egy szöveges fájl beolvasásához. Itt is meg kell nyitni a könyvtárat, ezután olvashatunk belőle, majd a végén be kell zárni. $dir = opendir("images/logos"); // olvasás closedir($dir); Itt nincsenek megnyitási módok, mivel "íráshoz" nem kell megnyitnunk a könyvtárat.
107
Létezik-e? ill. Könyvtár-e?
$path = "images/logos"; if (is_dir($path)){ $dir = opendir($path); // olvasás closedir($dir); }
108
Állományok beolvasása egyenként
$dir = opendir("images/logos"); while (($name = readdir($dir)) !== false){ print $name."; "; } closedir($dir); .; ..; 1.jpg; 2.jpg; saves; watermarks;
109
Állományok kiírása elérési úttal
function read_dir_tree($path){ $dir = opendir($path); while (($name = readdir($dir)) !== false){ if ($name != "." && $name != ".." && is_dir($path."/".$name)){ read_dir_tree($path."/".$name); } print $path."/".$name."<br />"; } closedir($dir); }
110
Lehetséges kimenet images/logos/. images/logos/.. images/logos/1.jpg images/logos/2.jpg images/logos/saves/. images/logos/saves/.. images/logos/saves images/logos/watermarks/. images/logos/watermarks/.. images/logos/watermarks/file1.png images/logos/watermarks
111
mkdir("images/logos/new");
Könyvtár létrehozása Könyvtárakkal ugyanazokat a műveleteket el lehet végezni, mint a fájlokkal, de sajnos nem mind olyan egyszerű, mert erős korlátozások vannak mindegyikben. Könyvtárat létrehozni az mkdir() függvénnyel lehet az alábbi módon: mkdir("images/logos/new");
112
Könyvtárág létrehozása
$path = "images/logos/new"; $dirs = explode("/", $path); $dirname = $dirs[0]; $n = 0; while ($n < count($dirs)){ mkdir($dirname); ++$n; $dirname += "/".$dirs[$n]; }
113
Ha létezik a könyvtárág egy része, ill. könyvtár-e vagy fájl esetén:
$path = "images/logos/new"; $dirs = explode("/", $path); $dirname = $dirs[0]; $n = 0; while ($n < count($dirs)){ if (is_file($dirname)){ $success if (!$success) break; } if (!is_dir($dirname)){ mkdir($dirname); $dirname += "/".$dirs[++$n]; }
114
rmdir("images/logos");
Könyvtár törlése rmdir("images/logos"); Csak üres könyvtárat lehet törölni (vagyis olyat, amiben csak a "." és ".." hivatkozások vannak meg). Teljes könyvtárág törléséhez ki kell törölni a könyvtárból az összes fájlt.
115
Könyvtár áthelyezése és átnevezése
rename("images/logos", "kepek/nagy_kepek/egyeb"); A könyvtárakat áthelyezés esetén a benne lévő fájlokkal és alkönyvtárakkal együtt helyezi át.
116
Könyvtár másolása // könyvtár átmásolása
Nincs semmilyen beépített függvény. Még üres könyvtár másolására se. Úgyhogy a másolást úgy kell megcsinálni, hogy létrehozunk egy üres könyvtárat, majd a forráskönyvtárat beolvassuk, és a fájlokat egyenként átmásoljuk a copy() függvénnyel a célkönyvtárba. function copy_dir($source, $target){ mkdir($target); $sourcedir = opendir($source); while (($name = readdir($sourcedir)) !== false){ $path = $source."/".$name; if ($name == "." || $name == ".."){ continue; } else if (is_dir($path)){ // könyvtár átmásolása copy_dir($path, $target."/".$name); } else{ // fájl átmásolása copy($path, $target."/".$name); } closedir($sourcedir); }
117
Példa Írjunk egy függvényt, ami egy teljes könyvtárágat tud törölni!
118
Megoldás else{ // fájl törlése @unlink($path); } } closedir($dir);
function delete_dir($dirname){ $dir = opendir($dirname); while (($name = readdir($dir)) !== false){ $path = $dirname."/".$name; if ($name == "." || $name == ".."){ continue; } else if (is_dir($path)){ // könyvtár törlése delete_dir($path); } else{ // fájl törlése } } closedir($dir); rmdir($dirname); }
119
10 hasznos tanács leendő php fejlesztőknek
120
1. Használd a PHP beépített függvényeit és osztályait 2
1.Használd a PHP beépített függvényeit és osztályait 2. Mindig készíts konfigurációs fájlt 3. Mindig takarítsd ki a szemetet az adataidból 4. Kapcsold be a hibaüzeneteket, értesítéseket mikor fejlesztesz 5. Ne tömd tele kommenttel a kódot 6. Legyenek kéznél a kedvenc kódrészleteid 7. Ne pocsékold az időd, használj jó kódszerkesztőt! 8. Használj MySQL adminisztációs tool-t, pl. a phpMyAdmin-t 9. Használj PHP környezeteket 10. Lépj kapcsolatba más PHP fejlesztőkkel
Hasonló előadás
© 2024 SlidePlayer.hu Inc.
All rights reserved.