CATEGORII DOCUMENTE |
Panoul de control este partea de aplicatie care ajuta administratorul site-ului sa introduca, sa editeze sau sa stearga informatii din baza de date. Deoarece discutam despre o aplicatie-platforma pentru pagini web dinamice, aceste modificari vor avea repercursiuni imediate asupra continutului si aspectului site-ului.
Este bine deci, sa ne asiguram ca un utilizator rau-intentionat sau neinstruit nu poate sa capete acces la panoul de administrare a datelor. In acest scop folosim un sitem de navigare bazat pe grupuri de utilizatori:
se pot defini mai multe grupuri de utilizatori, cu diverse drepturi de acces;
fiecare utilizator face parte dintr-un grup si "mosteneste" permisiunile acestuia;
utilizatorii cu drepturi depline fac parte din grupul "admin".
Presupunand ca avem de construit un magazin virtual, putem crea doua grupuri: Gestionari si Contabili. Gestionarul de marfuri va avea acces la paginile din panou unde se face adiministrarea produselor, putand sa introduca date despre marfurile puse in vanzare, etc. Contabilul va avea acces la diverse statistici (cata marfa s-a vandut, la ce preturi, care sunt stocurile, etc.). Setarea de permisiuni diferite poate preveni distrugerea datelor de catre un neavenit si permite pastrarea confidentialitatii lor.
Configurarea aplicatiei
Informatiile despre baza de date si despre limba implicita care va fi folosita, sunt pastrate intr-un fisier numit config.php aflat in directorul radacina al aplicatiei:
<?php
//baza de date
define('_DB_HOST', 'localhost');
define('_DB_USERNAME', 'root');
define('_DB_PASSWORD', '');
define('_DB_BAZA_DATE', 'licenta');
define('_DB_PREFIX', 'stefan_');
//date despre limbile suportate
//'ro', 'en', 'fr'
define('_LANG_PAGINA_DEFAULT', 'ro');
define('_LANG_ADMIN_DEFAULT', 'ro');
?>
Astfel, la mutarea aplicatiei pe un alt host sau pe o alta baza de date, vom modifica doar acest fisier si setarile vor fi folosite in intreaga aplicatie. Acest fisier va fi inclus in toate fisierele programului nostru.
Dupa cum se poate observa, in fisierul de configurare exista doua constante _LANG_PAGINA_DEFAULT si _LANG_ADMIN_DEFAULT.
Acestea ne indica ce limba va fi folosita in mod curent pentru panoul de administrare si pentru platforma de afisare a datelor. Aplicatia contine librarii cu siruri de caractere (definite sub forma unor variabile globale) special create pentru a furniza continut multilingv.
Autentificarea utilizatorilor
Pentru a avea acces la panoul de control, utilizatorii trebuie sa aiba definit un username si o parola. Aceste date vor fi tinute in tabela users. Pentru a mari securitatea, parola este criptata folosind un algoritm cu pierdere de date - md5. O implementare a acestui algoritm exista ca si functie PHP predefinita. Odata ce un sir de caractere a fost criptat, acesta nu mai poate fi refacut, functia md5 ne fiind bijectiva.
Pagina de login a panoului de control contine un formular HTML care are codul urmator:
<div id='login'>
<form action='login.php' method='post'>
<table align='center'>
<tr>
<td><?= $GLOBALS['_ADMIN_LOGIN']['user']; ?>:
</td><td><input type='text' name='user' /></td>
</tr>
<tr>
<td><?= $GLOBALS['_ADMIN_LOGIN']['password']; ?>:</td>
<td><input type='password' name='password' /></td>
</tr>
<tr>
<td>
<button type='submit'>
<?php echo $GLOBALS['_ADMIN_LOGIN']['login'];?>
</button>
</td>
</tr>
</table>
</form>
</div>
Dupa completarea acestui forumular (cu un username si o parola), va fi executat in background fisierul login.php care decide daca informatiile introduse sunt corecte sau nu. Acest fisier are 3 sectiuni:
- sectiunea de verificare a completarii celor doua campuri (daca utilizatorul nu a completat username-ul sau parola, primeste un mesaj de eroare):
if($_POST['user']=='' || $_POST['password']=='')
- sectiunea de verificare a datelor (daca utilizatorul a indicat un username sau o parola gresita, va primi un mesaj de eroare):
//ne conectam la baza de date
mysql_connect(_DB_HOST,_DB_USERNAME,_DB_PASSWORD);
mysql_select_db(_DB_BAZA_DATE);
//convertim parola cu md5, spre a o compara cu parola din baza de //date
$sql='SELECT * FROM '._DB_PREFIX.'users
WHERE username=''.$_POST['user'].''
AND password=''.md5($_POST['password']).''';
$rezultat=mysql_query($sql);
//daca numarul de utilizatori returnati care au username-ul si //parola respectiva este mai mic sau mai mare decat 1, inseamna ca //datele sunt gresite si vom afisa un mesaj de eroare
if(mysqli_num_rows($rezultat)!=1)
- sectiunea de setare a mediului de lucru si de acces in panoul de control (daca datele de autentificare sunt corecte, vom arunca utilizatorul in panoul de control).
//initializam sesiunea
session_start();
//retinem username-ul si parola encriptata, pentru verificari //ulterioare
$_SESSION['user']=$_POST['user'];
$_SESSION['password']=md5($_POST['password']);
//retinem grupul de utilizatori din care face parte user-ul //nostru, precum si limba sa natala.
while ($rand=mysqli_fetch_array($rezultat))
//retinem numarul unic de identificare al sesiunii
$_SESSION['session_id']=session_id();
//redirectam utilizatorul catre panoul de control
header('location:main.php');
Dupa cum observam, daca autentificarea a fost facuta cu succes, stocam in sesiunea curenta username-ul, parola, limba, numarul de indentificare si grupul utilizatorului curent. Aceste date vor fi folosite atat pentru securizarea paginilor din control panel, cat si pentru afisarea continutului in limba nativa a utilizatorului nostru.
Securitatea paginilor din panoul de administrare
Cel mai important lucru este prevenirea accesului unui vizitator oarecare la paginile panoului de control, sau a accesului unui utilizator la o pagina la care nu ar trebui sa aiba acces. Exista cazuri cand un utilizator a accesat aplicatia dintr-un loc public si atunci raman in memoria browserului (in history), adresele paginilor deschise.
Un alt vizitator poate vedea aceste adrese si le poate incarca. Daca nu am proteja fiecare pagina in parte printr-un mecanism de securitate, confidentialitatea datelor ar fi compromisa.
Protectia este realizata de catre fisierul user_autentificare.php, inclus in fiecare fisier al site-ului. Acest program incarca datele din sesiunea curenta si le compara cu cele din baza de date:
//sesiunea este pornita
session_start();
//incarc limba curenta, stocata in sesiune, sau daca aceasta nu este //disponibila, incarc limba implicita
if (file_exists('../lang/admin/'.$_SESSION['lang'].'.php'))
else
include('../lang/admin/'._LANG_ADMIN_DEFAULT.'.php');
//verific daca sesiunea a fost initializata, daca nu, afisez o eroare
if ($_SESSION['session_id']!=session_id())
//realizez conexiunea cu baza de date
mysql_connect(_DB_HOST,_DB_USERNAME,_DB_PASSWORD);
mysql_select_db(_DB_BAZA_DATE);
//verific daca datele userului din sesiune coincid cu cele din baza de //date.
$sql='SELECT * FROM '._DB_PREFIX.'users
WHERE username=''.$_SESSION['user'].''
AND password=''.$_SESSION['password'].''' ;
$resursa=mysql_query($sql);
//daca datele sunt incorecte, afisez mesaj de eroare.
if(mysqli_num_rows($resursa)!=1)
//verific daca userul are voie sa acceseze sectiunea respectiva.
//daca utilizatorul nu are acces in pagina curenta, va fi redirectionat //catre prima pagina a panoului de control
if (isset($zona))
if ($sepermite!=1)
Meniurile panoului de control
Fiecare pagina din panou contine un meniu construit prin includerea fisierului meniu.php, astfel:
<?php include('lib/meniu.php'); ?>
In fisierul meniu.php se citesc permisiunile utilizatorului curent, din tabela de grupuri si se afiseaza numai optiunile din meniu la care acesta i s-a acordat acces:
$sql_groups='SELECT * FROM '._DB_PREFIX.'groups
WHERE groupname=''.$_SESSION['group'].''' ;
$resursa_groups=mysql_query($sql_groups);
while ($rand_groups=mysqli_fetch_array($resursa_groups))
In vectorul $permisiuni am stocat optiunile la care utilizatorul curent are acces. Optiunile de meniu sunt afisate sub forma unei liste de link-uri (care poate fi formata folosind CSS):
echo '<div id='nav_container'>';
//afisare meniu Administrare continut
if (($permisiuni['categories'])||($permisiuni['entries'])
||($permisiuni['languages']))
if ($permisiuni['categories'])
if ($permisiuni['entries'])
if ($permisiuni['languages'])
if (($permisiuni['categories'])||($permisiuni['entries'])
||($permisiuni['languages']))
//afisare meniu Administrare utilizatori
if (($permisiuni['myprofile'])||($permisiuni['members'])
||($permisiuni['groups']))
if ($permisiuni['myprofile'])
if ($permisiuni['members'])
if (($permisiuni['myprofile'])||($permisiuni['members'])
||($permisiuni['groups']))
echo '</div>';
Pentru un administrator, meniul aplicatiei va arata cam asa:
Administrarea limbilor
Urilizatorii cu permisiuni in aceasta zona, trebuie sa poata sa adauge, sa modifice sau sa stearga limbi din panoul de control al aplicatiei. Odata adaugata o limba, intregul continut (categoriile si articolele) trebuie sa poata fi de administrat in limba respectiva.
Fisierele "responsabile" cu administrarea limbilor continutului sunt languages.php, languages_edit.php si languages_delete.php. In languages.php se face listarea limbilor deja existente si este afisat un formular de adaugare a uneia noi:
//listarea limbilor existente
$sql='SELECT * FROM '._DB_PREFIX.'languages ORDER BY 'id'' ;
$resursa=mysql_query($sql);
while ($rand=mysqli_fetch_array($resursa))
//formularul de adaugare a unei alte limbi
<form action='languages.php' method='post' name='form1' id='form1'>
<table summary='language adding form' cellpadding='0' cellspacing='10'>
<tr>
<td class='formproperty'>
<?php echo $GLOBALS['_ADMIN_FORMS']['lang']; ?>:
</td>
<td>
<input type='text' name='language' class='shadow_input' />
</td>
</tr>
<tr>
<td valign='top' class='formproperty'>
<?php echo $GLOBALS['_ADMIN_FORMS']['lang_abr']; ?>:
</td>
<td>
<input type='text' name='abreviation' class='shadow_input' />
</td>
</tr>
<tr>
<td></td>
<td>
<input type='hidden' name='action' value='formulartrimis' /> <input type='submit' class='shadow_button' value='
<?php echo $GLOBALS['_ADMIN_FORMS']['button_add']; ?>' />
</td>
</tr>
</table>
</form>
Datele din formular sunt trimise unei functii care le va procesa si le va introduce in baza de date. In captura de ecran ce urmeaza, este surprinsa aceasta operatiune:
Editarea si stergerea unei limbi se executa intr-o maniera asemanatoare: folosim formulare HTML pentru a transmite date unor functii care se ocupa de aceste operatii, precum si de verificarile necesare.
Administrarea categoriilor
Utilizatorii cu permisiuni in aceasta zona trebuie sa poata sa adauge, sa editeze, sa stearga, sa modifice si sa ordoneze categoriile site-ului. Fiecare categorie trebuie sa poata contine un numar infinit de subcategorii. La randul ei, fiecare subcategorie poate contine alte subcategorii.
Categoriile de articole sunt folosite pentru construirea meniului paginii web, de aceea numele fiecareia dintre ele trebuie sa fie disponibil in limbile deja definite. De asemenea este important sa putem schimba ordinea categoriilor, pentru a permite utilizatorilor sa modifice afisarea meniului paginii dupa nevoile lor.
Fisierele folosite pentru aceste operatii sunt: categories_edit_language.php, categories_level_down.php, categories_delete.php, categories_level_up.php si categories.php.
Adminstrarea categoriilor se face in aceeasi maniera cu cea a limbilor straine, doar ca apar cateva optiuni in plus, precum ordonarea si adaugarea de subcategorii.
Pentru ordonare, folosim doua fisiere ascunse: ( categories_level_down.php si categories_level_up.php). In continuare voi da ca exemplu doar cresterea indicelui de ordine, scaderea facandu-se dupa acelasi model:
/*
mutam o categorie in jos daca nu este deja ultima din lista:
- ordinea ei se incrementeaza
- ordinea celorlalte de dedesubt se decrementeaza
*/
$zona='categories';
include('../config.php');
include('user_autentificare.php');
$parent_id=$_REQUEST['parent_id'];
$id=$_REQUEST['id'];
$sql='SELECT * FROM '._DB_PREFIX.'categories
WHERE `parent`=''.$parent_id.'' ORDER BY 'order';' ;
$resursa=mysql_query($sql);
$nr_categs=mysqli_num_rows($resursa);
$i=0;
//introducem toate categoriile cu acelasi parinte intr-un vector
while ($rand=mysqli_fetch_array($resursa))
//incrementez ordinea categoriei curente
if ($poz<$nr_categs-1)
//decrementez ordinea categoriilor de dedesubt
for($i=0;$i<$nr_categs;$i++)
//alterez tabelul dupa noua ordine, pentru a usura citirea
$sql='ALTER TABLE `'._DB_PREFIX.'categories`
ORDER BY `parent`,`order`' ;
mysql_query($sql);
$location='location:categories.php?parent_id='.$parent_id;
header($location);
exit();
In captura de ecran urmatoare, este surprinsa listarea si ordonarea categoriilor:
Administrarea articolelor
Utilizatorii cu perimisiuni in aceasta zona trebuie sa poata sa adauge, sa stearga si sa editeze articole. Pentru manipularea lor folosim (la fel ca la adaugarea limbilor si a categoriilor) un set de formulare web. Bineinteles, sectiunea articole permite administrarea de continut multilingv.
Managementul articolelor se face in fisierele: entries.php, entries-edit.php, entries_edit_language.php si entries delete.php.
Pentru ca articolele constituie datele de baza care vor fi folosite pentru a genera pagini web dinamice, trebuie sa permitem utilizatorilor nostri sa introduca cod HTML pentru a formata textul, pentru a adauga imagini, tabele si referinte. In acest scop folosim un sistem de JavaScript-uri care vor permite inserarea si editarea de continut vizual (Rich Text Content).
Voi prezenta in continuare secventa de cod unde se face editarea articolelor, aceasta fiind zona unde este folosit sistemul de management al continutului vizual:
//introducem codul pentru modulul de continut vizual.
<script type='text/javascript'>
_editor_url = 'htmlarea/';
_editor_lang = 'en';
</script>
<script type='text/javascript'
src='htmlarea/htmlarea.js'></script>
<script type='text/javascript' src='htmlarea/dialog.js'></script>
<script type='text/javascript'
src='htmlarea/lang/en.js'></script>
<script type='text/javascript'>
function initDocument()
</script>
$sql='SELECT * FROM '._DB_PREFIX.'entries_multilanguage
WHERE `entry_id`='.$entry_id.' AND `language_id`='.$lang_id;
$resursa=mysql_query($sql);
$bt_prefix = 'Adauga';
if (mysqli_num_rows($resursa) > 0)
In captura de ecran urmatoare este surprinsa adaugarea unui articol.
Politica de confidentialitate | Termeni si conditii de utilizare |
Vizualizari: 2296
Importanta:
Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved