( 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
|