( Tomasz Go³embiewski )
W niniejszym artykule chcia³ bym zaprezentowaæ aplikacjê "Kartki Internetowe" napisane w naszym ulubionym jêzyku skryptowym czyli w PHP przez moj± skromn± osobê.
1.Czego nam potrzeba ¿eby zacz±æ:
Serwera z zainstalowanym php z obs³ug± Mysqla.
Bazê danych Mysql - ja mam wersje 3.23.10 akurat,
Jak zainstalowaæ wy¿ej wymienione oprogramowanie znajdziecie tu <link do artyku³ów o instalacji :) najlepiej>
Je¶li mamy ju¿ powy¿sze programy zainstalowane, czas wyja¶niæ zasadê dzia³ania naszego maleñkiego serwisu.
2. Zasada dzia³ania.
Jest bardzo prosta. Dzia³anie programiku sprowadza siê do tego ¿e w wypadku wybrania jakiej¶ kartki przez u¿ytkownika zapisujemy do bazy danych wszystkie dane wpisane przez wysy³aj±cego kartkê w formularzu wysy³ania, wraz z wygenerowanym losowym numerem. Odbiorcy kartki wysy³amy rzeczony numer wraz z adresem strony, która na podstawie numeru wy¶wietli odpowiedni± kartkê razem z jej danymi, zapisanymi przez wysy³aj±cego w bazie danych.
To tyle ogólnego opisu teraz szczegó³y.
Nasza aplikacja sk³ada siê z siedmiu skryptów. Podzieli³em je na dwie grupy.
Pierwsza z nich to skrypty bezpo¶rednio wy¶wietlaj±ce wyniki swojego dzia³ania u¿ytkownikowi.
Druga grupa to pliki w katalogu include, które to s± do³±czone do plików z 1 grupy w miarê potrzeb.
Pierwsza grupa to pliki:
index.php; ogladnij.php; wybierz.php; zapodaj.php
Druga grupa:
config.php;functions.php;naglowek.php
Co robiê poszczególne pliki.
index.php - jest to skrypt który jak sama nazwa wskazuje jest uruchamiany jako pierwszy, wy¶wietla on wszystkie zawarte w bazie danych kartki jako miniaturki, które s± linkami do strony, gdzie mo¿na ogl±dn± du¿± wersjê kartki oraz wys³aæ j± komu¶.
ogladnij.php - strona gdzie mo¿na ogl±dn±æ du¿± wersjê kartki
wybierz.php - formularz wysy³aj±cy dana kartkê
zapodaj.php - strona wy¶wietlaj±ca odbiorcy przes³an± mu kartkê
config.php - skrypt ze zmiennymi konfiguracyjnymi aplikacji: polecam wszystkim umieszczanie takiego skryptu w pisanych aplikacjach.
functions.php - przydatne i do³±czane funkcje
naglowek.php - nag³ówek i stopka do³±czana na ka¿dej stronie.
3.Baza danych
zawarto¶æ pliku kartki.sql:
################################################################################
# MySQL dump 7.0
#
# Host: localhost Database: kartki
#--------------------------------------------------------
# Server version 3.23.10-alpha-log
#
#
# Table structure for table 'data'
#
CREATE TABLE data (
random_id varchar(50) DEFAULT '' NOT NULL,
kartka_id int(4),
email_from varchar(100),
email_for varchar(100),
naglowek varchar(100),
tresc text,
podpis varchar(50),
data timestamp(6),
PRIMARY KEY (random_id)
);
#
# Table structure for table 'obrazki'
#
CREATE TABLE obrazki (
id int(6) NOT NULL auto_increment,
kategoria varchar(50),
autor varchar(100),
tytul varchar(30),
nowosc tinyint(4),
ile int(16) DEFAULT '0',
PRIMARY KEY (id)
);
#
# Dumping data for table 'obrazki'
#
INSERT INTO obrazki VALUES (1,'calusne','... z krañców ¦wiata','Autor',0,-10);
INSERT INTO obrazki VALUES (2,'bimbaly','Piraci','Autor',NULL,0);
Jak widaæ do dzia³ania naszej aplikacji wystarczaj± dwie tabele w bazie danych: 'data' i 'obrazki'.
W tabeli obrazki zawarte s± wszystkie nasze kartki i ich dane, Ja przyj±³em zasadê ¿e numer ID jest jednocze¶nie nazw± danej kartki, jest to chyba najprostszy sposób przechowywania informacji o pikach graficznych (i nie tylko) w bazie danych. Ka¿da dodana kartka musi mieæ numer taki jak nazwa pliku j± zawieraj±ca.
Tyle mojego komentarza, nie bêdê tu opisywa³ wszystkich skryptów po kolei poniewa¿ stara³em siê
opisaæ wszystko w ¼ród³ach bardzo dok³adnie. Gor±co polecam wszystkim tworzenie pliku konfiguracyjnego, w którym umieszcza siê zmienne powtarzaj±ce siê w ca³ej aplikacji, u³atwia to sprawê gdy trzeba np. Dostosowaæ aplikacje do pracy na innym hoscie.
Wszystkie skrypty s± banalnie proste jedyny troszkê d³u¿szy to skrypt wysy³aj±cy kartkê.
<?
global $random_id;
$random_id = md5(uniqid(rand())); //generowanie unikalnego numeru
include("include/config.php"); #plik configuracyjny ze zmiennymi uzywanymi w calej aplikacji
header("Content-type: text/html; charset=iso-8859-2".$strona_kodowa.""); #specjalnie dla netscape wysylamy naglowek
#ze strona kodowa, miewa on czasem z tym problemy
include("include/functions.php"); #dolaczamy pliki z naglowkiem , funkcjami przydatnymi
include("include/naglowek.php");
naglowek("Kartki - wersja dla serwisu http://webdev.zone.pl/",0); #ta funcja wyswietli caly naglowek naszej strony
######################################################################################################
# Zawartosc strony
######################################################################################################
if($poslij==1) #sprawdznie czy formularz "submitowano"
{ #jesli tak to umieszczamy wybrana kartke wraz z trescia i danymi w tabeli data
if(strlen($email_from)>0&&strlen($email_for)>0&&strlen($tresc)>0&&strlen($naglowek)>0&&strlen($podpis)>0)
{
$zaputanie="insert into data (random_id,kartka_id,email_from,email_for,naglowek,tresc,podpis)values ('$random_id','$kartka_id','$email_from','$email_for','$naglowek','$tresc','$podpis')";
$result=conn($zaputanie);
}
else
die("<h3 align=center><font size=2 color=orange><br><br><br><br><br><br><br><br><br><br>Proszê wype³nij poprawnie formularz!<br><br><a href=\"javascript:history.go(-1)\">Powrót</a></h3></font></body></html>");
if($result)
{
poslij_kartke($email_for,$email_from,$message,$naglowek);#wysylanie kartki i potwierdzenia
die("<h3 align=center><font size=2 color=orange><br><br><br><br><br><br><br><br><br><br>Kartka zosta³a wys³ana!
<br><br><a href=\"javascript:window.close()\">Zamknij</a></h3></font></body></html>");
}
else
die("Wystapi³ ca³kiem niespodziewany b³±d! :P!</body></html>");
}
else #wyswietlanie calej strony po wejsciu na nia
print("<FORM method='post' action=\"wybierz.php?poslij=1&naglowek=".urlencode($naglowek)."&kartka_id=".urlencode($kartka_id)."&email_from=".urlencode($email_from)."&email_for=".urlencode($email_for)."&tresc=".urlencode($tresc)."&podpis=".urlencode($podpis)."\">
");
#uciekamy z PHP bo za duzo print i echo by trzeba robic a to zaciemnie obaz sytuacji
?>
<br>
<div><font face=verdana size=1 color=orange><b>
Dla:</font></b>
</div>
<table>
<tr>
<td width="40%" align="right" valign="middle" class="poslij"><font face=verdana size=1 color=orange><b>Imiê i nazwisko: </font></b></td>
<td width="60%" align="left" valign="middle" ><input class="form" type="text" size="25" maxlength=100 name="naglowek">
</td>
</tr>
<tr>
<td width="40%" align="right" valign="top" class="poslij"><font face=verdana size=1 color=orange><b>e-mail: </font></b></td>
<td width="60%" align="left" valign="middle" >
<input class="form" type="text" name="email_for" maxlength="100" size="25">
</td>
</tr>
<tr>
<td colspan="2"> </td>
</tr>
<tr>
<td colspan="2" align="left" valign="middle" ><font face=verdana size=1 color=orange><b>Od:</b></font></td>
</tr>
<tr>
<td width="40%" align="right" valign="middle" class="poslij"><font face=verdana size=1 color=orange><b>Imiê i nazwisko: </font></b></td>
<td width="60%" align="left" valign="middle" ><input class="form" type="text" maxlength="100" name="podpis" size="25" ></td>
</tr>
<tr>
<td width="40%" align="right" valign="middle" class="poslij"><font face=verdana size=1 color=orange><b>e-mail: </font></b></td>
<td width="60%" align="left" valign="middle" ><input class="form" type="text" maxlength="100" name="email_from" size="25" ></td>
</tr>
<tr>
<td colspan="2"> </td>
</tr>
<tr>
<td colspan="2" align="left" valign="middle"><font face=verdana size=1 color=orange><b>Tre¶æ:</font></b></td>
</tr>
<tr>
<td colspan="2" align="center" valign="middle" ><textarea class="area" name="tresc" rows="2" cols="31"></textarea></td>
</tr>
<td width="40%"></td>
<td align="right" width="60%"><font face=verdana size=1><input class="baton" type=submit value=Wy¶lij></font>
</td>
</tr>
<tr>
<td align="center" valign="middle"> </td>
</tr>
<tr>
</tr>
</table>
</form>
</body>
</html>
#######################################################################################################################
Szczerze mówi±c nie wiem co mo¿e sprawiæ tu problem :), ale chcê zwróciæ uwagê na jeden motyw. Skrypt sk³ada siê z dwóch czê¶ci: pierwsza to nasz formularz wy¶wietlany zaraz po za³adowaniu strony, druga czê¶æ skryptu jest uruchamiana w momencie przes³ania formularza na serwer, w formularzu wysy³amy zmienn± $poslij i nadajemy jej warto¶æ 1.
#############################################################################
if($poslij==1) #sprawdznie czy formularz "submitowano"
{ #jesli tak to umieszczamy wybrana kartke wraz z trescia i danymi w tabeli data
if(strlen($email_from)>0&&strlen($email_for)>0&&strlen($tresc)>0&&strlen($naglowek)>0&&strlen($podpis)>0)
{
$zaputanie="insert into data (random_id,kartka_id,email_from,email_for,naglowek,tresc,podpis)values ('$random_id','$kartka_id','$email_from','$email_for','$naglowek','$tresc','$podpis')";
$result=conn($zaputanie);
}
else
die("<h3 align=center><font size=2 color=orange><br><br><br><br><br><br><br><br><br><br>Proszê wype³nij poprawnie formularz!<br><br><a href=\"javascript:history.go(-1)\">Powrót</a></h3></font></body></html>");
if($result)
{
poslij_kartke($email_for,$email_from,$message,$naglowek);#wysylanie kartki i potwierdzenia
die("<h3 align=center><font size=2 color=orange><br><br><br><br><br><br><br><br><br><br>Kartka zosta³a wys³ana!
<br><br><a href=\"javascript:window.close()\">Zamknij</a></h3></font></body></html>");
}
else
die("Wystapi³ ca³kiem niespodziewany b³±d! :P!
</body></html>");
}
Jak widaæ druga czê¶æ skryptu jest przed pierwsz± :). Najpierw sprawdzamy czy zmienna $poslij ma
warto¶æ 1 je¶li nie to wy¶wietlamy formularz, je¶li tak to realizujemy 2 czê¶æ, która wysy³a maile i dodaje do bazy kartkê, wraz ze wszystkimi jej danymi potrzebnymi by adresat móg³ sobie przeczytaæ
¿yczenia i ogl±dn±æ sobie swoj± kartkê.
Kolejny motyw :)
Sprawdzanie czy wszystkie pola formularza s± wype³nione:
if(strlen($email_from)>0&&strlen($email_for)>0&&strlen($tresc)>0&&strlen($naglowek)>0&&strlen($podpis)>0)
Najprostsze z mo¿liwych sprawdzenie bez weryfikacji danych (np. email'a), sprawdzamy tylko czy co¶ w ogóle jest wpisane.
I to chyba ju¿ wszystko. Skrypty s± naprawdê banalnie proste i chyba dobrze skomentowane.
W razie jaki¶ uwag do tekstu czy tez do prezentowanej aplikacji proszê ¶mia³o pisaæ nadzieja@talematros.jeremi.pl najlepiej ze s³owem artyku³ w nag³ówku.
Pe³na wersja tej aplikacji pracuje sobie na stronie www.lakowa.prv.pl :)
Tomasz Go³embiewski
|