Sunteți pe pagina 1din 16

DOVLETE ROBERT

PROIECT SGI
Proiectarea proiectului

Arhitectura programului

Pagina de start

Utilizator Administrator

Utilizatori
-Acces produse Utilizatori Setari
-Acces produse Setari
-Acces cos -adaugare administrator generale
-Acces cos -adaugare administrator generale
cumparaturi -afisare date administratr
cumparaturi -afisare date administratr
- logare -modificare date -prelucrare
- logare -modificare date -prelucrare
- plasare comenzi administrator comenzi
- plasare comenzi administrator comenzi
-stergere cont - onorare
-stergere cont - onorare
-modificare parola comenzi
-modificare parola comenzi

Adaugare Modificare Stergere


Adaugare Modificare Stergere
--Adaugare -modificare - stergere
--Adaugare -modificare - stergere
produse noi, produse produse,cate
produse noi, produse produse,cate
adaugare existente sau gorii
adaugare existente sau gorii
categorii noi categorii
categorii noi categorii

Descrierea componentelor
Dintre aceste module prezentate, cel pentru administrarea magazinului este accesibil doar
administratorului, acesta având acces doar la acest tip de operaţii. Administratorul de retea este
cel care are acces la modulele care manipulează datele utilizatorilor, inclusiv posibilitatea de a
crea conturi noi, de a prelucra comenzi, de a adauga / modifica / sterge produse sau categorii de
produse. Un utilizator obişnuit, neautentificat nu are accesul la datele privitoare la administrare.
Legătura dintre aceste module este asigurată de conexiunea la baza de date, astfel acestea
partajând aceleaşi informaţii.
Securitatea este implementată la nivelul interfeţei cu baza de date, realizate prin PHP. Astfel
orice operaţie se poate efectua doar în urma autentificării, realizată cu ajutorul sesiunilor.
În urma unei autentificări reuşite, meniul devine activ, astfel că utilizatorul poate selecta
opţiunea pe care o doreşte prin simpla apăsare a butonului corespunzător din meniu. Umătorul
pas în utilizarea aplicaţiei îl reprezintă introducerea datelor de la tastatură, urmată de procesarea
acestora fie prin stocarea lor în baza de date, prin afişarea informaţiilor pe ecran sau prin
imprimarea acestora sub formă de documente. De asemenea, la introducerea datelor este
verificată corectitudinea lor, unele dintre ele fiind completate automat astfel încât să se asigure
validitatea şi corectitudinea lor. Atunci cand un utilizator acceseaza interfata destinata clientului,
se realizeaza conexiunea la baza de date si se initializeaza parametrii globali folosit dealungul
intregii sesiuni.

$con = mysqli_connect("localhost","root","", "produse_ma");


if (!$con) {
die ("Eroare MySQL");
}
if (!isset($GLOBALS['con'])) { $GLOBALS['con'] = $con; }

$totalGeneral = 0;

if (isset($_GET['page'])) { $page = $_GET['page']; } else { $page = 1;}


if (isset($_GET['ordonare'])) { $ordonare = $_GET['ordonare']; } else {
$ordonare = "ma";}
if (isset($_GET['actiune'])) { $actiune = $_GET['actiune']; } else { $actiune
= "";}

if (isset($_SESSION['nr_produse'])) { $nr_produse = $_SESSION['nr_produse']; }


else { $_SESSION['nr_produse'] = array(); $nr_produse = 0;}
if (isset($_SESSION['pret'])) { $nr_produse = $_SESSION['pret']; } else {
$_SESSION['pret'] = array(); $pret = 0;}
if (isset($_POST['cuvinte'])) { $cuvinte = $_POST['cuvinte']; } else {
$_POST['cuvinte'] = ""; $cuvinte = 0;}
if (isset($_POST['cat'])) { $cat = $_POST['cat']; } else { $_POST['cat'] = "";
$cat = 0;}
if (isset($_POST['img'])) { $img = $_POST['img']; } else { $_POST['img'] = "";
$img = 0;}

if (!isset($_SESSION['nume'])) $_SESSION['nume'] = array();


if (!isset($_SESSION['nr_produse'])) $_SESSION['nr_produse'] = array();
if (!isset($_SESSION['id_produs'])) $_SESSION['id_produs'] = array();
if (!isset($_SESSION['pret'])) $_SESSION['pret'] = array();
if (!isset($_SESSION['id'])) $_SESSION['id'] = array();

function mysql_query($query) {
$sql = mysqli_query($GLOBALS['con'], $query);
return $sql;
}

function mysql_fetch_array($rezultat) {
$sql = mysqli_fetch_array($rezultat);
return $sql;
}

function mysql_num_rows($rezultat) {
$sql = mysqli_num_rows($rezultat);
return $sql;
}

La rularea aplicaţiei in sectiunea de administrare se va intra automat în formularul de


autentificare verificându-se validitatea utilizatorului şi a parolei de logare, cu ajutorul sesiunilor.
Numele utilizatorului şi parola sunt preluate cu ajutorul funcţiei POST din căsuţele de text ale
formularului, şi sunt comparate cu datele existente în tabela corespunzătoare datelor despre
utilizatorii de retea.
//start de sesiune
session_start();
//conectare la baza de date
if (isset($_POST['username']) && isset($_POST['password'])) {
$username = $_POST['username'];
$password = $_POST['password'];

include ("connection.php");

$query = "SELECT username , password , statut FROM utilizator WHERE


username='$username' AND password=md5('$password') AND statut = 0";
$result = mysql_query($query);
if (mysql_fetch_array($result)) {
$_SESSION['valid_user'] = $username;}

Dacă numele şi parola vor fi găsite în tabelă, se va prelua identificatorul corespunzător


administratorului, făcându-se posibilă şi vizualizarea şi utilizarea meniului. În caz contrar se va
afişa din nou formularul de autentificare cu mesajul aferent de eroare, şi anume „Userul sau
parola nu au fost introduse corect!”.
După o autentificare reuşită se va face afişarea opţiunilor din meniu şi completarea
automată a identificatorului corespunzător administratorului, în cazul adăugarii datelor, iar în
cazul prelucrării datelor făcându-se selecţia pentru a nu avea acces decât la datele utilizatorilor
de retea administratorului deja autentificat. Datele din formularul de adăugare vor fi preluate cu
POST din căsuţele de text, ComboBox-uri, sau butoanele radio.
<?php
//start de sesiune
session_start();
//conectare la baza de date
include ("connection.php");

//notam directorul curent,comparativ cu root-ul


$directory_self = str_replace(basename($_SERVER['PHP_SELF']), '',
$_SERVER['PHP_SELF']);

// notam in variabila locatia fisierului care prelucreaza functia de upload


$uploadHandler = 'http://' . $_SERVER['HTTP_HOST'] . $directory_self . 'adauga_produs.php?
action=add';

// dimensiunea maxima a imaginii


$max_file_size = 30000000; //marimea ~ bytes

// notam intr-o variabila locatia formularului de upload


$uploadForm = 'http://' . $_SERVER['HTTP_HOST'] . $directory_self . 'adauga_produs.php';

//pagina care afiseaza daca operatia a avut loc cu success


$uploadSuccess = 'http://' . $_SERVER['HTTP_HOST'] . $directory_self . 'adauga_produs.php?
action=add';

// numele fieldname-ului pentru fisierul respectiv


$fieldname = 'file';

?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"


"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Adauga produs</title>
<link rel="stylesheet" type="text/css" href="style.css" />
</head>
<body>
<?php
//daca userul este setat ..
if (isset($_SESSION['valid_user']))
{ echo '<h1>Esti logat ca: <b>'.$_SESSION['valid_user'].'</b></h1><br>';

if(isset($_GET['action']) && $_GET['action'] == "add") {

$qdir = "SELECT nume FROM categorii WHERE id_cat = ".$_POST['id_cat'];


$rdir = mysql_query($qdir);
$d = mysql_fetch_array($rdir);
// Notam folderul care va primi poza ce urmeaza a fi uploadata
$uploadsDirectory = '../produse/'.$d['nume'].'/';

// Error Handler , in caz ca avem o eroare cu Upload-ul


function error($error, $location)
{
echo '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"'."\n".
'"http://www.w3.org/TR/html4/strict.dtd">'."\n\n".
'<html lang="en">'."\n".
' <head>'."\n".
' <meta http-equiv="content-type" content="text/html; charset=iso-8859-
1">'."\n\n".
' <link rel="stylesheet" type="text/css" href="stylesheet.css">'."\n\n".
' <title>Upload error</title>'."\n\n".
' </head>'."\n\n".
' <body>'."\n\n".
' <div id="Upload">'."\n\n".
' <h1>Upload failure</h1>'."\n\n".
' <p>An error has occured: '."\n\n".
' <span class="red">' . $error . '...</span>'."\n\n".
' The upload form is reloading</p>'."\n\n".
' </div>'."\n\n".
'</html>';
exit;
} // end error handler

// Erori PHP posibile


$errors = array(1 => 'php.ini max file size exceeded',
2 => 'html form max file size exceeded',
3 => 'file upload was only partial',
4 => 'no file was attached');

// verificam daca actiunea din formular este setata


isset($_POST['action'])
or error('the upload form is neaded', $uploadForm);

// verificam erorile standard de upload


($_FILES[$fieldname]['error'] == 0)
or error($errors[$_FILES[$fieldname]['error']], $uploadForm);

// verificam daca lucram cu un upload HTTP


@is_uploaded_file($_FILES[$fieldname]['tmp_name'])
or error('not an HTTP upload', $uploadForm);

// validation... sverificam daca fisierul uploadat este imagine sau nu


@getimagesize($_FILES[$fieldname]['tmp_name'])
or error('only image uploads are allowed', $uploadForm);

// creem un nume de imagine unic , si verificam daca este folosit deja.


// Daca nu , incercam pana gasim un nume nefolosit.
$now = time();
while(file_exists($uploadFilename = $uploadsDirectory.$now.'-'.$_FILES[$fieldname]['name']))
{
$now++;
}

$fisier = $now.'-'.$_FILES[$fieldname]['name'];
//Mutam fisierul in folder si ii atribuim numele.
@move_uploaded_file($_FILES[$fieldname]['tmp_name'], $uploadFilename)
or error('receiving directory insuffiecient permission', $uploadForm);

echo '<div align="center"><div class="mare"><div class="sus"><div class="ne"> Adauga


produs </div></div><div class="mijloc"><div class="mne">';
if($_POST['nume']=="") {echo 'Trebuie sa completati numele produsului <br><a
href="adauga_produs.php">Inapoi</a>';
echo '</div></div><div class="jos"></div></div></div>';exit;}
$sql="SELECT nume FROM produs WHERE nume='".$_POST['nume']."'";
$resursa=mysql_query ($sql);
if(mysql_num_rows($resursa) != 0)
{ print 'produsul <b>'.$_POST['nume'].'</b> exista deja in baza de date!<br>
<a href="adauga_produs.php">Inapoi</a>';
echo '</div></div><div class="jos"></div></div></div>';exit;}

$sql="INSERT INTO produs (id_produs,id_cat,nume,descriere,pret,imagine) VALUES ('','".


$_POST['id_cat']."','".$_POST['nume']."','".$_POST['descriere']."','".$_POST['pret']."','".
$fisier."')";
mysql_query ($sql);
print 'produsul <b>'.$_POST['nume'].'</b> cu pretul <b>'.$_POST['pret'].'</b> RON a fost
adaugata in baza de date!<br>
<a href="index.php">Inapoi la meniu</a><br><a href="adauga_produs.php">Adauga
un alt produs</a>';
echo '</div></div><div class="jos"></div></div></div>';exit;
}//sfarsit inserare in produs
else{

echo '<div align="center"><div class="mare"><div class="sus"><div class="ne"> Adauga


produs </div></div><div class="mijloc"><div class="mne">';
?> <form method="post" action="<?php echo $uploadHandler ?>" enctype="multipart/form-
data" >
<table>
<tr><td>Marca: </td><td>
<select name="id_cat">
<?php
$query = "SELECT id_cat , nume FROM categorii";
$result = mysql_query($query);
while ($row = mysql_fetch_array($result)) {
echo '<option value="'.$row['id_cat'].'">'.$row['nume'].'</option>';}
?>
</select>
</td></tr>
<tr><td>Nume: </td><td><input type="text" name="nume" /></td></tr>
<tr><td>Descriere: </td><td><textarea name="descriere"></textarea></td></tr>
<tr><td>Pret: </td><td><input type="text" name="pret" /></td></tr>
<tr><td colspan="2">

<p>
<input type="hidden" name="MAX_FILE_SIZE" value="<?php echo
$max_file_size ?>">
</p>

<p>
<label for="file">Upload imagine:</label>
<input id="file" type="file" name="file">
</p>

</td></tr>
<tr><td><input type="submit" value="Creeaza" id="submit" name="action"
style="width:80px;"/></td><td><input type="reset" value="Resetare"
style="width:80px;"/></td></tr>
</table>
</form>

<?php

} echo '</div></div><div class="jos"></div></div></div>';


}
else {
echo 'Nu sunteti logat. Doar membrii privilegiati pot accesa aceasta pagina.<br>Pentru a va
loga, accesati pagina de <a href="index.php">Log in</a>';}
?>

</body>
</html>

Funcţii JavaScript

Deasupra meniului principal din interfata destinata clientului avem un slider


(realizat cu ajutorul JavaScript si JQuery). Pentru acesta avem nevoie de
urmatoarele librarii:

<link rel="stylesheet" type="text/css" href="style.css" />

<script type="text/javascript" src="js/jquery-1.9.1.min.js"></script>


<script type="text/javascript" src="js/jssor.slider.mini.js"></script>
<script type="text/javascript" src="js/config.js"></script>

Dupa ce apelam scripturile js in sectiunae <head> a site-ului, putem realiza


meniul in div-ul corespunzator:
<div id="jssor_1" style="position: relative; margin: 0 auto; top: 0px; left:
0px; width: 800px; height: 300px; overflow: hidden; visibility: hidden;">
<div data-u="loading" style="position: absolute; top: 0px; left:
0px;">
<div style="filter: alpha(opacity=70); opacity: 0.7; position:
absolute; display: block; top: 0px; left: 0px; width: 100%; height:
100%;"></div>
<div
style="position:absolute;display:block;background:url('images/loading.gif')
no-repeat center center;top:0px;left:0px;width:100%;height:100%;"></div>
</div>
<div data-u="slides" style="cursor: default; position: relative; top:
0px; left: 0px; width: 800px; height: 300px; overflow: hidden;">
<div data-p="112.50" style="display: none;">
<img data-u="image" src="images/banner1.jpg" />
</div>
<div data-p="112.50" style="display: none;">
<img data-u="image" src="images/banner2.jpg" />
</div>
<div data-p="112.50" style="display: none;">
<img data-u="image" src="images/banner3.jpg" />
</div>
</div>
<div data-u="navigator" class="jssorb01"
style="bottom:16px;right:16px;">
<div data-u="prototype" style="width:12px;height:12px;"></div>
</div>
<span data-u="arrowleft" class="jssora02l"
style="top:0px;left:8px;width:55px;height:55px;" data-autocenter="2"></span>
<span data-u="arrowright" class="jssora02r"
style="top:0px;right:8px;width:55px;height:55px;" data-autocenter="2"></span>
</div>

Structuri de baze de date şi tabele. Baze de date relaţionate

Pentru realizarea aplicaţiei a fost utilizată o bază de date care conţine tabele relationate
prin identificatori care au activată proprietatea de autoincrementare şi nu acceptă valoarea
NULL.
Baza de date se numeşte „produse_ma” şi conţine următoarele tabele:

 produs
 categorie
 comanda
 produs_comanda
 utilizator
Utilizarea aplicaţiei

La rularea aplicaţiei din sectiunae de administrare se va deschide automat formularul de


autentificare, unui utilizator neautentificat ne având permisiunea de a accesa datele gestionate în
baza de date.

La accesarea butonului de logare se va deschide meniul principal în cazul în care atât


numele utilizatorului cât şi parola sunt corecte şi există în tabela cu datele privitoare la
administrator si magazin.
În caz contrar va apărea din nou formularul de autentificare împreuna cu un mesaj aferent
de eroare a introducerii parolei şi/sau a utilizatorului.

Interfata vizuala destinata clientilor este reprezentata de maparea in MySQL a produselor si a


conturilor de utilizatori. De asemenea, din aceasta interfata se pot realiza cautari in baza de date
de produse:
La opţiunea de Cautare utilizatori se va desfăşura un alt submeniu oferind posibilitatea de
a alege dacă se doreşte căutarea după nume şi prenume.
Concluzii

Aplicaţia realizată poate fi utilizată cu uşurinţă de către administratori pentru gestionarea


bazei de date a unui magazin de acest gen.
Datorită cererii de autentificare, un administrator nu are accesul la toata baza de date, ci
doar la informaţiile privitoare la produse, comenzi, celelalte date fiind inaccesibile.
Proiectul permite adăugarea de noi utilizator, vizualizarea datelor despre aceştia,
modificarea datelor. Baza de date a fost creeată astfel încât informaţiile pot fi introduse conform
cu realitatea.
Administratorul serverului aplicaţiei are dreptul de a gestiona, prin autentificare, tabela
corespuzătoare administratorului de retea, de a adăuga administratori de retea noi în sistem prin
crearea de cont după atribuirea unui user şi a unei parole, de a modifica datele existente în
legatură cu un anumit administrator, sau de a şterge un administrator din baza de date.
Proiectarea interfeţelor utilizator este un subiect care preocupă tot mai mult dezvoltatorii
de software. Deoarece aplicaţia realizată este adresată unui grup ţintă, şi anume clientilor acestui
magazin online, nevoia de interfaţă potrivită şi centrată pe utilizator (sau client) este stringentă.
O interfaţă potrivită face ca aplicaţia să fie uşor de utilizat şi învăţarea funcţiilor sale trebuie să
se apropie de “natural” şi să poată fi realizată în timp scurt, fără să fie nevoie ca utilizatorul să
comute pe alt gen de abordare decât cel pe care îl posedă prin cultură si experienta.
Aşadar, limbajul utilizat în realizarea interfeţei conţine termeni specifici administratorali,
dar care pot fi percepuţi într-un mod facil de către cei cărora le este destinată aplicaţia.

S-ar putea să vă placă și