Szeretnél ingyen blogot? Regisztrálj és szerezd be saját blogodat ingyen. Folyamatosan bővülő sablonok, bővítmények.
Az array() függvény segítségével tömböt hozhatunk létre, mint látni fogjuk tömböt többféleképpen is létrehozhatunk, egy dolog fix, a tömb elemeinek
mindig lesz kulcsa és értéke.
Egy dimenziós tömbök:
Íme egy példa:
$arr = array(“egy” => 1, 5 => “öt”); echo $arr["egy"]; // 1 echo $arr[5]; // öt
Látható a kulcs string vagy integer lehet, míg az érték bármilyen típusú lehet.
$tomb = array(); $tomb[0] = “Hello”; $tomb[1] = “világ”; $tomb[] = “!”;
Ennél a példánál látható, hogy a tömb első két elemének indexét mi adtuk meg, a harmadiknál nem adtunk meg indexet, itt a PHP hozza létre az indexet, automatikusan
a tömb végére teszi az új elemeket.
Több dimenziós tömbök:
$user = array(“adat” => array(‘id’ => 5, ‘name’ => ‘teszt user’, ‘email’ => ‘teszt@teszt.hu’)); echo $user["adat"]['id']; // 5 echo $user["adat"]['name']; // teszt user echo $user["adat"]['email']; // teszt@teszt.hu
Ez a példa létrehozott 1 több dimenziós tömböt, pontosabban 2 dimenziósat.
Ebben a példában 1 egyszerű beléptető rendszert hozunk létre, ami MySQL nélkül dolgozik, egyszerű file-ból veszi az adatokat.
File-ok:
- index.php – ez végzi a beléptetést, ebbe hívjuk be a tartalmat, ha be van lépve a felhasználó
- auth.php – ebben tároljuk a felhasználóneveket és a hozzá tartozó jelszavakat “Linux stílusban” példa: ‘felhasznalo:jelszava’
index.php
<?php
/* PHP beléptetés kulso file használatával, linux style */
header (‘Content-type: text/html; charset=utf-8′);
session_start();
/* Kijelentkezés */
if( isset( $_REQUEST['kijelentkezes'] ) ) {
session_destroy();
session_start();
}
/* Beléptető függvény hívása */
if( !empty( $_POST['nev'] ) && !empty( $_POST['jelszo'] ) ) Beleptetes( $_POST['nev'], $_POST['jelszo'] );
/* Ha belépett a felhasználó/ha nem */
if( isset( $_SESSION['belepett'] ) ) {
require(‘szerkeszto.php’);
}
else {
?>
<html>
<head>
<title></title>
</head>
<body onload=”javascript: document.getElementById(‘nick’).focus()”>
<form method=”post” action=”index.php” style=”margin: 20px; border: 1px solid black; padding: 5px; width: 150px;”>
<input type=”text” name=”nev” id=”nick” style=”width: 145px; margin-bottom: 5px;” /><br />
<input type=”password” name=”jelszo” style=”width: 145px; margin-bottom: 5px;” /><br />
<input type=”submit” /><br />
</form>
</body>
</html>
<?php
}
/* Beléptető függvény */
function Beleptetes( $nev, $jelszo ) {
/* kiolvassuk a file-bol a felhasználokat */
$fh = fopen(‘auth.php’,'r’);
while(!feof($fh))
{
$users[] = fgets($fh);
}
fclose($fh);
/* felhasználók listájának rendezése */
unset( $users[0] );
unset( $users[count( $users )] );
sort( $users );
/* megvizsgáljuk, hogy a beírt adatok passzolnak e */
for( $i = 0; $i < count( $users ); $i++ ) {
$tmp = explode( ‘:’, $users[$i] );
if( ( trim( $tmp[0] ) == $nev ) && ( trim( $tmp[1] ) == $jelszo ) ) {
$_SESSION['belepett'] = 1;
echo ‘<script type=”text/javascript”>window.location=”index.php”</script>’;
}
}
}
?>
auth.php
<?php tesztuser:123456789 masikuser:asdfghjkl admin:adminjelszo ?>
Mint látható nem egy nagyon bonyolult dolog, viszont gyorsan tudunk hozzáadni felhasználót ha szükséges.
Mire is jó 1 template rendszer?
Teljesen külön tudjuk választani a design-t a programkódtól, ami nagyban javítja az átláthatóságot, illetve a kezelhetőséget. Ebből kifolyólag 1 ilyen rendszerrel elég gyorsan összetudunk rakni egyszerű oldalakat a saját moduljaink segítségével. Ezért aki viszonylag sok oldalt csinál annak ajánlom, hogy készítsen magának 1-et, a saját moduljaival(Te tudod, hogy miket használsz gyakran), illetve olyan oldalaknál lehet hasznos ahol többféle designból lehet választani.
Nézzük hogyan működik:
- létrehozunk 1 template file-t ami a design-t tartalmazza, ebbe teszünk speciális tag-eket amiknek a helyére betöltjük a moduljainkat
- index.php-val feldolgozzuk
- megjelenítjük az oldalt
template.html:
<html>
<head>
<title>{cim}</title>
</head>
<body>
<div id=”header”></div>
<div id=”menu”>{menusor}</div>
<div id=”tartalom”>{tartalom}</div>
</body>
</html>
index.php:
<?php
$modul = array(
‘{cim}’ => ‘content/main/titles.inc.php’,
‘{tartalom}’ => ‘content/main/body.inc.php’,
‘{menusor}’ => ‘content/main/menu.inc.php’,
);
$content = file_get_contents(‘template.html’);
echo csere( $content, $modul );
//file feldolgozás
function feldolgoz($file) {
ob_start();
include($file);
$buffer = ob_get_contents();
ob_end_clean();
return $buffer;
}
//tag-ek cseréje tényleges tartalomra
function csere( $data, $modul ) {
foreach( $modul as $tag => $link ) {
if( stristr( $data, $tag ) ) {
$data = str_replace( $tag, feldolgoz( $link ), $data);
}
}
return( $data );
}
?>
Mit is csinál ez a pár sor?
mikor beírjuk a http://teszt-domainem.hu/-t akkor az index.php töltödik be, ami rögtön megnyitja a template.html file-t ami tartalmazza a design-t, majd lecseréli benne a saját tag-eket a hozzá párosított php file-ra.
Ha megnézzük a böngészőben a file forrását akkor ilyesmit kell látnunk:
<html> <head> <title>cim amit megadtam a content/main/titles.inc.php fileban</title> </head> <body> <div id=”header”></div> <div id=”menu”> <ul> <li>menu1</li> <li>menu2</li> </ul> </div>
Lássuk a kódot:
<?php
//proba() függvényünk
function proba( $parancs ) {
$dbh = mysqli_connect(“”, “user”, “jelszo”, “adatbazis”) or die( mysql_error() );
if( !$result = mysqli_query( $dbh, $parancs ) ) {
throw new Exception(“Érvénytelen MySQL Parancs!”);
}
else return $result;
mysqli_close( $dbh );
}
//itt teszteljük a proba()-t ha hiba történik szeretnénk saját hibaüzenetet generálni
try {
$dbh = mysqli_connect(“”, “user”, “jelszo”, “adatbazis”) or die( mysql_error() );
print_r( mysqli_fetch_assoc( proba(“SELECT id FROM hirek”) ) );
}catch( Exception $e ) {
echo ‘Hiba történt: ‘, $e->GetMessage();
}
mysqli_close( $dbh );
?>
Ebben a példában, létrehozunk 1 proba() függvényt amelyben megpróbálunk végrehajtani 1 MySQL lekérdezést, ha nem sikerülne végrehajtani akkor hibaüzenetet dobunk a felhasználónak.
A script fő részében behívjuk a proba()-t ha a proba hibát jelez akkor kiiratjuk a hibát, ha nem akkor mindenki boldog és az SQL lekérdezésünk szépen lefut!:)
Ezzel a pár sorral létrehozhatjuk a saját RSS hírforrásunkat, nincs másra szükségünk, mint 1 mysql adatbázisra amiben tároljuk a híreinket és 1 kis kreativitásra
A kód:
<?php
//rss_info.php
header(‘content-type: text/xml’);
header(‘content-type:text/html;charset=utf-8′);
echo “<?xml version=\”1.0\” encoding=\”UTF-8\”?>”;
echo “<rss version=\”2.0\”>”;
echo “<channel>
<title>Saját Hírforrás</title>
<link>http://sajat-oldalam.hu/</link>
<description>Saját hírforrásom leírása</description>”;
$dbh = mysqli_connect(“”,”user”,”jelszo”,”adatbázis”) or die( mysqli_error() );
$sql = mysqli_query($dbh, “SET NAMES utf8″);
$sql = mysqli_query($dbh, “SELECT begin,title FROM hirek WHERE lathato = 1″) or die( mysqli_error() );
while( $sor = mysqli_fetch_assoc( $sql ) ) {
echo “<item>\r\n”;
echo “<title>”.$sor['title'].”</title>\r\n”;
echo “<link>http://sajat-oldalam.hu</link>\r\n”;
echo “<description>”.html_entity_decode( strip_tags( $sor['begin'] ), ENT_QUOTES, “utf-8″ ).”</description>\r\n”;
echo “</item>\r\n”;
}
echo “</channel>\r\n”;
echo “</rss>”;
mysqli_close( $dbh );
?>
ennyi lenne, a html_entity_decode azért került bele, mert TinyMCE-t használok a hírek beviteléhez, és az lecseréli az ékezetes karaktereket, ezzel visszacserélem őket
ezután annyit kell tennünk, hogy elhelyezünk 1 linket az oldalunkon a jól ismert RSS logóval és 1 linkkel ami erre a PHP file-ra mutat.
Nézzük meg, hogyan küldhetünk HTML tartalmú E-Mail-t könnyen.
Létrehozunk 1 osztály ami tartalmazza a lényeget:
html_email.class.php
<?php
class HTMLemail
{
function Send($to, $subject, $content)
{
$message=’<html>
<head>
<meta http-equiv=\”Content-Type\” content=\”text/html\” charset=\”windows-1250\”>
<meta content=\”MSHTML 6.00.2600.0\” name=GENERATOR>
</head>
<body>
‘.$content.’
</body>
</html>’;
$from=”From: PHP teszter<noreply@php-teszter.hu>\r\?n”;
$from.=”MIME-Version: 1.0″.”\r\n”;
$from.=”X-Mailer: PHP/” . phpversion().”\n”;
$from.=”Content-type: text/html; charset=windows-1250″.”\r\n”;
mail($to, $subject, $message, $from) or print(“<center><b>Nem sikerult elkuldeni!</b></center>”);
}
}
?>
Miután elmentjük csak annyit kell tennünk, hogy szükség esetén meghívjuk
proba.php
<?php require( ‘html_email.class.php’ ); $level = new HTMLemail(); $tartalom = ‘<img src=”http://test-domain.hu/logo.png” /><h3>Teszt HTML levél!</h3><p>Ez egy bekezdés</p><p>Ez még egy.</p><p style=”color: blue; font-size: 10px;”>Ez az aprobetűs rész.</p>’; $level->Send(‘neked@kuldom.hu’,'teszt HTML level’,$tartalom); ?>
Megjegyzés: a $tartalom változóba kerül a levél törzse, ebben kell megadni a formázott HTML tartalmat.
Ezzel a módszerrel Gmail-ben, Freemail-ben, Thunderbird-ben és ami miatt kidolgoztam az egészet Outlook-ban is megjelenik a szépen formázott HTML levelünk, és ha ezekben működik nagy valószínűséggel máshol is menni fog.
Programozással foglalkozó fórumokon rengetegszer találkozok karakterkódolással kapcsolatos problémákkal.
Lássuk a megoldást:
Egyszerűbb mint gondolnánk, a lényeg az, hogy mindenhol ugyanazt a karakterkódolást használjuk.
Esetünkben legyen az utf-8:
Először is állítsuk be a .php file-unk kódolását UTF-8-ra, ezt a legegyszerübben a HTML editorunkban tudjuk megtenni, Komodo Edit-ben az Edit->Current File Settings menüpont alatt tehetjük meg.
Ezután jöhet az adatbázisunk, ennek is ugyanazt a karakterkódolást kell használnia, jelen esetben az utf-8-at. Ennek a beállítása a legegyszerűbben phpmyadminból érhető el, ahol is a használni kivánt adatbázis és azon belül táblák “illesztés”-ét kell beállítanunk utf8-bin-re.
A végső lépés pedig a php scriptünk létrehozása:
<?php //PHP-Mysqli cikk header (‘Content-Type: text/html; charset=UTF-8′); $dbh = mysqli_connect(“”, “felhasznalo”, “jelszo”, “adatbazis”); mysqli_query($dbh, “SET CHARACTER SET utf8″); mysqli_query($dbh, “SET NAMES utf8″); $sql = mysqli_query($dbh, “SELECT * FROM contents where content_id=1″) or die( mysqli_error() ); $adat = mysqli_fetch_assoc( $sql ); echo $adat['content']; mysqli_close( $dbh ); ?>
Ezek után az ékezetes karaktereknek is csodaszépen meg kell jelennie az oldalunkon!
Mi is az a mysqli()?
A válasz egyszerű mysqli = MySQL Improved Extension.
Annyit érdemes róla tudni nagy körvonalakban, hogy a mysql() továbbfejlesztett változata, ajánlatos ezt használni helyette.
Ha valakit komolyabban érdekel nézzen körül ITT
Nézzünk 1 példát:
<?php
//PHP-Mysqli cikk
$dbh = mysqli_connect(“”, “felhasznalo”, “jelszo”, “adatbazis”);
$sql = mysqli_query($dbh, “SELECT * FROM tabla”) or die( mysqli_error() );
while( $sor = mysqli_fetch_assoc( $sql ) ) {
echo $sor['mezo'];
}
mysqli_close( $dbh );
?>
láthatjuk, hogy alig tér el a mysql()-től.
Kezdjük rögtön 1 példával:
<?php
//PHP-Mysql cikk
$dbh = mysql_connect(“”,”felhasznalo”, “jelszo”) or die( mysql_error() );
mysql_select_db(“adatbazis”);
$sql = mysql_query(“SELECT mezo FROM tabla”);
while( $sor = mysql_fetch_assoc( $sql ) ) {
echo $sor['mezo'];
}
mysql_close($dbh);
?>
Magyarázat soronként:
- $dbh nevű változóval csatlakozunk az adatbázishoz mysql_connect() függvényben átadott paraméterek segítségével
- kiválasztjuk az adatbázist amit használni szeretnénk
- létrehozzuk a lekérdezést
- while() ciklussal végig lépkedünk a kapott tömbön(jelen esetben assszociatív tömbön)
- kiiratjuk a lekérdezés egyetlen mezőjét
- végül lezárjuk az adatbázis kapcsolatot.
A következő példában szépítünk rajta:
<?php
//PHP-Mysql cikk
$dbh = mysql_connect(””,”felhasznalo”, “jelszo”) or die( mysql_error() );
mysql_select_db(”adatbazis”);
$sql = mysql_query(”SELECT mezo, mezo2 FROM tabla”);
echo ‘<table>’;
echo ‘<tr><td><strong>Mezo</strong></td><td><strong>Mezo2</strong></td></tr>’;
while( $sor = mysql_fetch_assoc( $sql ) ) {
echo ‘<tr><td>’. $sor['mezo'] .’</td><td>’. $sor['mezo2']. ‘</td></tr>’;
}
echo ‘</table>’;
mysql_close($dbh);
?>
Ebben a példában a kapott rekordokat beillesztjük 1 HTML táblázatba.
A mysql()-el nem foglalkozunk többet a cikkekben, mivel van neki 1 tovább fejlesztett változata, amit mysqli()-nek hivnak a továbbiakban ezzel foglalkozunk, komolyabb példákon keresztül!