cursuri cursuri cursuri cursuri cursuri cursuri
cursuri
cursuri
cursuri
Cursuri    Tutoriale    Teste    Jocuri
 
 
cursuri Am uitat utilizatorul cursuri Am uitat parola
cursuri online Cursuri online
Cursuri online gratuite
cursuri online Tutoriale
Cum sa faci orice
cursuri online Teste online
Testeaza-ti cunostintele
cursuri online Revista
Aboneaza-te gratuit
cursuri online Jocuri
Jocuri educative
cursuri online Inregistreaza-te
Intra in comunitate
eCursuri » Cursuri online » Tehnologia informatiei » Magazin online cu PHP si MySql » Lectia 19
Modulul de administrare
15469 afisari

Introducere

Categorii
• Adauga categorie - Adauga o noua categorie.
• Vezi categorii - Afiseaza toate categoriile pe care le avem. Putem vedea si toti copii categoriilor si produselor continute.
• Modifica categorie - Modifica informatiile unei categorii: nume, descriere si imagine.
• Sterge categorie - Sterge o categorie. Toate produsele vor avea cat_id = 0.
Produse
• Adauga produs - Adauga un produs in magazinul tau. Vei adauga si imaginea si vei prelucra automat si o imagine mica.
• Vezi produse - Afisezi toate produsele tale din catalog grupate pe categorii.
• Modifica produs - Modifica informatiile unui produs. De asemenea, poti sterge si imaginea produsului.
• Sterge produs - Sterge un produs din catalog.
Comanda
• Vezi comenzi - Aici poti vizualiza toate comenziile pe care le ai si statusul lor.
• Modifica comenzi - In unele cazuri, un client ar putea suna pentru a modifica o comanda sau pentru a a anula o comanda. Aici, poti face asta.
Configurare magazin - Aici poti modifica datele magazinului tau, design etc

Fiecare sub-modul va avea urmatoarea structura similara:
• index.php
• list.php
• add.php
• modify.php
• process<sub-modul>.php

Pagina index.php reprezinta doar o cale de intrare pentru administrator in site. Aici vei vedea mereu daca utilizatorul este logat sau nu. In felul asta vei fi siguri ca numai cei autorizati vor putea umbla in paginile de administrare.

Toate paginiile de administrare vor avea aceeasi sursa, fisierul template.php aflat in folderul admin/include.

Iata sursa lui:

<?php
if (!defined('WEB_ROOT')) {
exit;
}

$self = WEB_ROOT . 'admin/index.php';
?>
<html>
<head>
<title><?php echo $pageTitle; ?></title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link href="<?php echo WEB_ROOT;?>admin/include/admin.css" rel="stylesheet" type="text/css">
<script language="JavaScript" type="text/javascript" src="<?php echo WEB_ROOT;?>library/common.js"></script>
<?php
$n = count($script);
for ($i = 0; $i < $n; $i++) {
if ($script[$i] != '') {
echo '<script language="JavaScript" type="text/javascript" src="' . WEB_ROOT. 'admin/library/' . $script[$i]. '"></script>';
}
}
?>
</head>
<body>
<table width="750" border="0" align="center" cellpadding="0" cellspacing="1" class="graybox">
<tr>
<td colspan="2"><img src="<?php echo WEB_ROOT; ?>admin/include/banner-top.gif" width="750" height="75"></td>
</tr>
<tr>
<td width="150" valign="top" class="navArea"><p> </p>
<a href="<?php echo WEB_ROOT; ?>admin/" class="leftnav">Home</a>
<a href="<?php echo WEB_ROOT; ?>admin/category/" class="leftnav">Categorii</a>
<a href="<?php echo WEB_ROOT; ?>admin/product/" class="leftnav">Produse</a>
<a href="<?php echo WEB_ROOT; ?>admin/order/?status=Paid" class="leftnav">Comanda</a>
<a href="<?php echo WEB_ROOT; ?>admin/config/" class="leftnav">Configurare magazin</a>
<a href="<?php echo WEB_ROOT; ?>admin/user/" class="leftnav">Utilizatori</a>
<a href="<?php echo $self; ?>?logout" class="leftnav">Logout</a>
<p> </p>
<p> </p>
<p> </p>
<p>
<td width="600" valign="top" class="contentArea"><table width="100%" border="0" cellspacing="0" cellpadding="20">
<tr>
<td>
<?php
require_once $content;
?>
</td>
</tr>
</table></td>
</tr>
</table>
<p> </p>
<p align="center">Copyright © 2005 - <?php echo date('Y'); ?> <a href="http://www.trenulet.ro"> www.trenulet.ro </a></p>
</body>
</html>
template.php

Pagina de autentificare

Toate conturile administratorilor sunt salvate in tabela tbl_user. Pentru simplicitate, tabela va contine doar id-ul utilizatorului si parola.

Iata cum functioneaza autentificarea:
• Administratorul introduce id-ul si parola.
• Scriptul verifica daca aceasta combinatie id-parola exista in baza de date.
• Daca exista, porneste o sesiune si ii permite administratorului sa continue.
• Daca nu exista, ii afiseaza un mesaj de eroare.

Functia de autentficare este doLogin() si este localizata in fisierul functions.php din folderul admin/library.

Iata si codul sursa al fisierului:

<?php

/*
Verifica daca exista o sesiune curenta. Daca nu, redirectioneaza
Utilizatorul la pagina de login
*/
function checkUser()
{
//daca nu exista sesiunea, redirectioneaza
if (!isset($_SESSION['plaincart_user_id'])) {
header('Location: ' . WEB_ROOT . 'admin/login.php');
exit;
}

// logout utilizator
if (isset($_GET['logout'])) {
doLogout();
}
}

/*

*/
function doLogin()
{
// daca exista o eroare, o salvam in aceasta variabila
$errorMessage = '';

$userName = $_POST['txtUserName'];
$password = $_POST['txtPassword'];

// mai intai, ne asiguram ca id-ul si parola nu sunt goale
if ($userName == '') {
$errorMessage = 'You must enter your username';
} else if ($password == '') {
$errorMessage = 'You must enter the password';
} else {
// verifica baza de date pentru a vedea daca exista combinatia
// id - parola
$sql = "SELECT user_id
FROM tbl_user
WHERE user_name = '$userName' AND user_password = PASSWORD('$password')";
$result = dbQuery($sql);

if (dbNumRows($result) == 1) {
$row = dbFetchAssoc($result);
$_SESSION['plaincart_user_id'] = $row['user_id'];

// log ultim timp de logare
$sql = "UPDATE tbl_user
SET user_last_login = NOW()
WHERE user_id = '{$row['user_id']}'";
dbQuery($sql);


if (isset($_SESSION['login_return_url'])) {
header('Location: ' . $_SESSION['login_return_url']);
exit;
} else {
header('Location: index.php');
exit;
}
} else {
$errorMessage = 'Wrong username or password';
}

}

return $errorMessage;
}

/*
Logout
*/
function doLogout()
{
if (isset($_SESSION['plaincart_user_id'])) {
unset($_SESSION['plaincart_user_id']);
session_unregister('plaincart_user_id');
}

header('Location: login.php');
exit;
}


/*
Genereaza combo box-uri pentru categoriile existente
*/
function buildCategoryOptions($catId = 0)
{
$sql = "SELECT cat_id, cat_parent_id, cat_name
FROM tbl_category
ORDER BY cat_id";
$result = dbQuery($sql) or die('Cannot get Product. ' . mysql_error());

$categories = array();
while($row = dbFetchArray($result)) {
list($id, $parentId, $name) = $row;

if ($parentId == 0) {
$categories[$id] = array('name' => $name, 'children' => array());
} else {
$categories[$parentId]['children'][] = array('id' => $id, 'name' => $name);
}
}

// construieste combo optiuni
$list = '';
foreach ($categories as $key => $value) {
$name = $value['name'];
$children = $value['children'];

$list .= "<optgroup label="$name">";

foreach ($children as $child) {
$list .= "<option value="{$child['id']}"";
if ($child['id'] == $catId) {
$list.= " selected";
}

$list .= ">{$child['name']}</option>rn";
}

$list .= "</optgroup>";
}

return $list;
}

/*
Creeaza un thumb al imaginii produsului.
*/
function createThumbnail($srcFile, $destFile, $width, $quality = 75)
{
$thumbnail = '';

if (file_exists($srcFile) && isset($destFile))
{
$size = getimagesize($srcFile);
$w = number_format($width, 0, ',', '');
$h = number_format(($size[1] / $size[0]) * $width, 0, ',', '');

$thumbnail = copyImage($srcFile, $destFile, $w, $h, $quality);
}

// returneaza thumb-ul
return basename($thumbnail);
}

/*
Copieaza o imagine intr-un fisier destinatie
*/
function copyImage($srcFile, $destFile, $w, $h, $quality = 75)
{
$tmpSrc = pathinfo(strtolower($srcFile));
$tmpDest = pathinfo(strtolower($destFile));
$size = getimagesize($srcFile);

if ($tmpDest['extension'] == "gif" || $tmpDest['extension'] == "jpg")
{
$destFile = substr_replace($destFile, 'jpg', -3);
$dest = imagecreatetruecolor($w, $h);
imageantialias($dest, TRUE);
} elseif ($tmpDest['extension'] == "png") {
$dest = imagecreatetruecolor($w, $h);
imageantialias($dest, TRUE);
} else {
return false;
}

switch($size[2])
{
case 1: //GIF
$src = imagecreatefromgif($srcFile);
break;
case 2: //JPEG
$src = imagecreatefromjpeg($srcFile);
break;
case 3: //PNG
$src = imagecreatefrompng($srcFile);
break;
default:
return false;
break;
}

imagecopyresampled($dest, $src, 0, 0, 0, 0, $w, $h, $size[0], $size[1]);

switch($size[2])
{
case 1:
case 2:
imagejpeg($dest,$destFile, $quality);
break;
case 3:
imagepng($dest,$destFile);
}
return $destFile;

}

/*
Creeaza paginarea
*/
function getPagingNav($sql, $pageNum, $rowsPerPage, $queryString = '')
{
$result = mysql_query($sql) or die('Error, query failed. ' . mysql_error());
$row = mysql_fetch_array($result, MYSQL_ASSOC);
$numrows = $row['numrows'];

// numar de pagini
$maxPage = ceil($numrows/$rowsPerPage);

$self = $_SERVER['PHP_SELF'];

// creeaza anteriorul si urmatorul
// plus prima pagina si ultima pagina
if ($pageNum > 1)
{
$page = $pageNum - 1;
$prev = " <a href="$self?page=$page{$queryString}">[Prev]</a> ";

$first = " <a href="$self?page=1{$queryString}">[First Page]</a> ";
}
else
{
$prev = ' [Prev] ';
$first = ' [First Page] ';
}

if ($pageNum < $maxPage)
{
$page = $pageNum + 1;
$next = " <a href="$self?page=$page{$queryString}">[Next]</a> ";

$last = " <a href="$self?page=$maxPage{$queryString}{$queryString}">[Last Page]</a> ";
}
else
{
$next = ' [Next] ';
$last = ' [Last Page] ';
}

// returneaza navigatia
return $first . $prev . " Showing page <strong>$pageNum</strong> of <strong>$maxPage</strong> pages " . $next . $last;
}
?>
functions.php
Daca autentificarea are loc cu succes, vei initializa variabila sesiune $_SESSION['plaincart_user_id']. Toate paginile vor verifica existenta acestei variabile de sesiune cu ajutorul functiei checkUser(). Aceasta functie va redirectiona utilizatorul la pagina de login daca sesiunea nu exista.

function checkUser()
{
if (!isset($_SESSION['plaincart_user_id'])) {
header('Location: ' . WEB_ROOT . 'admin/login.php');
}

if (isset($_GET['logout'])) {
doLogout();
}
}


Daca in URL avem logout, vom apela functia doLogout().

function doLogout()
{
if (isset($_SESSION['plaincart_user_id'])) {
unset($_SESSION['plaincart_user_id']);
session_unregister('plaincart_user_id');
}

header('Location: login.php');
}


Vizualizarea categoriilor de produse

Toate categoriile sunt listate aici. Interogarea sql prezenta aici este destul de simpla. Doar selectezi id-ul categoriei, id-ul parintelui si numele categoriei si folosesti o bucla while.

Fiecare categorie va avea un link Modifica si un link Sterge. Cand dai click pe link-ul Modifica, vei fi redirectionat catre pagina de modificare a categoriei, iar cand dai click pe linkul Sterge, vei sterge categoria, dupa ce ai confirmat acest lucru intr-o fereastra JavaScript. Aceasta confirmare este necesara pentru a nu sterge ceva din greseala.

<?php
// ...
$catId = (isset($_GET['catId']) && (int)$_GET['catId'] >= 0) ?
(int)$_GET['catId'] : 0;
//...
?>

Cand pagina se incarca verifici daca exista variabila catId in sirul de interogare. Aceasta variabila va fi utilizata ca parametru de functia javascript addCategory().

<input name="btnAddCategory" type="button" id="btnAddCategory"
value="Add Category" class="box"
onClick="addCategory(<?php echo $catId; ?>)">


Adauga o categorie

Aici vei adauga o categorie in baza de date. Vei avea nevoie de numele, imaginea si descrierea categoriei. Atat numele cat si descrierea sunt obligatorii, dar imaginea nu este. Daca nu vrei sa adaugi o imagine, vei lasa campul necompletat. Bineinteles ca nu este recomandat si cel mai bine ar fi sa adaugi o imagine pentru fiecare categorie.

Iata cum va arata pagina de adaugare a unei categorii si codul ei sursa:

<?php
if (!defined('WEB_ROOT')) {
exit;
}

$parentId = (isset($_GET['parentId']) && $_GET['parentId'] > 0) ? $_GET['parentId'] : 0;
?>

<form action="processCategory.php?action=add" method="post" enctype="multipart/form-data" name="frmCategory" id="frmCategory">
<p align="center" class="formTitle">Add Category</p>

<table width="100%" border="0" align="center" cellpadding="5" cellspacing="1" class="entryTable">
<tr>
<td width="150" class="label">Category Name</td>
<td class="content"> <input name="txtName" type="text" class="box" id="txtName" size="30" maxlength="50"></td>
</tr>
<tr>
<td width="150" class="label">Description</td>
<td class="content"> <textarea name="mtxDescription" cols="50" rows="4" class="box" id="mtxDescription"></textarea></td>
</tr>
<tr>
<td width="150" class="label">Image</td>
<td class="content"> <input name="fleImage" type="file" id="fleImage" class="box">
<input name="hidParentId" type="hidden" id="hidParentId" value="<?php echo $parentId; ?>"></td>
</tr>
</table>
<p align="center">
<input name="btnAddCategory" type="button" id="btnAddCategory" value="Add Category" onClick="checkCategoryForm();" class="box">
<input name="btnCancel" type="button" id="btnCancel" value="Cancel" onClick="window.location.href='index.php?catId=<?php echo $parentId; ?>';" class="box">
</p>
</form>
add.php
Formularul are o variabila ascunsa (hidden) hidParentId. Valoarea ei este setata in fisierul list.php.

Dupa ce trimiti datele din formular, va fi utilizat fisierul processCategory.php. Toate operatiiile legate de categorii sunt facute in acest fisier.

La inceputul acestui fisier exista o conditie switch pentru a alege actiunea dorita.

$action = isset($_GET['action']) ? $_GET['action'] : '';
switch ($action) {
case 'addCategory' :
addCategory();
break;
case 'modifyCategory' :
modifyCategory();
break;
case 'deleteCategory' :
deleteCategory();
break;
case 'deleteImage' :
deleteImage();
break;
default :
header('Location: index.php');
}

Pentru a adauga o categorie, apelezi functia addCategory(). Pentru a nu exista probleme cu numele imaginii, vei genera un nume pentru fiecare imagine aleatoriu, utilizand functia rand().

$ext = substr(strrchr($image['name'], "."), 1);
$imagePath = md5(rand() * time()) . ".$ext";

Imaginea va deveni ceva de genul 6c444ed816ce251d610c25154dc28462.jpg. In acest fel vom scapa de problema conflictelor de nume.

Editarea si stergerea categoriilor

Formularul pentru modificarea unei categorii este identic cu cel de la adaugare, cu singura diferenta ca afisezi si informatiile introduse deja.

Iata sursa fisierului modify.php, responsabil cu editarea unei categorii:

<?php
if (!defined('WEB_ROOT')) {
exit;
}

// ne asiguram ca exista un id de categorie
if (isset($_GET['catId']) && (int)$_GET['catId'] > 0) {
$catId = (int)$_GET['catId'];
} else {
header('Location:index.php');
}

$sql = "SELECT cat_id, cat_name, cat_description, cat_image
FROM tbl_category
WHERE cat_id = $catId";
$result = dbQuery($sql);
$row = dbFetchAssoc($result);
extract($row);

?>
<p> </p>
<form action="processCategory.php?action=modify&catId=<?php echo $catId; ?>" method="post" enctype="multipart/form-data" name="frmCategory" id="frmCategory">
<table width="100%" border="0" align="center" cellpadding="5" cellspacing="1" class="entryTable">
<tr>
<td width="150" class="label">Categorie</td>
<td class="content"><input name="txtName" type="text" class="box" id="txtName" value="<?php echo $cat_name; ?>" size="30" maxlength="50"></td>
</tr>
<tr>
<td width="150" class="label">Descriere</td>
<td class="content"> <textarea name="mtxDescription" cols="50" rows="4" class="box" id="mtxDescription"><?php echo $cat_description; ?></textarea></td>
</tr>
<tr>
<td width="150" class="label">Imagine</td>
<td class="content">
<input name="fleImage" type="file" id="fleImage" class="box">
<?php
if ($cat_image != '') {
?>
<br>
<img src="<?php echo WEB_ROOT . CATEGORY_IMAGE_DIR . $cat_image; ?>"> <a href="javascript:deleteImage(<?php echo $cat_id; ?>);">Sterge Imagine
</a>
<?php
}
?>
</td>
</tr>

</table>
<p align="center">
<input name="btnModify" type="button" id="btnModify" value="Salveaza modificari" onClick="checkCategoryForm();" class="box">
<input name="btnCancel" type="button" id="btnCancel" value="Cancel" onClick="window.location.href='index.php';" class="box">
</p>
</form>
modify.php
Langa imaginea categorie, vei avea un link Sterge imagine cu ajutorul caruia vei sterge imaginea aferenta categoriei. Stergerea imaginei se va face apeland functia deleteImage().
Aceasta functie va sterge imaginea dupa ce in prealabil ai confirmat acesta actiunea intr-o fereastra javascript.

function deleteImage()
{
if (isset($_GET['catId']) && (int)$_GET['catId'] > 0) {
$catId = (int)$_GET['catId'];
} else {
header('Location: index.php');
}
_deleteImage($catId);
// modifica in baza de date
$sql = "UPDATE tbl_category
SET cat_image = ''
WHERE cat_id = $catId";
dbQuery($sql);
header("Location: index.php?view=modify&catId=$catId");
}


Dupa stergerea imaginii, modifici numele in baza de date. Va trebui doar sa setezi cat_image la un sir gol.

Stergerea unei categorii se face foarte simplu. Vei da click pe link-ul Sterge aferent categoriei dorite. Stergerea unei categorii va conduce la stergerea tuturor copiilor. Functia utilizata este deleteCategory().

Procesul consta in:

• Modifica cat_id pentru produsele din aceeasta categorie la 0.
• Sterge imaginea daca exista.
• Sterge categoria din baza de date.

Vizualizarea produselor

Aceasta pagina afiseaza toate produsele pe care le ai in baza de date. Poti sa le vezi pe toate sau doar pe cele dintr-o categorie. Vei afisa numele produsului, imaginea mica, categoria si link-urile Modifica si Sterge.

Pentru a selecta doar produsele dintr-o categorie, vei utiliza un combo box cu numele tuturor categoriilor si functia javascript viewProduct(). Aceasta functie va fi apelata atunci cand vei selecta o categorie in combo box. Daca doresti sa afisezi toate produsele, vei alege Toate produsele in combo box.

Iata codul fisierului list.php, responsabil cu afisarea produselor:

<?php
if (!defined('WEB_ROOT')) {
exit;
}


if (isset($_GET['catId']) && (int)$_GET['catId'] > 0) {
$catId = (int)$_GET['catId'];
$sql2 = " AND p.cat_id = $catId";
$queryString = "catId=$catId";
} else {
$catId = 0;
$sql2 = '';
$queryString = '';
}

// pentru paginare
// cate randuri sa afisam pe pagina
$rowsPerPage = 5;

$sql = "SELECT pd_id, c.cat_id, cat_name, pd_name, pd_thumbnail
FROM tbl_product p, tbl_category c
WHERE p.cat_id = c.cat_id $sql2
ORDER BY pd_name";
$result = dbQuery(getPagingQuery($sql, $rowsPerPage));
$pagingLink = getPagingLink($sql, $rowsPerPage, $queryString);

$categoryList = buildCategoryOptions($catId);

?>
<p> </p>
<form action="processProduct.php?action=addProduct" method="post" name="frmListProduct" id="frmListProduct">
<table width="100%" border="0" cellspacing="0" cellpadding="2" class="text">
<tr>
<td align="right">View products in :
<select name="cboCategory" class="box" id="cboCategory" onChange="viewProduct();">
<option selected>Toate categoriile</option>
<?php echo $categoryList; ?>
</select>
</td>
</tr>
</table>
<br>
<table width="100%" border="0" align="center" cellpadding="2" cellspacing="1" class="text">
<tr align="center" id="listTableHeader">
<td>Nume produs</td>
<td width="75">Imagine</td>
<td width="75">Categorie</td>
<td width="70">Modifica</td>
<td width="70">Sterge</td>
</tr>
<?php
$parentId = 0;
if (dbNumRows($result) > 0) {
$i = 0;

while($row = dbFetchAssoc($result)) {
extract($row);

if ($pd_thumbnail) {
$pd_thumbnail = WEB_ROOT . 'images/product/' . $pd_thumbnail;
} else {
$pd_thumbnail = WEB_ROOT . 'images/no-image-small.png';
}



if ($i%2) {
$class = 'row1';
} else {
$class = 'row2';
}

$i += 1;
?>
<tr class="<?php echo $class; ?>">
<td><a href="index.php?view=detail&productId=<?php echo $pd_id; ?>"><?php echo $pd_name; ?></a></td>
<td width="75" align="center"><img src="<?php echo $pd_thumbnail; ?>"></td>
<td width="75" align="center"><a href="?c=<?php echo $cat_id; ?>"><?php echo $cat_name; ?></a></td>
<td width="70" align="center"><a href="javascript:modifyProduct(<?php echo $pd_id; ?>);">Modifica</a></td>
<td width="70" align="center"><a href="javascript:deleteProduct(<?php echo $pd_id; ?>, <?php echo $catId; ?>);">Sterge</a></td>
</tr>
<?php
}
?>
<tr>
<td colspan="5" align="center">
<?php
echo $pagingLink;
?></td>
</tr>
<?php
} else {
?>
<tr>
<td colspan="5" align="center">Nu sunt produse</td>
</tr>
<?php
}
?>
<tr>
<td colspan="5"> </td>
</tr>
<tr>
<td colspan="5" align="right"><input name="btnAddProduct" type="button" id="btnAddProduct" value="Adauga produs" class="box" onClick="addProduct(<?php echo $catId; ?>)"></td>
</tr>
</table>
<p> </p>
</form>
list.php

Codul este unul foarte simplu. Doar executa o interogare pentru a cicla printre produse si a afisa informatiile legate de produse. Daca exista mai mult de 5 produse pe pagina, vei afisa produsele in mai multe pagini.

function getPagingQuery($sql, $itemPerPage = 10)
{
if (isset($_GET['page']) && (int)$_GET['page'] > 0) {
$page = (int)$_GET['page'];
} else {
$page = 1;
}
// incepe de la acest rand
$offset = ($page - 1) * $itemPerPage;
return $sql . " LIMIT $offset, $itemPerPage";
}


Paginarea se face utilizand cuvantul cheie MySQL LIMIT. Vei specifica punctul de plecare si numarul de randuri returnate. Functia getPagingLink() returneaza link-urile paginilor.

Adaugarea produselor

Adaugarea unui produs in catalogul tau este un proces foarte simplu. Doar introduci informatiile produsului si apesi butonul Adauga. Vei avea nevoie de urmatoarele date despre produs:
• Categorie
• Nume
• Descriere
• Pret
• Cantitate in stoc
• Imagine

Toate campurile sunt obligatorii, exceptand imaginea. Nu sunt mari diferente fata de adaugarea unei categorii. In partea de sus a formularului, ai un combo box care iti prezinta toate categoriile, din care vei selecta una pentru produsul tau. Lista cu categoriile este construita de functia buildCategoryOptions(). Iata codul care formeaza aceasta lista:

<?php
// cauta categoriile in baza de date
// construieste combo bxul
$list = '';
foreach ($categories as $key => $value) {
$name = $value['name'];
$children = $value['children'];

$list .= "<optgroup label="$name">";

foreach ($children as $child) {
$list .= "<option value="{$child['id']}"";
if ($child['id'] == $catId) {
$list.= " selected";
}

$list .= ">{$child['name']}</option>rn";
}

$list .= "</optgroup>";
}
// ...
?>


Daca veti alege Adauga un produs nou din lista de produse, vei vedea ca in formular, categoria va fi selectata deja la cea corecta.
Cantitatea de produse este limitata la 65.535, deoarece ai in definitia tabelei smallint(5). Este suficient pentru aproape orice magazin online, dar daca doriti sa pui mai nulte produse in stoc, modifica la mediumint(8).

Imaginea pe care trebuie s-o furnizezi este imaginea mare a produsului. Scriptul va genera un thumbnail pentru aceasta imagine pe care o va afisa in lista de produse. Imaginile vor trebuie sa fie insa doar jpeg sau gif.

Editarea si stergerea produselor

Nu cred ca trebuie sa explic prea mult aici, pentru ca este un proces identic cu cel de la categorii. Vei afisa formularul unde modifici datele produsului si langa imagine pui un link necesar stergerii ei.

Procesul de stergere a unui produs se deruleaza astfel:
• Sterge toate referintele despre acest produs din tbl_order_item.
• Sterge toate referintele din tbl_cart.
• Sterge imaginea mica a produslui si thumbnail-ul.
• Sterge produsul din baza de date.

Iata si codul functiei deleteProduct() responsabila pentru acest proces:

function deleteProduct()
{
if (isset($_GET['productId']) && (int)$_GET['productId'] > 0) {
$productId = (int)$_GET['productId'];
} else {
header('Location: index.php');
}

// sterge toate referintele la acest produs
// tbl_order_item and tbl_cart
$sql = "DELETE FROM tbl_order_item
WHERE pd_id = $productId";
dbQuery($sql);

$sql = "DELETE FROM tbl_cart
WHERE pd_id = $productId";
dbQuery($sql);

// preia numele imaginii si a thumbnailului
$sql = "SELECT pd_image, pd_thumbnail
FROM tbl_product
WHERE pd_id = $productId";

$result =& dbQuery($sql);
$row =& dbFetchAssoc($result);

// sterge imagine si thumbnail
if ($row['pd_image']) {
unlink(SRV_ROOT . 'images/product/' . $row['pd_image']);
unlink(SRV_ROOT . 'images/product/' . $row['pd_thumbnail']);
}

// sterge produsul din baza de date
$sql = "DELETE FROM tbl_product
WHERE pd_id = $productId";
dbQuery($sql);

header('Location: index.php');
}


Administrarea comenzilor

Toate comenzile clientilor vor fi afisate aici. Poti vedea comenzile si lua o decizie in cazul lor. De exemplu, la inceput, toate comenzile au statutul Nou. Dupa ce trimiti pachetul la client, poti sa schimbi statusul unei comenzi in Onorat.

Statusurile comenzilor pot fi:
• Nou
• Onorat
• Anulat
• Complet

Sa vedem ce inseamna fiecare.

Nou - Toate comenzile initiale au acest statut.
Onorat - O comanda impachetata si trimisa la client va avea acest statut.
Anulat - O comanda anulata de client sau din alte motive.
Complet - Dupa primirea coletului de catre client si realizarea platii, o comanda se poate considera completa.

Utilizand un combo box, vei putea alege sa vezi doar comenzile cu un anumit status.

Configurarea magazinului

Aici putem configura cateva informatii utilizate in intreg site-ul.
• Informatii despre magazin
• Nume
• Adresa
• Telefon
• E-mail
• Costul de expediere
• Modeda utilizata
• Un stegulet daca sa se trimita un email administratorului sau nu cand s-a facut o comanda

Informatiile legate de magazin pot fi vizualizate in footer. Nu ar trebuie sa lasi nici un camp liber. Aceste campuri sunt foarte importante daca doresti sa ai un business adevarat. Acest lucru poate creste increderea clienutului in dumneavoastra si va poate mari vanzarile.

<?php
if (!defined('WEB_ROOT')) {
exit;
}
?>
<p> </p>
<table width="100%" border="0" cellspacing="0" cellpadding="10">
<tr>
<td align="center">
<p> <?php echo '2005 - ' . date('Y'); ?> <?php echo $shopConfig['name']; ?></p>
<p>Adresa : <?php echo $shopConfig['address']; ?><br>
Telefon : <?php echo $shopConfig['phone']; ?><br>
Email : <a href="mailto:<?php echo $shopConfig['email']; ?>"><?php echo $shopConfig['email']; ?></a></p>
<p><br>

</tr>
</table>
</body>
</html>
footer.php

Moneda este un simplu combo box din care veti selecta intre leu, dolar si euro.

Daca doresti sa trimiti un email la fiecare comanda facuta catre administrator, poti bifa acest lucru. Daca insa ai un magazin online foarte activ, ar fi bine sa dezactivezi optiunea aceasta pentru ca veti fi bombardat cu foarte multe email-uri si s-ar putea ca server-ul tau de mail sa creada ca are de-a face cu spam-uri.
« Realizarea comenzii Instalare Apache, MySQL si PHP in Windows »
3 comentarii
adi94 27 noiembrie 2011, 21:27 1
Foarte tare..as avea si eu nevoie de putin ajutor cu php-ul.
Poate ati putea face o noua lectie despre asta sau doar sa-mi dati nu sfat(daca nu e prea mare deranjul)
Am de facut un chestionar cu 10 intrebari(pana aici tot e bine si frumos) dar la sfarsitul chestionarului trebuie sa-mi afiseze la cate intrebari a fost raspuns corect si la cate gresit.
Daca m-ar putea ajuta cineva i-as fi recunoscator.
Multumesc anticipat!
  0    Raspunde
123456 13 decembrie 2013, 12:55 2
salut. functia shopconfig unde este definita? ca o vad folosita dar nu o gasesc nicaieri definita.
  0    Raspunde
viorica-viky 25 februarie 2015, 20:34 3
buna!am si eu o rugaminte ma poate ajuta cineva sa realizez gestiunea stocurilor intr-un magazin online in php
  0    Raspunde
Adauga comentariu

Pentru a adauga comentarii trebuie sa fii membru eCursuri.ro

Intra in contul tau sau inregistreaza-te GRATUIT (dreapta sus)
Publicitate
Cuprinsul cursului
Limbajul PHP
1. Introducere in limbajul PHP
2. Variabile PHP
3. Operatori PHP
4. Structuri de control
5. Utilizarea tablourilor si scrierea functiilor
6. PHP orientat spre obiecte
MySQL
7. Introducere in MySQL
8. Structura si arhitectura bazelor de date
9. Construirea bazei de date
10. Interogarea INSERT
11. Interogarea SELECT
12. Interogarile UPDATE si DELETE
Realizarea magazinului online
13. Introducere in realizarea magazinul online
14. Crearea bazei de date
15. Pagina principala
16. Afisarea produselor
17. Cosul de cumparaturi
18. Realizarea comenzii
19. Modulul de administrare
20. Instalare Apache, MySQL si PHP in Windows
Cursuri noi Top cursuri
Curs de legislatie rutiera

7 lectii online
Excel prin exemple

10 lectii online
Windows XP prin exemple

10 lectii online
Infiintarea unei firme

6 lectii online
Gramatica limbii engleze

27 lectii online
Introducere in e-Business

25 lectii online
Curs de Machiaj

13 lectii online
Curs de Fashion

17 lectii online
Curs de Barman

10 lectii online
HTML pe intelesul tuturor

11 lectii online
cursuri
Copyright © 2005-2011 - eCursuri.ro - toate drepturile rezervate - E-mail: contact@ecursuri.ro Cursuri și certificări GDPR