Egyszerű vendégkönyv II. rész - Üzenetek írása

'09 nov 27. pé 16:20
Írta: kera

Az előző részben átbeszéltük, hogy hogyan tudunk olvasni egy fájlból és ,hogy hogyan tudjuk felosztani kezelhető részekre a kiolvasott adatokat. Ebben a részben átvesszük, a fájlba írás részleteit. Emellett a felhasználó által küldött adatokat le is fogjuk ellenőrizni.

Kezdjük azzal, hogy létrehozzuk a formot amivel a felhasználók üzenetet küldhetnek.
Az eddig beírt PHP kód ( ?> jel ) után írjuk a következőt:
<form action="index.php" method="post">
Neved: <input type="text" name="form_user">
Üzeneted: <textarea name="form_uzenet"></textarea>
<input type="submit" value="küldés">
</form>


Ez egy egyszerű form, az action paraméterben a célt határozzuk meg, az itt megadott lapra fogja küldeni az adatokat és ezt az odlalt is fogja betölteni a böngésző, mi az index.php-t adtuk meg vagyis ugyan erre a lapra küldjök vissza a kitöltött mező értékeit ahol éppen vagyunk.
Az input mező egy sima text, az az szöveges mező, name paramétere a "form_user", ezután egy textarea következik "form_uzenet" névvel. A form lküldése után ezekre a nevekre hivatkozva tudjuk majd elérni a továbbított értékeket, amiket a mezőkbe írtunk.
A végén még ey inupt mezű, submit típussal, ez a gomb amire, ha rányomunk akkor elküldésre kerül a form. Value értéke "küldés" ez a felirat jelenik meg a gombon.

Mentsük el a php fájlt és próbáljuk ki. Látnunk kell a böngészőben a formot, ha rákattintunk a küldés gombra akkor a lap újra betöltődik, sőt már a mezők értékei is továbbítódnak, de ezt még nem láthatjuk mivel nem írtunk rá semmi kezelést, ez következik most.

Ugorjunk a PHP-fájlunk legelejére a $file = "mess.txt"; után.
Először is meg kell tudnunk, hogy a felhasználó küldött-e foromot. Meg kell vizsgálnunk, hogy létezik-e post al érkező form_user és form_uzenet. Az ilyen vizsgálatra az isset() függvény szolgál, ami a változó létezését vizsgálja, ha létezik a benne megadott változó akkor igaz értékkel tér vissza.
Utána az is meg kellene vizsgálnunk, hogy van-e ezeknek tartalmuk. Ne bonyolítsuk túl a dolgot, vegyük egy kalap alá, hiszen hiába jöttek meg a változók, ha nincs tartalmuk, nem foglalkozunk velük, így elég csak annyit vizsgálni, hogy nem üresek-e.
Erre a vizsgálatra az empty() függvényt fogjuk használni, ami akkor tér vissza igaz értékkel, ha a benne megadtott változó üres, ezért az állítást tagadnunk kell. ( !empty ) Vagyis azt állítjuk a feltételben, hogy "nem üres a változó" így ha nem üres akkor továbbengedjük, ha pedig igen akkor nem foglalkozunk vele.
<?php if(!empty($_POST['form_user']) && !empty($_POST['form_uzenet'])){
 
	//ide jön a további programrész
 
} ?>

A blokk innentől csak akkor fog lefutni, ha minden mezőben írtunk valamit és úgy küldtök el a formot.
Most az //ide jön a további programrész helyére írjuk a további kódot.
Először is rakjuk össze a beírandó adatot, az előző részből megismert karakterekkel illesszük össze a darabokat, a leg elejére tegyük a dátumot a date() függvény segítségével és a $beirasra változóban tároljuk el ezeket.
<?php $beirasra = date("Y-m-d H:i:s")."¤".$_POST['form_user']."¤".$_POST['form_uzenet']."×"; ?>

Most el kell tárolnunk az adatokat.
Megnyitjuk mess.txt fájlt az fopen() függvénnyel, mégpedig hozzáfűzésre (a) és a hivatkozási számát az $irando változóban tároljuk.
Ezután az fwrite() segítségével írunk bele. Két pramétert vár, az első az irandó fájl hivatkozási száma amit az $irando változóba eltettünk, a második pedig az adat amit bele szeretnénk írni.
A végén bezárjuk a fájlt az fclose() függvénnyel.
<?php $irando = fopen($file, 'a');
fwrite($irando, $beirasra);
fclose($irando); ?>


Ha minden jól csináltunk, igazából készen is vagyunk, a vendégkönyvünk működőképes.
Egy-két apróságon még változtatunk, hogy tökéletes legyen a dolog.
Menjünk lejjebb, ahol a kiolvasást csináltuk, mégpedig az $uzenetek = explode("×",$tartalom); után írjuk a következőt:

<?php krsort($uzenetek); ?>

A krsort() függvény az adott tömböt, kulcsa szerint visszafelé rendezi sorba, így elértük, hogy a legutoljára beírt üzenet lesz legfelül.
Van még két apróság, az egyik, hogy hiába ütünk entert a szövegmezőbe, ez elküldés után nem fog megjelenni. Ezt az nl2br() függvénnyel orvosolhatjuk, ez a sortöréseket lecseréli <br \> tegekre, amit a böngésző már értelmezni tud.
A másik, hogy ha valaki html kódokat fog írni a szövegmezőbe és azt elküldi, ugyan úgy fog megjelenni a böngészőben, mintha te magad írtad volna be, így akár javascripteket is futtathatnak a lapunkon, enne kivédésére a htmlspecialchars() függvényt alkalmazzuk, mely átalakítja speciális karaktereket úgy, hogy azokat a böngésző nem tudja lefordítani, de számunkra úgy jelennek meg ahogy az beírtuk.
Vigyázzunk, hogy előbb alkalmazzuk a htmlspecialchars()-t, és utána az nl2br()-t, mert így a <br \> teget sem tudná értelmezni a böngésző.
Ezeket a függvényeket az $uzenet[2] tömbelemen alkalmazzuk, szóval cseréljük le erre:
<?php nl2br(htmlspecialchars($uzenet[2])) ?>


Most már készen is vagyunk. Nem a legbiztonságosabb, de egyszerű vendégkönyvként jól használható.

A teljes forrás (tesztelve):

<?php
 
$file = "mess.txt";
 
if(!empty($_POST['form_user']) && !empty($_POST['form_uzenet'])){
 
$beirasra = date("Y-m-d H:i:s")."¤".$_POST['form_user']."¤".$_POST['form_uzenet']."×";
 
$irando = fopen($file, 'a');
fwrite($irando, $beirasra);
fclose($irando);
 
 
}
 
 
 
$tarol = fopen($file, "r");
 
while (!feof($tarol)) {
  $tartalom .= fread($tarol, 1024);
}
 
fclose($tarol);
 
$uzenetek = explode("×",$tartalom);
 
krsort($uzenetek);
 
foreach($uzenetek as $uzenet){
 
	$uzenet = explode("¤",$uzenet);
	if(count($uzenet)==3){
	
		echo "Dátum: " . $uzenet[0] . "";
		echo "Felhasználó: " . $uzenet[1] . "";
		echo "Üzenet: " . nl2br(htmlspecialchars($uzenet[2])) . "<hr>";
	
	}
 
}
 
?>

<form action="index.php" method="post">
Neved: <input type="text" name="form_user">
Üzeneted: <textarea name="form_uzenet"></textarea>
<input type="submit" value="küldés">
</form>

Kommentek

Hozzászóláshoz be kell jelentkezned! Ha még nem lennél regisztrálva itt megteheted.


Ehhez a cikkhez még nem írtak kommentet!
RSS
Összes hozzászólás: 1162, naponta átlag 4.12. Regisztrált felhasználók: 47
Utolsó 5 regisztrált felhasználó: misike7070, Kislakki, hunprobalazs, Dr_NiGGa, örökzöld
Copyright © 2009 tutorialok.hu - Tutorialok, segédletek sok kategóriában - Adatvédelmi nyilatkozat | Kapcsolat | Átváltom.com