2016. október 12., szerda

PHP alapismeretek

















































































A PHP úgynevezett szerver oldali script nyelv. Ez azt jelenti, hogy nem a felhasználó, vagy kliens gépén fut, hanem a web kiszolgálón, azaz a szerveren. Feladata, hogy a böngésző számára értelmezhető kimenetet hozzon létre, amit azután a szerver program, jellemzően az Apache, visszaküld a böngészőnek az pedig feldolgozza és megjeleníti. Nagyon leegyszerűsítve így készül el a számunkra látható weboldal, amikor a böngészőnkbe beírunk egy webcímet.
Kicsit értelmezzük azt, hogy melyek a script nyelvek sajátosságai. A PHP mellett például a javascript is egy úgynevezett script nyelv, ahogy a nevéből is látszik. Az ilyen programozási nyelvek fő jellemzője, hogy nem kell őket lefordítani futtatás előtt.
Mit jelent ez? Ha például C# nyelven írunk egy programot, akkor ugye gyakorlatilag egy szöveges állományba beírjuk a kódot, amit akár egyszerű notepaddal is megtehetünk. Ezután viszont egy másik programmal (compilerrel), le kell fordítani a programot gépi kódba, hogy futtatni tudjuk. A script nyelvek esetén nem így van. A PHP a kódunkat értelmezi és futtatja is egyben. Ebből kifolyólag a PHP kód is egyszerű szöveges állomány.
Különbség még, hogy a PHP nem fut folyamatosan a gépen, ha meghívja valamilyen program, mondjuk az Apache, akkor elvégzi a feladatát és leáll.
Ahhoz, hogy a saját gépünkön tudjunk PHP kódot futtatni, szükségünk van pár dologra:
Kell egy webszerver (Apache)
Kell egy adatbázis kezelő (MySQL)
Kell a PHP (php.exe)
Ha megfelelő gyakorlattal rendelkezünk, ezeket manuálisan is feltelepíthetjük, de egyszerűbb, ha valamilyen előre összeállított csomagot használunk erre a célra.
Én a WAMP szervert ajánlom, kompatibilis az újabb Window-okkal is és egyszerű a telepítése.
32 bites windows-hoz
64 bites windows-hoz
Figyelem! Szükséges hozzá még a Visual C++ 2010 SP1 Redistributable Package is.
32 bites változat
64 bites változat
Ha ezzel megvagyunk, indítsuk el a szervert.
Egy valami van amire oda kell figyelni. Ha a skype fut a gépünkön, akkor rá szokott telepedni a 80-as portra, amit az Apache webszerver is használ. Mielőtt indítjuk a szervert, lépjünk ki a skype-ból ( jobb gomb a tálca jobb alsó sarkában a skype ikonra és kilépés), és a szerver indítása után indítsuk újra.
Így néz ki egy alap PHP kód:
<?php echo ‘Heló Világ!’; ?>
Ha ezt egy mappába elmentjük index.php néven és meghívjuk a localhost/mappanév címet a böngészőnkben, akkor láthatjuk is a kód kimenetét.

Mielőtt nekikezdünk, tisztázzuk, mi is az a PHP?
Mielőtt nekikezdünk, tisztázzuk, mi is az a PHP?
A PHP környezet telepíthető Windowsra és Linuxra egyaránt, és bármelyik platform alatt írjuk meg a kódokat, azt probléma nélkül tehetjük át a másikra. A PHP fájlokat tetszőleges szövegszerkesztővel lehet szerkeszteni, de javasolt olyan szövegszerkesztőket használni amelyekben van kódszínezési funkció. Így gyorsabban kiszűrhetjük a gépelési hibákat a forráskódban.

Első php programunk
A feladat viszonylag egyszerű: írassuk ki PHP függvény segítségével a „Hello Web!” üzenetet.

Forrás:
<?php
    print ("Hello Web!");
?>

A kódunkat <?php és ?> formulába tettük. De helyes a <? és ?> formula is.
A php forrás megkülönbözteti a kis és a nagybetűket.

Második példaprogram
Ezúttal feladatunkat kicsit bonyolítjuk, kiegészítjük az előző példát az alap HTML tag-ekkel.

Forrás:
<html>
    <head>
        <title>Teszt oldal </title>
    </head>
<body>
    <?php
        print ("Hello Web!");
    ?>
</body>
</html>

Fontos, hogy a továbbiakban ezeket a HTML tag-eket mindig tegyük programjaink „köré”.

tudastar-php2
A kód és az eremény a böngészőben
Változok definiálása
A php-ban a változók neve előtt egy $ jel van. Utána egy tetszőleges változó név. A változó neve tartalmazhat betűket és számokat plusz az aláhúzás jelet.
Példa:
$alma
$al_ma
$alam1

A változónak nem kell típust adni (ahogyan azt nagyon sok nyelvben meg kellene tenni). PHP-ban a változóknak olyan értéket adunk amilyet csak szeretnénk. Az értéke eldönti, hogy milyen típusú lesz. Egy változót a programunk során több típusúként is használhatunk.
Példa:
<?
$alma=5;
print $alma;
print "<br>”;

print gettype($alma)  // kiírja az alma változó típusát
print "<br>”;
$alma=”Hello Word”;
print $alma ;
print "<br>”;
print gettype($alma)  // kiírja az alma változó típusát

Eredmény:
5
integer
Hello Word
String

Fontos: PHP-ban a függvények után a paramétereket zárójelek közé kell tenni. A print függvény ebből a szempontból kivétel (lásd példánkat) mert ennél a függvénynél a zárójelek elhagyhatók.

Néhány faladat javaslat a lecke alapján:
- Készítsünk programot amely köszönti a felhasználót a weblapon.
- Készítsünk programot amelyben különböző változó típusokat helyezünk el egy változóban és figyeljük a változó típusának változását.

Szerver oldali programozás ASP vagyis Active Server Pages segítségével.
Fontos megjegyezni, az ASP nem egy programozási nyelv, asp-hez Visual Basic Script vagy JScript nyelveket használhatunk, mint eszközt.
Mivel az ASP tipikus Microsoft találmány, felhasználja mindazt, ami a Microsoft-ot webes környezetben jellemzi, vagyis .NET, DLL, ActiveX, és a hasonló varázszavakat. Úgy vélem, akit érdekel a téma, jobban teszi, ha php-vel kezd ki először. Ha már programoztál korábban (pl. VB-ben),akkor nyilván nem lesz nehéz ASP-ben nekilátni egy egyszerűbb weblapnak. Én, mint kocaprogramozó inkább a szkriptnyelvek oldaláról közelítek az asp felé, de csak körbeszaglászom, egyrészt mivel tényleg csak az alapokra koncentrálok, másrészt mivel az asp-t tényleg csak akkor használnám, ha már nincs más megoldás.:)

Az ASP működése

Az ASP Windows platformon az IIS (Internet Information Services) webszerverét használja. A Windows ahol csak teheti, elrejti a felhasználó elől a működését, így idegesítő lehet, hogy nincs annyira egyértelmű helye és config file-ja az IIS-nek, mint pl. az Apache-nak. Ha mégis Apache-ot szeretnénk használni asp-hez, érdemes ide ellátogatnunk: http://www.apache-asp.org/.

Én egy Windows XP SP2-őn használom az IIS-et, aminek a telepítését (ha a Windows installáláskor nem tettük volna meg) elérhetjük a “Start Menü/Vezérlőpult/Programok Telepítése és Törlése” ablakban, ahol különböző Windows összetevőket is hozzáadhatunk vagy eltávolíthatunk. Keressük meg a listában az IIS-t és telepítsük fel. Miután végeztünk, láthatjuk, a windows belekavart a c: (vagy másik) meghajtónkba, nekem egy Inetpub könyvtár formájában. Az Inetpub/wwwroot könyvtár lesz a gépen azon dokumentumok alapértelmezett helye, amiket a webszerverünk fog a klienseknek (a látogatóknak) szolgáltatni, de ezen kívül is elhelyezhetjük saját asp oldalainkat.
A Windows mint mindenhez, az IIS kezeléséhez is ad “vizuális” segítséget, jelen esetben ez a gyönyörű nevű Microsoft Managment Console, az MMC. Az MMC-t a Start Menü/Futtatás-ra kattintva, majd a parancssorba az mmc szót beírva érhetjük el. Ha bejött a program, a File/Beépülő Modul hozzáadása menüre kattintva, majd a megjeleő ablakban a “Hozzáadás” ikonra kattintva a lsitáól kiválasztva megkapjuk az IIS ablakát, a “localhost”-nak megfelelő Alapértelmezett webhellyel, és az IIS helpjével.
Most nyissunk egy üres txt file-t, és csináljunk egy egyszerű asp lapot:

<%
Response.Write "Ez a 40 milliomodik Hello Word program"
%>
Ezt elmenthetjük mondjuk hello.asp néven, az Inetpub/wwwroot alatt tettszőleges helyre, ha egy helyre szeretnéd menteni a későbbi scripteket is, akkor csinálj egy almappát, és mentsd le oda.
Nálam ez:Inetpub/wwwroot/webdev/hello.asp

Nyissunk egy böngészőt, és írjuk be: http://localhost/webdev/hello.asp

Elvileg ennyit kell látnunk:

“Ez a 40 milliomodik Hello Word program”

Megjegyzés: Ha bármi mást is látunk, akkor valamit rosszul csináltunk.
Fontos, hogy a böngészőben nyissuk meg a lapot. Kezdő webprogramozók nagy fájdalma, hogy lapjuk pl. Total Commanderből megnyitva (böngészőben) nem futtatódik le. Ennek az a magyarázata, hogy a böngésző mint ügyfélprogram nem tudja lefordítni az asp oldalt, ahogy a php nyelven írt lapot sem, ez a webszerver feladata (A Winamp sem nyitja meg a .doc dokumentumot, persze erőltetni lehet…).
Mivel nem tud vele mit csinálni, így mint sima szöveg (plain text) jeleníti meg, ezért lehetséges, hogy amikor megnyitjuk a c:/Inetpub/wwwroot/webdev/hello.asp állományt (erről az útról persze), akkor a fenti jó megoldás helyett csak az alábbit kapjuk ( A ” kacsacsőr-százalék ” jelekkel együtt):

<%
Response.Write "Ez a 40 milliomodik Hello Word program"
%>
Kezdőknek: Hogy működik egy webszerver? A webszerver egy alkalmazás, ami foylamatosan fut egy számítógépen a háttérben, és figyeli, hogy ki próbál meg csatlakozni a géphez a megadott porton (pl. 80-as port). Mindenki kipróbálhatja, pl. a windows beépített telnet programával:
telnet www.index.hu 80
Ekkor “bejelentkezünk” az index webszerverére, majd a GET / paranccsal megkaphatjuk ugyanazt a kezdőlapot, amit a böngésző is megkap, mint választ, ha beütjük a www.index.hu címet. Tehát mikor beütjük, hogy www.google.com, a webszerverhez (valahogy) eljutatott kérés alapján a szerver “csinál” nekünk egy adott oldalt, amit elküld a böngészőnek. A böngésző, mivel alapvetően a HTML nyelv megjelenítésére tervezték, alapesetben egy html oldalt kap vissza, a szerver válaszát. A szerver oldali nyelvek a szerveren elvégzik a munkájukat, a felhasználó ebből ideális esetben semmit nem lát.

Az ASP esetében ez a következőképpen törénik: Mikor lekérünk egy lapot egy szerverről, mondjuk a www.penzesoldal.com/fontos.asp-t, akkor a webszerver (az IIS) megnézi, hogy a lekért oldal kiterjesztése asp-e, és ha igen, azt átadja az asp vezérlőnek (script host). Ez egy DLL file, ami az asp kódot értelmezi, és a megfelelő scriptértelmezőnek továbbküldi, majd azok válaszát html kóddá alakítva, beszúrja az “eredeti” lekért lapba, a megfelelő helyre. A válasz így már tiszta html lap, kivétel ez alól a kliens oldali (pl. javascript) scriptek, amiket a webszerver és az értelmező nem vesz figyelembe.

Nézzük meg egy konkrét példával, kicsit kibővítve a fenti állományt:
Nyissunk megint egy üres txt file-t és írjuk bele:






Ez itt egy html szöveg


<%
Response.Write "Ezt az asp-től kaptam, hurrá
"
Response.Write ""&Time&"
"
%>


Ezt elmentve, majd a böngészőben megnyitva, kb. ezt látjuk:

Ez itt egy html szöveg

Ezt az asp-től kaptam, hurrá

3:05:28

Mi a dinamikus oldal?

Ha megnézzük a forrást, láthatjuk, hogy lényegében nem különbözik egy sima html oldaltól, azonban ahányszor frissítjük az oldalt, mindig mást láthatunk, pontosabban a kijelzett idő változik meg. Ez pontosan azért van, mert ahányszor újratöltjük az oldalt, a böngésző csatlakozik a webszerverhez, és lekéri a “hello.asp” lapot, amin az asp értelmező a “Time” függvény hatására mindig kiírja az épp aktuális időt. Ezért mondhatjuk, hogy “Aktív” lapokat kapunk, hasonlóan a php-hez, ezt nevezzük  dinamikus oldalnak.

index.php tartalma

<?php
session_start();
ob_start();
include('connect.php');


?>

<?php
if (isset($_POST['submit']))
{
    $login=$_POST['login'];
    $jelszo=sha1($_POST['jelszo']);
    $sql="SELECT * FROM users WHERE (email='".$login."' AND jelszo='".$jelszo."');";
    $query=mysql_query($sql);
 
 
 
    if (mysql_num_rows($query) !==0 )
    {

        $dbrec=mysql_fetch_array($query);

        $_SESSION['login']=$dbrec['user_ID'];
        header("Location:fal.php");
    }
    else
    {
        print("<p><font color='red'>Nem megfelelő felhasználónév és/vagy jelszó.</font></p>");
    }
}
?>
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="content-type" content="text/html" />
<meta name="author" content="prometh" />
    <link rel="stylesheet" type="text/css" href="css/style.css"/>
<title>SN kezdemény</title>
</head>

<body bgcolor="#87ADD3">






 <br>
 <font size="5"<PRE>                                            <h1 align="center"> SZABÓ LÁSZLÓ ISTVÁN TANÁR ÚR HONLAPJA! </h1>     </PRE> </font>

   <PRE>                                           <font size="5"  <h2><b>E-mail címed: Jelszavad:</b>  </h2>     </font></PRE>
<div id="menu" align='center'>
    <form method="POST" action="<?php print($_SERVER['PHP_SELF']);?>">
        <input type="text" name="login"/>
        <input type="password" name="jelszo"/>
 <br>
       
<input type="submit" name="submit" value="Bejelentkezés"/>
    </form>

  <br> <marquee behavior="alternate">Kedves hallgatók, a belépéshez regisztráció szükséges!</marquee>
 <br>
<br>
  <a href="register.php">Regisztráció</a>
</div>

 <br>
 <p align="center"><img src="arc.jpg "><br> </p>



 <p align="center"><a href="http://szabolaszloistvan.blogspot.hu/">Szabó László István blogja</a> </p>
 <p><font color="#000000">
   
<p align="center">

<SCRIPT LANGUAGE="JavaScript"><!--
function initArray() {
  this.length = initArray.arguments.length
  for (var i = 0; i < this.length; i++)
  this[i+1] = initArray.arguments[i]
}

/*  Hónap névnapjainak meghatározása */
function havinev(ev,ho,nap) {
if (ho==1)
  { var napok = new initArray("ÚJÉV, Fruzsina","Ábel","Genovéva, Benjámin",
        "Titusz, Leona","Simon","Boldizsár","Attila, Ramóna","Gyöngyvér","Marcell",
        "Melánia","Ágota","ErnO","Veronika","Bódog","Lóránt, Loránd",
        "Gusztáv","Antal, Antónia","Piroska","Sára, Márió","Fábián, Sebestyén",
        "Ágnes","Vince, Artúr","Zelma, Rajmund","Timót","Pál","Vanda, Paula",
        "Angelika","Károly, Karola","Adél","Martina, Gerda","Marcella","") }
if (ho==2)
  if ((ev!=2000) && (ev!=2004) && ev!=1996)
    { var napok=new initArray("Ignác","Karolina, Aida","Balázs","Ráhel, Csenge",
        "Ágota, Ingrid","Dorottya, Dóra","Tódor, Rómeó","Aranka","Abigél, Alex","Elvira",
        "Bertold, Marietta","Lívia, Lídia","Ella, Linda","Bálint, Valentin",
        "Kolos, Georgina","Julianna, Lilla","Donát","Bernadett","Zsuzsanna",
        "Aladár, Álmos","Eleonóra","Gerzson","Alfréd",
        "Mátyás","Géza","Edina","Ákos, Bátor","Elemér","","")  }
     else
    { var napok=new initArray("Ignác","Karolina, Aida","Balázs","Ráhel, Csenge",
        "Ágota, Ingrid","Dorottya, Dóra","Tódor, Rómeó","Aranka","Abigél, Alex","Elvira",
        "Bertold, Marietta","Lívia, Lídia","Ella, Linda","Bálint, Valentin",
        "Kolos, Georgina","Julianna, Lilla","Donát","Bernadett","Zsuzsanna",
        "Aladár, Álmos","Eleonóra","Gerzson","Alfréd",
        "Szokonap","Mátyás","Géza","Edina","Ákos, Bátor","Elemér","","") }
if (ho==3)
  { var napok=new initArray("Albin","Lujza","Kornélia","Kázmér","Adorján, Adrián",
        "Leonóra, Inez","Tamás","NEMZ.NONAP, Zoltán","Franciska, Fanni","Ildikó",
        "Szilárd","Gergely","Krisztián, Ajtony","Matild","NEMZETI ÜNNEP, Kristóf",
        "Henrietta","Gertrúd, Patrik","Sándor, Ede","József, Bánk","Klaudia",
        "Benedek","Beáta, Izolda","Emoke","Gábor, Karina","Irén, Irisz",
        "Emánuel","Hajnalka","Gedeon, Johanna","Auguszta","Zalán","Árpád","" ) }
if (ho==4)
  { var napok=new initArray("Hugó","Áron","Buda, Richárd","Izidor","Vince",
        "Vilmos, Bíborka","Herman","Dénes","Erhard","Zsolt","Leó, Szaniszló","Gyula",
        "Ida","Tibor","Anasztázia, Tas","Csongor","Rudolf","Andrea, Ilma","Emma",
        "Tivadar","Konrád","Csilla, Noémi","Béla","György","Márk","Ervin",
        "Zita","Valéria","Péter","Katalin, Kitti","" )}
if (ho==5)
  { var napok=new initArray("MUNKA ÜNN.,Fülöp, Jakab","Zsigmond","Tímea, Irma",
        "Mónika, Flórián","Györgyi","Ivett, Frida","Gizella","Mihály","Gergely",
        "Ármin, Pálma","Ferenc","Pongrác","Szervác, Imola","Bonifác","Zsófia, Szonja",
        "Mózes, Botond","Paszkál","Erik, Alexandra","Ivó, Milán",
        "Bernát, Felícia","Konstantin","Júlia, Rita","Dezso","Eszter, Eliza",
        "Orbán","Fülöp, Evelin","Hella","Emil, Csanád","Magdolna",
        "Janka, Zsanett","Angéla, Petronella","" )}
if (ho==6)
  { var napok=new initArray("Tünde","Kármen, Anita","Klotild","Bulcsú","Fatime",
        "Norbert, Cintia","Róbert","Medárd","Félix","Margit, Gréta","Barnabás",
        "Villo","Antal, Anett","Vazul","Jolán, Vid","Jusztin","Laura, Alida",
        "Arnold, Levente","Gyárfás","Rafael","Alajos, Leila","Paulina",
        "Zoltán","Iván","Vilmos","János, Pál","László","Levente, Irén",
        "Péter, Pál","Pál","" ) }
if (ho==7)
  { var napok=new initArray("Tihamér, Annamária","Ottó","Kornél, Soma","Ulrik",
        "Emese, Sarolta","Csaba","Appolónia","Ellák","Lukrécia","Amália",
        "Nóra, Lili","Izabella, Dalma","Jeno","Ors, Stella","Henrik, Roland","Valter",
        "Endre, Elek","Frigyes","Emília","Illés","Dániel, Daniella",
        "Magdolna","Lenke","Kinga, Kincso","Kristóf, Jakab","Anna, Anikó",
        "Olga, Liliána","Szabolcs","Márta, Flóra","Judit, Xénia","Oszkár","" )}
if (ho==8)
  { var napok=new initArray("Boglárka","Lehel","Hermina","Domonkos, Dominika",
        "Krisztina","Berta, Bettina","Ibolya","László","Emod","Lörinc",
        "Zsuzsanna, Tiborc","Klára","Ipoly","Marcell","Mária","Ábrahám",
        "Jácint","Ilona","Huba","ALKOTMÁNY ÜNN., István","Sámuel, Hajna",
        "Menyhért, Mirjam","Bence","Bertalan","Lajos, Patrícia","Izsó",
        "Gáspár","Ágoston","Beatrix, Erna","Rózsa","Erika, Bella") }
if (ho==9)
  { var napok= new initArray("Egyed, Egon","Rebeka, Dorina","Hilda","Rozália",
        "Viktor, Lorinc","Zakariás","Regina","Mária, Adrienn","Ádám","Nikolett, Hunor",
        "Teodóra","Mária","Kornél","Szeréna, Roxána","Eniko, Melitta","Edit",
        "Zsófia","Diána","Vilhelmina","Friderika","Máté, Mirella","Móric",
        "Tekla","Gellért, Mercédesz","Eufrozina, Kende","Jusztina","Adalbert",
        "Vencel","Mihály","Jeromos","" )}
if (ho==10)
  { var napok= new initArray("Malvin","Petra","Helga","Ferenc","Aurél","Brúnó, Renáta",
       "Amália","Koppány","Dénes","Gedeon","Brigitta","Miksa","Kálmán, Ede","Helén",
        "Teréz","Gál","Hedvig","Lukács","Nándor","Vendel","Orsolya","Elod",
        "KÖZT.KIKIÁLT., Gyöngyi","Salamon","Blanka, Bianka","Dömötör",
        "Szabina","Simon, Szimonetta","Nárcisz","Alfonz","Farkas","" )}
if (ho==11)
  { var napok=new initArray("Marianna","Achilles","Gyozo","Károly","Imre","Lénárd",
        "Rezso","Zsombor akitől kaptam a névnapos kódot","Tivadar","Réka","Márton","Jónás, Renátó","Szilvia",
        "Aliz","Albert, Lipót","Ödön","Hortenzia, Gergo","Jeno","Erzsébet",
        "Jolán","Olivér","Cecília","Kelemen, Klementina","Emma","Katalin",
        "Virág","Virgil","Stefánia","Taksony","András, Andor","" )}
if (ho==12)
  { var napok=new initArray("Elza","Melinda, Vivien","Ferenc, Olívia","Borbála, Barbara",
        "Vilma","Miklós","Ambrus","Mária","Natália","Judit","Árpád","Gabriella",
        "Luca, Otília","Szilárda","Valér","Etelka, Aletta","Lázár, Olimpia",
        "Auguszta","Viola","Teofil","Tamás","Zéno","Viktória","Ádám, Éva",
        "KARÁCSONY, Eugénia","KARÁCSONY, István","János","Kamilla",
        "Tamás, Tamara","Dávid","Szilveszter","") }
   return napok[nap];
}

/* Hónap neve */
function honev(ho) {
   var month = new initArray("Január","Február","Március","Április","Május",
   "Junius","Július","Augusztus","Szeptember","Október","November","December");
   return month[ho]
   }

/* Nap neve */
function napnev(szam) {
   var napok = new initArray("Vasárnap","Hétfo","Kedd","Szerda","Csütörtök",
                             "Péntek","Szombat","Vasárnap")
   return napok[szam]
   }

  var ido = new Date()
  var ev = ido.getYear()
  var ho = ido.getMonth()+1
  var nap = ido.getDate()
  if (ev<1900) ev+=1900;
  document.writeln("Ma <b>" + ev + ". " + honev(ho) + " " + nap + ". "
    + napnev(ido.getDay()+1)
    +",<font color=red> "+havinev(ev,ho,nap)+"</font></b> napja van.")
  document.writeln("Boldog névnapot kívánok!")
//--></SCRIPT></p>




 <hr size="3" align="center" width="850">
 <p align="center"> Copyright &#169; 2015 Szabó László István  . Minden jog fenntartva.  szli@freemail.hu. </p>
</body>
</html>

logout.php tartalma

<?php
session_start();
unset($_SESSION['login']);
header("Location:index.php");
?>

connect.php tartalma

<?php
$kapcsolat = mysql_connect("sql4.ultraweb.hu", "felhasználóinév", "jelszó");
if ( !mysql_select_db("secret",$kapcsolat) ) die ("Ilyen adatbázis nem létezik ".mysql_error());

?>

adatlap.php tartalma

<?php
session_start();
ob_start();
include('connect.php');
?>
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="content-type" content="text/html" />
<meta name="author" content="prometh" />
    <link rel="stylesheet" type="text/css" href="css/style.css"/>
<title>Felhasználó adatlap</title>
</head>

<body bgcolor="#87ADD3">
<?php
if (isset($_SESSION['login']))
{
    $sql="SELECT * FROM users WHERE user_ID='".$_SESSION['login']."'";

    $query=mysql_query($sql);
    $dbrec=mysql_fetch_array($query);
?>
<div id="menu">
     <P align="center"><a href="fal.php">Üzenőfal</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    <a href="adatlap.php">Adatlap</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    <a href="ujbejegyzes.php">Új bejegyzés</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    <a href="logout.php">Kijelentkezés</a></P>
</div>
<table>
    <tr>
        <td>E-mail cím: </td><td><?php echo $dbrec['email'];?></td>
    </tr>
    <tr>
        <td>Vezetéknév: </td><td><?php echo $dbrec['vezetek_nev'];?></td>
    </tr>
    <tr>
        <td>Keresztnév: </td><td><?php echo $dbrec['kereszt_nev'];?></td>
    </tr>
    <tr>
        <td>Profilkép: </td><td><img src="<?php echo $dbrec['kep'];?>" width="100px"/></td>
    </tr>
</table>
<?php
    $sql2="SELECT * FROM bejegyzes
        INNER JOIN users
        ON bejegyzes.user_ID= users.user_ID
        WHERE bejegyzes.user_ID=".$_SESSION['login']."
        ORDER BY datum DESC;";
    $query2=mysql_query($sql2);
    if(mysql_num_rows($query2)!==0)
    {
     
        while($dbrec2=mysql_fetch_array($query2))
        {
               print("
                        <table border='1'>
                        <tr>
                            <td><img src='".$dbrec2['kep']."' width='100px' /></td>
                            <td>".$dbrec2['vezetek_nev']."&nbsp".$dbrec2['kereszt_nev']."</td>
                            <td>".$dbrec2['datum']."</td>
                        </tr>
                        <tr>
                            <td colspan='3'>".$dbrec2['szoveg']."</td>
                        </tr>
               ");
               if($dbrec2['user_ID'] == $_SESSION['login'])
               {
                    print("
                            <tr>
                                <td colspan='3' align='right'>
                                    <a href='modosit.php?id=".$dbrec2['bejegyzes_ID']."'>Módosítás</a>
                                    <a href='torles.php?id=".$dbrec2['bejegyzes_ID']."'>Törlés</a>
                                </td>
                            </tr>
                            </table>
                    ");
               }
               else
               {
                    print("</table>");
               }
        }
    }
    else
    {
        print("<section>Még nem osztott meg semmit.</section>");
    }
?>
<?php
}
else
{
    print("<section>Megtekintéshez kérem jelentkezzen be a fiókjába.</section>
                <a href='index.php'>Főoldal</a>");
}
?>
</body>
</html>

fal.php tartalma

<?php
session_start();
include('connect.php');
//print_r($_SESSION);
?>
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="content-type" content="text/html" />
<meta name="author" content="prometh" />
    <link rel="stylesheet" type="text/css" href="css/style.css"/>
<title>Szabó László István</title>
</head>
<body><body bgcolor="#87ADD3">
<?php
if (isset($_SESSION['login']))
{
    //$sql="SELECT * FROM users WHERE user_ID='".$_SESSION['login']."'";
   $sql="SELECT * FROM users WHERE email='".$_SESSION['login']."'";


    $query=mysql_query($sql);
    $dbrec=mysql_fetch_array($query);
?><br>
 <br>
 <br>
<div id="menu">
    <P align="center"><a href="fal.php">Üzenőfal</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    <a href="adatlap.php">Adatlap</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    <a href="ujbejegyzes.php">Új bejegyzés</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    <a href="logout.php">Kijelentkezés</a></P>
</div>

<?php
 $sql2="SELECT * FROM bejegyzes
        INNER JOIN users
        ON bejegyzes.user_ID = users.user_ID  
        ORDER BY datum DESC;";
    $query2=mysql_query($sql2);
    if(mysql_num_rows($query2)!==0)
    {
     
        while($dbrec2=mysql_fetch_array($query2))
        {
               print("
                        <table border='1'>
                        <tr>
                            <td><img src='".$dbrec2['kep']."' width='100px' /></td>
                            <td>".$dbrec2['vezetek_nev']."&nbsp".$dbrec2['kereszt_nev']."</td>
                            <td>".$dbrec2['datum']."</td>
                        </tr>
                        <tr>
                            <td colspan='3'>".$dbrec2['szoveg']."</td>
                        </tr>
               ");
               if($dbrec2['user_ID'] == $_SESSION['login'])
               {
                    print("
                            <tr>
                                <td colspan='3' align='right'>
                                    <a href='modosit.php?id=".$dbrec2['bejegyzes_ID']."'>Módosítás</a>
                                    <a href='torles.php?id=".$dbrec2['bejegyzes_ID']."'>Törlés</a>
                                </td>
                            </tr>
                            </table>
                    ");
               }
               else
               {
                    print("</table>");
               }
        }
    }
    else
    {
        print("<section>Még nem osztott meg semmit.</section>");
    }
?>
<?php
}
else
{
    print("<section>Megtekintéshez kérem jelentkezzen be a fiókjába.</section>
                <a href='index.php'>Főoldal</a>");
}
?>

</body>
</html>

modosit.php tartalma

<?php
session_start();
ob_start();
include('connect.php');
$bejegyzes=$_GET['id'];
?>
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="content-type" content="text/html" />
<meta name="author" content="prometh" />
     <link rel="stylesheet" type="text/css" href="css/style.css"/>
     <script src="//tinymce.cachefly.net/4.1/tinymce.min.js"></script>
    <script>
        tinymce.init({selector:'textarea'});
    </script>
<title>Bejegyzés módosítása</title>
</head>
<body><body bgcolor="#87ADD3"> <br>
 <br>
 <br>
 <br>
 <br>
 <br>
 <br>
  <font size="1"<PRE>                                            <h1 align="center"> MOST ÁTSZERKESZTHETED! </h1>     </PRE> </font><br>

<?php
if (isset($_SESSION['login']))
{
    $sql="SELECT * FROM users WHERE user_ID=".$_SESSION['login'].";";
    $query=mysql_query($sql);
    $dbrec=mysql_fetch_array($query);
 
    $sql3="SELECT * FROM bejegyzes WHERE bejegyzes_ID=".$bejegyzes.";";
    //echo$sql3;
    $query3=mysql_query($sql3);
    $dbrec3=mysql_fetch_array($query3);
echo "<a href='adatlap.php'>Vissza</a>";
?>
<form action="<?php print($_SERVER['PHP_SELF']);?>" method="POST">
<input type="hidden" name="bejegyzes_id" value="<?php print($bejegyzes);?>"/>
<textarea name="text"><?php print($dbrec3['szoveg']);?></textarea>
<input type="submit" name="submit" value="Posztold ki!"/>
</form>
<?php
if(isset($_POST['submit']))
{
    $text=$_POST['text'];
    $id=$_POST['bejegyzes_id'];
    $sql2="UPDATE bejegyzes SET szoveg='{$text}', datum=NOW() WHERE bejegyzes_ID=".$id.";";
    //echo($sql2);
    mysql_query($sql2) or die ("SQL hiba");
    mysql_close($kapcsolat);
    header("Location: fal.php");
}

}
else
{
    print("<section>Megtekintéshez kérem jelentkezzen be a fiókjába.</section>
                <a href='index.php'>Főoldal</a>");
}
?> <br>
 <br>
 <br>
 <br>
 <br>
 <br>
 <br>
 <br>
 <br>
 <br>
 <br>
 <br>
<hr size="3" align="center" width="850">
 <p align="center"> Copyright &#169; 2015 Szabó László István Neptun kód: BRXLXS . Minden jog fenntartva.  szli@freemail.hu. </p>
</body>
</html>

regiszter.php tartalma

<?php
session_start();
ob_start();
include('connect.php');
?>
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="content-type" content="text/html" />
<meta name="author" content="prometh" />
    <link rel="stylesheet" type="text/css" href="css/style.css"/>
<title>Regisztráció</title>
</head>
<body><body bgcolor="#87ADD3">
<br>
 <br>
 <br>
  <br>
<br>
 <font size="1"<PRE><h1 align="center"> KÉREM REGISZTRÁLJA MAGÁT! </h1>     </PRE> </font>
 <br>
 <br>


<form method="POST" action="<?php print($_SERVER['PHP_SELF']);?>" enctype="multipart/form-data">
<input type="hidden" name="MAX_FILE_SIZE" value="1048576"/>
<table>
<tr>
    <td>E-mail:</td><td><input type="text" name="email"/></td>
</tr>
<tr>
    <td>Jelszó:</td><td><input type="password" name="jelszo"/></td>
</tr>
<tr>
    <td>Vezetéknév:</td><td><input type="text" name="vezetek_nev"/></td>
</tr>
<tr>
    <td>Keresztnév:</td><td><input type="text" name="kereszt_nev"/></td>
</tr>
<tr>
    <td>Profilkép:</td><td><input type="file" name="profilkep"/></td>
</tr>
<tr>
    <td colspan="2" align="center"><input type="submit" name="submit" value="Regisztráció"/></td>
</tr>
</table>

<br>
 <br>
 <br>
  <br>
<br>
      <p align="center">  <marquee width="300" height="65" direction="up" scrollamount="1" onmouseout="this.start()" style="FILTER: Alpha(Opacity=100, FinishOpacity=0, Style=1, StartX=0, StartY=30, FinishX=0, FinishY=0)" onmouseover="this.stop()"><center><font face="verdana" color="#777777">

        - Minden mező kitöltése kötelező<br />
        - Feltölthető kép csak jpg típusú <br />
        - és maximum 1 Mb méretű.<br />
        </font></center></marquee></p>


 <br>
 <br>
<br>
 <br>  <br>
 <br>
 <br>
 <br>
<br>
 <br> <hr size="3" align="center" width="850">
 <p align="center"> Copyright &#169; 2015 Szabó László István Neptun kód: BRXLXS . Minden jog fenntartva.  szli@freemail.hu. </p>



</form>
<?php
if (isset($_POST['submit']))
{
    $email=trim($_POST['email']);
    $jelszo=sha1(trim($_POST['jelszo']));
    $vezetek_nev=trim($_POST['vezetek_nev']);
    $kereszt_nev=trim($_POST['kereszt_nev']);
    $forras=$_FILES['profilkep']['tmp_name'];
    $cel="kepek/".$_FILES['profilkep']['name'];
 
    if($_FILES['profilkep']['type'] == "image/jpeg" &&
    $email !="" &&
    $jelszo!="" &&
    $vezetek_nev!="" &&
    $kereszt_nev!="")
    {
        $sql="INSERT INTO users VALUES (0,'{$email}','{$jelszo}','{$vezetek_nev}','{$kereszt_nev}','{$cel}');";
     
        $DATA=array('email','jelszo','vezetek_nev','kereszt_nev');
        foreach($DATA as $a)
        $$a=mysql_real_escape_string($kapcsolat,$$a);
     
        mysql_query($sql) or die ("SQL hiba");
        move_uploaded_file($forras,$cel);
     
        $sql2="SELECT user_ID FROM users WHERE (email='".$email."' AND jelszo='".$jelszo."');";
        $query2=mysql_query($sql2) or die ("SQL2 hiba");
        $dbrec=mysql_fetch_array($query2);
        $_SESSION['login']=$dbrec['user_ID'];
     
        mysql_close($kapcsolat);
        header("Location:adatlap.php");
    }
    else
    {
        print("<section><font color='red'>Ellenőrizze a bevitt adatokat.</font></section>");
    }
}
?>
</body>
</html>

search.php tartalma


<html>
<head>
</head>
<body>
<?php
#mysqli kapcsolódás
$dbh = mysqli_connect(bejegyzes);

if(isset($_GET['keres'])){
# az isset függvény segítségével megvizsgáljuk,hogy létezik-e a GET tömbben lévő 'keres' kulcs
$keres = $_GET['keres'];

if(!empty($keres)){
# ellenőrizzük nem-e üres a kapott változó
$keres = trim($keres); # eltávolítjuk a szóközt az elejéről és végéről

$query = mysqli_query($dbh,"SELECT * FROM `users` WHERE `username` LIKE '%$keres%' ");

if(mysqli_affected_rows($dbh) > 0){
#amennyiben van találat kiírjuk
echo 'Találatok:';
while($sor = mysqli_fetch_assoc($query)){
echo $sor['username'];
echo '<br/>';
}
}else{
echo 'Nincs találat';
}

}else{
echo 'Üres keresőmező';
# esetleg visszairányítás:
//header('Location: kereso.html');
}

}else{
echo 'Közvetlen meghívás nem engedélyezett!';
}
?>
</body>
</html>

torles.php tartalma

<?php
include('connect.php');
$mit=(int)$_GET['id'];

$sql="DELETE FROM bejegyzes WHERE bejegyzes_ID=$mit";
mysql_query($sql);
mysql_close($kapcsolat);
header("Location:fal.php");
?>

ujbejegyzes.php tartalma

<?php
session_start();
ob_start();
include('connect.php');
?>
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="content-type" content="text/html" />
<meta name="author" content="prometh" />
     <link rel="stylesheet" type="text/css" href="css/style.css"/>
     <script src="//tinymce.cachefly.net/4.1/tinymce.min.js"></script>
    <script>
        tinymce.init({selector:'textarea'});
    </script>
<title>Új bejegyzés írása</title>
</head>
<body><body bgcolor="#87ADD3"> <br>
 <br>
 <br>
 <br>
<br>
 <br>
 <font size="1"<PRE>                                            <h1 align="center"> ÍRD MEG AZ ÜZENETET! </h1>     </PRE> </font>
 <br>
 <br>
 <br>

 <br>
 <br>
 <br>
<br>
 <br>
<?php
if (isset($_SESSION['login']))
{
    $sql="SELECT * FROM users WHERE user_ID=".$_SESSION['login'].";";
    $query=mysql_query($sql);
    $dbrec=mysql_fetch_array($query);

echo "<a href='adatlap.php'>Vissza</a>";
?>
<form action="<?php print($_SERVER['PHP_SELF']);?>" method="POST">
<textarea name="text"></textarea>
<input type="submit" name="submit" value="Posztold ki!"/>
</form>
<?php
if(isset($_POST['submit']))
{
    $text=$_POST['text'];
    $sql2="INSERT INTO bejegyzes VALUES (0,".$_SESSION['login'].",'{$text}', NOW());";
    //echo($sql2);
    mysql_query($sql2) or die ("SQL hiba");
    mysql_close($kapcsolat);
    header("Location: fal.php");
}

}
else
{
    print("<section>Megtekintéshez kérem jelentkezzen be a fiókjába.</section>
                <a href='index.php'>Főoldal</a>");
}
?><br>
 <br>
 <br>
 <br>
<br>
 <br>
 <br>
 <br>
 <br>
 <br>
<br>  <hr size="3" align="center" width="850">
 <p align="center"> Copyright &#169; 2015 Szabó László István Neptun kód: BRXLXS . Minden jog fenntartva.  szli@freemail.hu. </p>
</body>
</html>

Adattáblák létrehozása!

Otthoni gépre

Otthoni gépre webszerver telepítése – phptriad segítségével

Szerintem nagyon is sok előnyöd származhat belőle, én mindenkinek ajánlanám aki akár csak kicsit is foglalkozik webszerkesztéssel. Például sokkal gyorsabban lehet le- és feltölteni (bár erről tulajdonképpen szó sincs, hisz a saját gépeden dolgozol). Legfeljebb magadat korlátozhatod fájlméret, tárhelyméret, SQL adatbázis méret vagy akár SQL adatbázisok szempontjából – hiszen korlátlan ura vagy webszerverednek.
Mire is lehet szükség mondjuk egy php-Nuke, Postnuke vagy akár Mambo telepítéséhez?
kell ugye a webszerver (pl. az Apache)
kell PHP
kell MySQL
No most ezeket akár egyesével is le lehet tölteni, telepíteni, konfigurálni, de hát kinek van ehhez kedve és ideje, mikor van olyan megoldás mely az összeset tartalmazza és sokkal egyszerűbb az installálása is? :)
A neve: PHP Triad
Ez egy olyan ingyenes programcsomag, mely a fent említett programokat tartalmazza, egy db EXE formájában. Ennek telepítésével megússzuk a konfigurálási procedúrát, gyorsabban is végzünk.
Itt találod a honlapját: http://sourceforge.net/projects/phptriad/
Nézzük hogy zajlik a telepítése!
Első lépésben töltsd le a fenti címről, majd kezd el telepíteni.
PHPTriad otthoni webszerver telepítése - 1
PHPTriad otthoni webszerver telepítése - 2
A telepítés eredményeként a C: meghatjóba létrejön 2 új könyvtár
C:apache
C:phptriad
phptriad03_mini
Nekünk most az “apache” könyvtár tartalma lesz érdekes, ugyanis ebben van a lényeg, méghozzá az alábbi könyvtárakban:
conf
ebben a könyvtárban találhatóak az Apache webszerver beállításához szükséges konfigurációs fájlok. A fájlok bármelyik texteditorral, jegyzettömbbel szerkeszthetőek.
htdocs
e mappa tartalma lesz a webszervered gyökérkönyvtára, melyet a böngészőbe a “http://localhost“-t írva elérsz. Ha majd telepítesz mondjuk egy Postnuke-t, akkor a könyvtárat a gépeden ide kell tenni: “C:apachehtdocspostnuke“
és a böngészőben így fogod elérni: http://localhost/postnuke/
mysql
itt található mindenféle tartalom, mely a MySQL adatbázisod működését befolyásolhatja.  a “C:apachemysqlbin” könyvtárban található a Windows-os “winmysqladmin.exe“, mellyel szerintem a legkényelmesebb új adatbázist létrehozni.
phptriad telepítése 4
php
végül, de nem utolsósorban ebben a könyvtárban találhatóak a PHP-hez tartozó konfig fájlok, pl. “php.ini“.
phptriad05_mini
Indítsuk el a “winmysqladmin.exe“-t, hogy létrehozzuk a MySQL adatbázis használatához szükséges felhasználói nevet és jelszót. Ezt az 5. kép illusztrálja, nincs más dolgunk, mint kitölteni a mezőket.
phptriad06_mini
Az “OK” gomb megnyomása után elindul a kezelőfelület. A “my.ini Setup” fülnél látható, hogy a név és jelszó a későbbiekben is bármikor módosítható, illetve itt láthatóak az alapvető információk, mint pl. a kezdőkönyvtár (basedir), port (3306) stb. Ha itt bármit módosítani akarunk, akkor a bal oldalon látható “Save Modification” gombbal tudjuk elmenteni.
phptriad07_mini
A másik számunkra fontos fül a “Databases“. Itt tudunk újakakat létrehozni, módosítani illetve törölni. Az ehhez szükséges menüt a jobb egérgomb megnyomásával hozhatjuk elő.
phptriad08_mini
Válasszuk ki a legördülő menüből a “Create Database“-t, írjuk be mondjuk a “postnuke1“-t, majd a “create the database” gomb megnyomása után már készen is vagyunk.
Innentől kezdve már sínen vagyunk. Hozzuk létre mondjuk a “C:apachehtdocspostnuke1” könyvtárat, másoljuk be a letöltött csomag “html” mappájának tartalmát, és már kezdhetjük is a telepítést.
Adatbázis szerver neve: localhost // ez mindig ez lesz
Felhasználói név az adatbázishoz: admin
Adatbázis jelszó: rozsa
Adatbázis neve: postnuke1
A táblák nevének előtagja: nuke
Az adatbázis típusa: MySQL
Intranet, a honlap helyi hálózaton belüli használata: hagyd üresen


Szintaxis
A klasszikus "Helló világ".
<?php
 echo "<p>"; // egy bekezdés
 echo "Helló világ!"; // szöveg
 echo "</p>"; // záró tag
?>
A PHP utasításokat mindig egy meghatározott karaktersorral kell kezdeni és bezárni; ezek választják el a PHP kódot a program többi részétől, beleértve a HTML kódokat is.[58] Sok hibát kizárhatunk, ha programjainkban a "<?php" nyitó és a "?>" záró karaktersorokat használjuk. Ugyanis az érvényes nyitó és záró elemek a php.ini konfigurációs fájlban vannak deklarálva, amik szerverenként eltérhetnek egymástól, így előfordulhat, hogy egy szerveren nem értelmezi az interpreter a php programunkat, hanem közvetlenül a kimenetre küldi a forráskódot.[59]
A <?php és ?> jelölések XHTML-ben és XML-ben is jól formált tagek.[60] Eszerint a PHP nyelvvel kevert leírókódok maguk is jól formált XML kifejezések. A <? ?> jelölés különösen ellenjavallt, ugyanis az XML dokumentumok nyitó és záró tagja is hasonló, így egy include-olt (beágyazott) xml dokumentumot is forráskódnak értelmezne az interpreter. Ezek a következőképpen alakulhatnak:
karaktersorozat megjegyzés
<? ?>
ha a php.ini-ben be van kapcsolva az short_open_tag
<?php ?>
javasolt forma
<script language="PHP"> </script>
csak ha a php.ini-ben az asp_tags bekapcsolt állapotban van
<?=$valtozo?>
speciális eset, nem javasolt a használata, a
<?php echo $valtozo; ?>
kódrészletnek felel meg
<% %>
csak ha a php.ini-ben az asp_tags bekapcsolt állapotban van
PHP "Helló világ" változókkal:
<?php
$hellovilag ='Helló világ!';
print $hellovilag;
?>
Minden változó azonosítója a $ jellel kezdődik:
$valtozo="béka";
echo $valtozo;
Kivételt képeznek ez alól a konstansok
define("KONSTANS","123456");
echo KONSTANS;
Fontos megemlíteni, hogy PHP-ben a string típus jelölésénél az aposztrófban (' ') és az idézőjelben (" ") lévő karaktersorozat más-más jelentéssel bír. Az idézőjelek közé zárt szöveg esetében az értelmező a szövegben – a here document-ekhez hasonlóan beszúrt – változókat is keres (ezért a kiértékelése, minimálisan ugyan, de lassabb), ugyanakkor aposztróffal jelölt string típusnál ez nem valósul meg.[61]
<?php
$valtozo = 'szöveg';
$valtozo1 = 'példa $valtozo';
$valtozo2 = "példa $valtozo";
echo $valtozo1,'<br />',$valtozo2;
?>
Az eredmény pedig :
példa $valtozo
példa szöveg
A tömb indexelése – hasonlóan más C alapú nyelvekhez – 0-tól kezdődik, tehát a $tomb[1] eleme valójában a tömb 2. eleme.
A legegyszerűbb utasítás a már említett 'echo' nyelvi struktúra, vagy a visszatérési értékkel rendelkező 'print'. Ennek segítségével lehet kihasználni igazán a php-t: közvetlenül lehet írni a készülő HTML dokumentumba, akár formázott szöveget is. Az eredmény:
 <p>Helló világ!</p>
Figyeljük meg, hogy az utasításokat pontosvessző (;) zárja, hasonlóan például a C nyelvhez.[62] Ez a pontosvessző egyes esetekben (például akkor, ha az adott sort nem követi egy másik sor, vagy a kódunk egysoros), elhagyható. Ez viszont nem ajánlatos, mert ha a kódunkat szerkesztjük, és egy vagy több sorral bővítjük, akkor előfordulhat, hogy elfelejtjük kirakni a pontosvesszőt, így hibaüzenetet kapunk. Az alábbi kódok például helyesek, viszont alkalmazásuk nem célszerű.
<?php
echo "Szöveg."
?>
<?php
$valtozo = 'Szöveg';
echo $valtozo

?>

Függvények
A PHP több száz alapfüggvényt tartalmaz, a bővítésekkel több ezret. A beépített könyvtárakban levő függvények több elnevezési konvenciót követnek, de nem mindig következetesen.[67] Nincsenek párhuzamos programozást támogató függvények, de a nyelv támogatja a párhuzamosságot POSIX rendszereken.[68]
Saját függvények is definiálhatók:
function myFunction() { //deklarálja a függvény nevét, a név myFunction()
    return 'John Doe';  //visszatér a 'John Doe' értékkel
}

echo 'My name is ' . myFunction() . '!'; //kiírja a szöveget, és a myFunction()
                                         //visszatérési értékét
//a kimeneten a 'My name is John Doe!' szöveg jelenik meg (aposztófok nélkül)
A függvények nevében a PHP nem különbözteti meg a kis- és a nagybetűket. Erre figyelni kell, ez egy újabb hibaforrás.
A függvényeket nem kell prototípusozni. Definiálhatók blokkokban is, ekkor futási időben dől el, hogy a függvény létrejön-e. A függvényhívásokban kötelező kitenni a zárójelet, kivéve a paraméter nélküli konstruktorokat, amiket a new operátor hív meg.
Névtelen függvények így készíthetők:
function getAdder($x) {
    return function($y) use ($x) {
        return $x + $y;
    };
}

$adder = getAdder(8);
echo $adder(2);    // kiírja a "10" értéket
Ahol a getAdder() függvény létrehoz egy környezetet az $x változóval, ami veszi az $y addíciós argumentumot, és visszaadja a hívónak. Az ilyen függvények első osztályú objektumok, vagyis tárolhatók változókban, átadhatók paraméterként más függvényeknek, és így tovább.
A goto utasítás is használható (a PHP 5.3 óta):
function lock() {
    $file = fopen('file.txt', 'r+');
    retry:
    if (!flock($file, LOCK_EX & LOCK_NB)) {
        goto retry;
    }
    fwrite($file, 'Success!');
    fclose($file);
    return 0;
}
Ha meghívják a flock() függvényt, akkor a PHP megnyit egy fájlt, és megpróbálja lockolni. A retry: címke jelöli, hogy hova térjen vissza, ha a flock() hívása sikertelen volt, és meghívódik a goto retry;. A goto használata ugyanarra a környezetre és fájlra korlátozódik.
Osztályok
Az osztályok nevében nincs különbség a kis- és a nagybetűk között. Az objektumorientáltságot a PHP 3 vezette be, és a PHP 4 bővítette.[2] A PHP 5-ben teljesen átstrukturálták az osztályokat.[69] A korábbi verziókban a nyelv az osztályokat típusokként kezelte;[69] ennek az volt a hátulütője, hogy értékadáskor vagy paraméterátadáskor a teljes objektum átmásolódott. Az új megközelítésben kezelőkkel hivatkozzák az objektumokat, így adódnak át.[70]
Emellett vannak már abstract és final osztályok és metódusok. Az absztrakt függvények csak a prototípusukkal vannak megadva; az absztrakt osztályokban minden metódus absztrakt; a final osztályból nem lehet leszármazni, és a final metódus nem definiálható át. A konstruktorok és a destruktorok a C++-hoz hasonlóan működnek. Az öröklés a Javára emlékeztet, mivel csak egy alaposztályból lehet származni, azonban akárhány interfész implementálható. Külön interfészek valósítják meg a kapcsolatot a futtató rendszerrel. Például az ArrayAccess interfészt imlementáló osztályok objektumai használhatók tömb szintaxissal, és az Iterator vagy IteratorAggregate interfészeket implementálókra létezik a foreach nyelvi konstrukció. Mivel nincsenek virtuális táblák, ezért a static változók hivatkozás helyett névvel kapcsolódnak fordítási időben.[70]
Ha egy új objektumot a clone szóval másolnak, akkor az értelmező keresi a __clone() metódust. Ha nincs ilyen, akkor az alapértelmezett __clone()-t hívja, ami átmásolja az objektum attributumait. Ha definiálva van a __clone() metódus, akkor az lesz a felelős az új példány attributumainak beállításáért.[71]
Példa az objektumok kezelésére:
class Person {
    public $firstName;
    public $lastName;

    public function __construct($firstName, $lastName = '') {  // konstruktor, opcionális paraméterrel
        $this->firstName = $firstName;
        $this->lastName = $lastName;
    }

    public function greet() {    // metódus
        return "Hello, my name is " . $this->firstName . " " . $this->lastName . ".";
    }

    public static function staticGreet($firstName, $lastName) {  // statikus függvény
        return "Hello, my name is " . $firstName . " " . $lastName . ".";
    }
}

$he = new Person('John', 'Smith');
$she = new Person('Sally', 'Davis');
$other = new Person('Joe');

echo $he->greet();  // kiírás: "Hello, my name is John Smith."
echo '<br />';
echo $she->greet(); // kiírás: "Hello, my name is Sally Davis."
echo '<br />';
echo $other->greet();   // kiírás: "Hello, my name is Joe ."
echo '<br />';
echo Person::staticGreet('Jane', 'Doe');    // kiírás: "Hello, my name is Jane Doe."

Láthatóság
A PHP 5-ben a láthatóság is szabályozható a private és a protected kulcsszavakkal. Ha csak var van, akkor a public az alapértelmezett. A publicnak deklarált attribútumok és metódusok akárhonnan hozzá férhetők; a protected adattagok csak az osztályból és a leszármazottakból láthatók; a private-nak deklarált adattagok csak magából az osztályból érhetők el. A láthatóság szabályozása osztályszintű, például két különböző, de azonos osztályú objektum hozzáfér egymás összes adattagjához


Nincsenek megjegyzések:

Megjegyzés küldése