You are on page 1of 18

Cum se creează un blog in PHP si baza de date MySQL

PARTEA III
Aceasta este partea a treia despre cum să construiești un blog cu PHP și MySQL. Este foarte important să
parcurgeți în totalitate partea I si II.
În ultimele două părți ale acestui proiect, am terminat de creat zona publică. Am configurat baza de date,
am introdus unele date în tabelele bazei de date și am putut să le interogăm și să le afișăm pe pagină.
Dar nu vrem întotdeauna să creăm utilizatori, postări, subiecte folosind un client de baze de date precum
PHPMyAdmin, nu-i așa? Vrem o interfață pe site și un utilizator conectat cu privilegii de administrator pentru
a face acest lucru.
Când un utilizator cu privilegii de administrator se conectează, acesta este
redirecționat automat către tabloul de bord al administratorului. Dar nu am creat
încă un utilizator de administrator în sistemul nostru. Vom face asta imediat.
În folderul blog-php/admin, creați un fișier numit dashboard.php.
<?php include('../config.php'); ?>
<?php include(ROOT_PATH . '/admin/includes/admin_functions.php'); ?>
<?php include(ROOT_PATH . '/admin/includes/head_section.php'); ?>
<title>Admin | Dashboard</title>
</head>
<body>
<div class="header">
<div class="logo">
<a href="<?php echo BASE_URL .'admin/dashboard.php' ?>">
<h1>Blog - Admin</h1>
</a>
</div>
<?php if (isset($_SESSION['utilizator'])): ?>
<div class="user-info">
<span><?php echo $_SESSION['utilizator']['username'] ?></span> &nbsp; &nbsp;
<a href="<?php echo BASE_URL . '/logout.php'; ?>" class="logout-btn">Deconectare</a>
</div>
<?php endif ?>
</div>
<div class="container dashboard">
<h1>Bine ai venit</h1>
<div class="stats">
<a href="users.php" class="first">
<span>43</span> <br>
<span>Utilizatori noi inregistrati</span>
</a>
<a href="posts.php">
<span>43</span> <br>
<span>Postari publicate</span>
</a>
<a>
<span>43</span> <br>
<span>Comentarii publicate</span>
</a>
</div>
<br><br><br>
<div class="buttons">
<a href="users.php">Adauga utilizatori</a>
<a href="posts.php">Adauga postari</a>
</div>
</div>
</body>
</html>

Accesați în browser http://localhost/blog-php/admin/dashboard.php și veți vedea


că nu există stilizare și există mesaje de eroare despre eșecul includerii a două
fișiere. Asta pentru că nu am creat încă aceste fișiere. Hai sa facem asta!
Creați un folder în dosarul de administrare numit includes.
Motivul pentru care am creat un folder separat includes in zona de administrare este să ne asigurăm că
toate fișierele de administrare se află într-un singur folder (administrator).
În acest folder nou creat, creați un fișier numit head_section.php. Deschideți head_section.php și adăugați
acest cod:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<!-- Fonturi Google -->
<link href="https://fonts.googleapis.com/css?family=Averia+Serif+Libre|Noto+Serif|Tangerine" rel="stylesheet">
<!-- Font awesome -->
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css" />
<!-- ckeditor -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/ckeditor/4.8.0/ckeditor.js"></script>
<!-- stilizare -->
<link rel="stylesheet" href="../static/css/admin_styling.css">
Reîncărcați pagina dashboard.php din browser. Acum, mesajul de eroare care rămâne este pentru un singur
fișier (admin_functions.php). Vom ajunge la acesta în curând.

Odată ajunși în backend, utilizatorul poate crea, citi, actualiza și șterge utilizatori,
postări și subiecte. Să începem cu utilizatorii. În folderul de administrare (admin),
creați un fișier numit users.php, deschideți-l și scrieți următorul cod:
<?php include('../config.php'); ?>
<?php include(ROOT_PATH . '/admin/includes/admin_functions.php'); ?>
<?php
// Preia toti administratorii din baza de date
$administratori = getAdministratori();
$roluri = ['Admin', 'Autor'];
?>
<?php include(ROOT_PATH . '/admin/includes/head_section.php'); ?>
<title>Admin | Gestioneaza utilizatori</title>
</head>
<body>
<!-- admin navbar -->
<?php include(ROOT_PATH . '/admin/includes/navbar.php') ?>
<div class="container content">
<!-- Meniul din stanga -->
<?php include(ROOT_PATH . '/admin/includes/menu.php') ?>
<!-- Formular din mijloc - pentru a crea si edita -->
<div class="action">
<h1 class="page-title">Creeaza/Editeaza Administrator Utilizator</h1>

<form method="post" action="<?php echo BASE_URL . 'admin/users.php'; ?>" >

<!-- erori de validare a formularului -->


<?php include(ROOT_PATH . '/includes/errors.php') ?>

<!-- Daca editeaza utilizatorul curent, este nevoie pentru ID pentru a identifica utilizatorul -->
<?php if ($editeazaUtilizatorul === true): ?>
<input type="hidden" name="admin_id" value="<?php echo $admin_id; ?>">
<?php endif ?>

<input type="text" name="username" value="<?php echo $username; ?>" placeholder="Utilizator">


<input type="email" name="email" value="<?php echo $email ?>" placeholder="Email">
<input type="password" name="password" placeholder="Parola">
<input type="password" name="passwordConfirmation" placeholder="Confirmare parola">
<select name="role">
<option value="" selected disabled>Atribuie rol</option>
<?php foreach ($roluri as $key => $rol): ?>
<option value="<?php echo $rol; ?>"><?php echo $rol; ?></option>
<?php endforeach ?>
</select>

<!-- daca editeaza utilizatorul curent, afiseaza butonul de actualizare in loc de cel de creare -->
<?php if ($editeazaUtilizatorul === true): ?>
<button type="submit" class="btn" name="update_admin">ACTUALIZARE</button>
<?php else: ?>
<button type="submit" class="btn" name="create_admin">Salvare utilizator</button>
<?php endif ?>
</form>
</div>
<!-- // Formularul din mijloc - pentru a crea si edita -->

<!-- Afiseaza inregistrarile din baza de date-->


<div class="table-div">
<!-- Afiseaza mesajele de notificare -->
<?php include(ROOT_PATH . '/includes/messages.php') ?>

<?php if (empty($administratori)): ?>


<h1>Nu sunt administratori in baza de date</h1>
<?php else: ?>
<table class="table">
<thead>
<th>Nr.</th>
<th>Admin</th>
<th>Rol</th>
<th colspan="2">Actiune</th>
</thead>
<tbody>
<?php foreach ($administratori as $key => $admin): ?>
<tr>
<td><?php echo $key + 1; ?></td>
<td>
<?php echo $admin['username']; ?>, &nbsp;
<?php echo $admin['email']; ?>
</td>
<td><?php echo $admin['rol']; ?></td>
<td>
<a class="fa fa-pencil btn edit"
href="users.php?edit-admin=<?php echo $admin['id'] ?>">
</a>
</td>
<td>
<a class="fa fa-trash btn delete"
href="users.php?delete-admin=<?php echo $admin['id'] ?>">
</a>
</td>
</tr>
<?php endforeach ?>
</tbody>
</table>
<?php endif ?>
</div>
<!-- // Afiseaza inregistrarile din baza de date -->
</div>
</body>
</html>

Atât trebuie să facem în fișierul users.php. Crearea, editarea și ștergerea unui utilizator va fi făcută în acest
fișier.
La începutul fișierului users.php, apelăm o funcție getAdministratori() care returnează o listă cu toți
utilizatorii de administrare din baza de date. Această funcție trebuie definită în fișierul admin_functions.php
pe care nu l-am creat încă, dar îl puteți vedea inclus în fișierul users.php chiar înainte de apelul funcției.
În folderul admin/includes, creați admin_functions.php și adăugați acest cod:
<?php
// Variabile Admin utilizator
$admin_id = 0;
$editeazaUtilizatorul = false;
$username = "";
$rol = "";
$email = "";
// variabile generale
$errors = [];

/* - - - - - - - - - -
- Actiunile administratorilor
- - - - - - - - - - -*/
// daca utilizatorul apasa butonul de creare admin
if (isset($_POST['create_admin'])) {
creeazaAdmin($_POST);
}
// Daca apasa pe editare amin
if (isset($_GET['edit-admin'])) {
$editeazaUtilizatorul = true;
$admin_id = $_GET['edit-admin'];
editeazaAdmin($admin_id);
}
// daca apasa pe actualizare admin
if (isset($_POST['update_admin'])) {
actualizeazaAdmin($_POST);
}
// Daca apasa pe stergere admin
if (isset($_GET['delete-admin'])) {
$admin_id = $_GET['delete-admin'];
stergeAdmin($admin_id);
}
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* - Returneaza toti utilizatorii administrator si rolurile corespunzatoare
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
function getAdministratori(){
global $conn, $roluri;
$sql = "SELECT * FROM utilizatori WHERE rol IS NOT NULL";
$result = mysqli_query($conn, $sql);
$utilizatori = mysqli_fetch_all($result, MYSQLI_ASSOC);

return $utilizatori;
}
/* * * * * * * * * * * * * * * * * * * * *
* - Scapa de valoarea trimisa din formular, astfel incat sa impiedice injectia SQL
* * * * * * * * * * * * * * * * * * * * * */
function esc(String $value){
global $conn;
$val = trim($value);
$val = mysqli_real_escape_string($conn, $value);
return $val;
}
// Primeste un sir de tipul "Ana are mere"
// si returneaza "ana-are-mere"
function executaSlug(String $string){
$string = strtolower($string);
$slug = preg_replace('/[^A-Za-z0-9-]+/', '-', $string);
return $slug;
}
?>
Reîncărcați pagina dashboard.php din browser și mesajul de eroare ar fi trebuit să dispară.
Următorul pas este să includem pagina navbar.php și pagina menu.php. Acestea sunt segmente repetitive
de la paginile de administrare, la fel cum a fost cazul în zona publică.
Deci, creați aceste 2 fișiere în folderul admin/includes: navbar.php și menu.php.
navbar.php
<div class="header">
<div class="logo">
<a href="<?php echo BASE_URL .'admin/dashboard.php' ?>">
<h1>Blog - Admin</h1>
</a>
</div>
<div class="user-info">
<span><?php echo $_SESSION['utilizator']['username'] ?></span> &nbsp; &nbsp; <a href="<?php echo BASE_URL .
'/logout.php'; ?>" class="logout-btn">Deconectare</a>
</div>
</div>

menu.php
<div class="menu">
<div class="card">
<div class="card-header">
<h2>Actiuni</h2>
</div>
<div class="card-content">
<a href="<?php echo BASE_URL . 'admin/create_post.php' ?>">Creeaza postari</a>
<a href="<?php echo BASE_URL . 'admin/posts.php' ?>">Gestioneaza postarile</a>
<a href="<?php echo BASE_URL . 'admin/users.php' ?>">Gestioneaza utilizatorii</a>
<a href="<?php echo BASE_URL . 'admin/topics.php' ?>">Gestioneaza subiectele</a>
</div>
</div>
</div>

Acum, hai să creăm stilizarea pentru secțiunea de administrare. În folderul blog-php /static /css /, creați un
fișier numit admin_styling.css și adăugați acest cod:
/* * * * * * * * * *
* Setari implicite
* * * * * * * * * */
* { margin: 0px; padding: 0px; }
a { text-decoration: none; }
h1, h2, h3, h4, h5, h6 { font-family: 'Noto Serif', serif; }
/* forms */
form { width: 60%; margin: 5px auto; padding-bottom: 50px; }
form input[type=file], input[type=email], input[type=password], input[type=text],
form select, form textarea {
width: 100%;
display: block;
padding: 13px 13px;
font-size: 1em;
margin: 5px auto 10px;
border-radius: 3px;
box-sizing : border-box;
background: transparent;
border: 1px solid #3E606F;
}
input[type="checkbox"] { height: 20px; float: left; }
form button { float: right; margin-left: 24%; }
form input:focus { outline: none; }
label { margin-top: 20px; float: left; }
/* tables */
table { border-collapse: collapse; width: 70%; margin: 20px auto; }
th, td { padding: 8px; text-align: left; border: 1px solid #ddd; }
th { text-align: center;}
/* buttons */
.btn {
color: white;
background: #4E6166;
text-align: center;
border: none;
border-radius: 5px;
display: block;
letter-spacing: .1em;
padding: 13px 20px;
text-decoration: none;
}
/* * * * * * * * * *
* Antet
* * * * * * * * * */
.header {
padding: 15px 45px;
font-family: 'Noto Serif', serif;
color: white;
background: black;
}
.header .logo { width: 50%; float: left; }
.header .logo h1 { color: white; }
.header .user-info { width: 10%; margin-top: 10px; float: right;}
.header .logout-btn { color: red; text-decoration: none; }
.header:after{ content: ""; display: block; clear: both; }
/* * * * * * * * * *
* Panou de control / Dashboard
* * * * * * * * * */
.container {
width: 95%;
margin: 5px auto 50px;
border: 1px solid #BFBCB3;
padding: 10px 0px 50px;
}
.container:after { content: ""; display: block; clear: both; }
.container.dashboard h1 { text-align: center; margin: 25px; }
.container.dashboard .stats a {
display: inline-block;
padding: 30px;
margin: 5px;
width: 25%;
text-align: center;
border-radius: 3px;
border: 1px solid #BFBCB3;
}
.container.dashboard .stats a.first { margin-left: 25px; }
.container.dashboard .stats a:hover { cursor: pointer; background-color: #E1E1E1; }
.container.dashboard .buttons { margin-left: 15px; }
.container.dashboard .buttons a {
display: inline-block;
margin: 10px;
text-decoration: none;
color: #444;
padding: 10px 25px;
border: none;
background-color: #0E7D92;
color: white;
}
/* * * * * * * * * *
* Continutul paginii
* * * * * * * * * */
.container.content .menu { width: 16%; float: left; padding: 40px 10px; }
/* Meniu actiuni */
.container.content .menu .card .card-header {
padding: 10px;
text-align: center;
border-radius: 3px 3px 0px 0px;
background: #3E606F;
}
.container.content .menu .card .card-header h2 { color: white; }
.container.content .menu .card .card-content a {
display: block;
box-sizing: border-box;
padding: 8px 10px;
border-bottom: 1px solid #e4e1e1;
color: #444;
}
.container.content .menu .card .card-content a:hover {
padding-left: 20px; background: #F9F9F9; transition: 0.1s;
}
/* div actiuni (la mijloc) */
.container.content .action { width: 35%; float: left; text-align: center; }
.container.content .action form { width: 90%; }
.container.content .action .page-title { margin: 25px; }
.container.content .action.create-post-div { width: 80%; }
/* div tabel (Afiseaza inregistrarile din baza de date) */
.table-div { float: left; width: 47%; }
.table-div .message { width: 90%; margin-top: 20px; }
.table-div table { width: 90%; }
.table-div a.fa { color: white; padding: 3px; }
.table-div .edit { background: #004220; }
.table-div .delete { background: #F70E1A; }
.table-div .publish { background: red; }
.table-div .unpublish { background: green; }
/* * * * * * * * * *
* Erori de validare
* * * * * * * * * */
.message {
width: 100%;
margin: 0px auto;
padding: 10px 0px;
color: #3c763d;
background: #dff0d8;
border: 1px solid #3c763d;
border-radius: 5px;
text-align: center;
}
.error {color: #a94442; background: #f2dede; border: 1px solid #a94442; margin-bottom: 20px; }
.validation_errors p {text-align: left;margin-left: 10px;}

În browser, accesați http://localhost/blog-php/admin/users.php și veți vedea o eroare care spune că


fișierul messages.php nu este găsit. Creați un fișier numit messages.php în folderul blog-php/includes și
adăugați acest cod:
<?php if (isset($_SESSION['message'])) : ?>
<div class="message" >
<p>
<?php
echo $_SESSION['message'];
unset($_SESSION['message']);
?>
</p>
</div>
<?php endif ?>

Acesta afișează mesaje de notificare pentru a oferi utilizatorului feedback despre acțiunile sale.

CRUD (Creaza, Citeste, Actualizează și Sterge ) utilizatorii de administrare

Pagina users.php are deja un formular atât pentru crearea și actualizarea unui utilizator administrator, cât și
un tabel pentru listarea și ștergerea utilizatorilor. Mai rămâne doar să adăugăm funcțiile PHP care efectuează
aceste acțiuni. Deci, deschideți fișierul admin_functions.php și adăugați acest cod direct după Acțiunile
Administratorilor (după declarațiile if) din partea de sus a paginii și înainte de funcția getAdministratori ():
/* - - - - - - - - - - - -
- functii administrare
- - - - - - - - - - - - -*/
/* * * * * * * * * * * * * * * * * * * * * * *
* - Primeste date din formular
* - Creaza noi utilizatori de administrare
* - Returneaza toti utilizatorii admin dupa rol
* * * * * * * * * * * * * * * * * * * * * * */
function creeazaAdmin($request_values){
global $conn, $errors, $role, $username, $email;
$username = esc($request_values['username']);
$email = esc($request_values['email']);
$password = esc($request_values['password']);
$passwordConfirmation = esc($request_values['passwordConfirmation']);

if(isset($request_values['role'])){
$rol = esc($request_values['role']);
}
// validare formular: se asigura ca formularul este completat corect
if (empty($username)) { array_push($errors, "Este nevoie de nume de utilizator"); }
if (empty($email)) { array_push($errors, "Oops.. nu ai scris emailul"); }
if (empty($rol)) { array_push($errors, "Este necesar un rol pentru utilizatori");}
if (empty($password)) { array_push($errors, "Ai uitat sa pui parola"); }
if ($password != $passwordConfirmation) { array_push($errors, "Parolele nu se potrivesc"); }
// Asigura ca se introduce de mai multe ori un nume de utilizator
// Email-ul si utilizatorii ar trebui sa fie unici
$verif_utiliz_query = "SELECT * FROM utilizatori WHERE username='$username'
OR email='$email' LIMIT 1";
$result = mysqli_query($conn, $verif_utiliz_query);
$utilizator = mysqli_fetch_assoc($result);
if ($utilizator) { // daca exista
if ($user['username'] === $username) {
array_push($errors, "Utilizatorul deja exista");
}

if ($user['email'] === $email) {


array_push($errors, "Email-ul deja exista");
}
}
// inregistreaza utilizator daca nu sunt erori
if (count($errors) == 0) {
$password = md5($password);//cripteaza parola
$query = "INSERT INTO utilizatori (username, email, rol, password, creat_la, actualizat_la)
VALUES('$username', '$email', '$rol', '$password', now(), now())";
mysqli_query($conn, $query);

$_SESSION['message'] = "Utilizatorul admin a fost creat cu succes";


header('location: users.php');
exit(0);
}
}
/* * * * * * * * * * * * * * * * * * * * *
* - ia parametrul ID-ul adminului
* - Preia administratorul din BD
* - seteaza campurile active de la formular pentru editare
* * * * * * * * * * * * * * * * * * * * * */
function editeazaAdmin($admin_id)
{
global $conn, $username, $rol, $editeazaUtilizatorul, $admin_id, $email;

$sql = "SELECT * FROM utilizatori WHERE id=$admin_id LIMIT 1";


$result = mysqli_query($conn, $sql);
$admin = mysqli_fetch_assoc($result);

// seteaza valorile formularului ($username and $email)pentru a fi actualizate


$username = $admin['username'];
$email = $admin['email'];
}

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* - Primeste cererea de administrator din formular si actualizeaza BD
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
function actualizeazaAdmin($request_values){
global $conn, $errors, $rol, $username, $isEditingUser, $admin_id, $email;
// preia ID-ul administratorului pentru actualizare
$admin_id = $request_values['admin_id'];
// seteaza starea de editare la fals
$editeazaUtilizatorul = false;

$username = esc($request_values['username']);
$email = esc($request_values['email']);
$password = esc($request_values['password']);
$passwordConfirmation = esc($request_values['passwordConfirmation']);
if(isset($request_values['role'])){
$rol = $request_values['role'];
}
// inregistreaza utilizator daca nu sunt erori in formular
if (count($errors) == 0) {
$password = md5($password);

$query = "UPDATE utilizatori SET username='$username', email='$email', rol='$rol', password='$password' WHERE


id=$admin_id";
mysqli_query($conn, $query);

$_SESSION['message'] = "Utilizatorul a fost actualizat cu succes";


header('location: users.php');
exit(0);
}
}
// sterge utilizatorul
function stergeAdmin($admin_id) {
global $conn;
$sql = "DELETE FROM utilizatori WHERE id=$admin_id";
if (mysqli_query($conn, $sql)) {
$_SESSION['message'] = "Utilizatorul a fost sters";
header("location: users.php");
exit(0);
}
}

Codul pe care tocmai l-am adăugat are 3 părți principale: inițializarea variabilelor utilizatorului de
administrare, acțiunile utilizatorului de administrare și funcțiile utilizatorului de administrare, în această
ordine. Vom folosi același format atunci când adăugăm codul pentru Subiecte. Deocamdată, putem deja
crea, citi, actualiza și șterge un utilizator.
Acum accesați http://localhost/blog-php/admin/users.php. Creați un utilizator și atribuiți rolul de
Administrator. Asigurați-vă că vă amintiți numele de utilizator și parola acestui utilizator de administrare,
deoarece în viitor ne vom conecta folosind aceste date.
De exemplu: nume de utilizator: popescu, e-mail: popescu@test.com, parolă: ionpopescu.

Crearea, citirea, actualizarea si ștergerea Subiectelor


Pentru subiecte, vom crea doar un fișier, topics.php în folderul blog-php /admin /:

topics.php
<?php include('../config.php'); ?>
<?php include(ROOT_PATH . '/admin/includes/admin_functions.php'); ?>
<?php include(ROOT_PATH . '/admin/includes/head_section.php'); ?>
<!-- Preia toate subiectele din BD -->
<?php $subiecte = getToateSubiectele(); ?>
<title>Admin | Gestioneaza subiectele</title>
</head>
<body>
<!-- admin navbar -->
<?php include(ROOT_PATH . '/admin/includes/navbar.php') ?>
<div class="container content">
<!-- meniu lateral -->
<?php include(ROOT_PATH . '/admin/includes/menu.php') ?>

<!-- Formularul din centru pentru a edita si crea -->


<div class="action">
<h1 class="page-title">Creeaza/editeaza Subiecte </h1>
<form method="post" action="<?php echo BASE_URL . 'admin/topics.php'; ?>" >
<!-- valideaza erorile din formular -->
<?php include(ROOT_PATH . '/includes/errors.php') ?>
<!-- Daca editeaza subiectul este nevoie de ID pentru a-l identifica-->
<?php if ($editeazaSubiectul === true): ?>
<input type="hidden" name="topic_id" value="<?php echo $id_subiect; ?>">
<?php endif ?>
<input type="text" name="topic_name" value="<?php echo $nume_subiect; ?>" placeholder="Subiect">
<!-- Daca editeaza subiectul, arata butonul de actualizare, in loc de Creeaza -->
<?php if ($editeazaSubiectul === true): ?>
<button type="submit" class="btn" name="update_topic">ACTUALIZARE</button>
<?php else: ?>
<button type="submit" class="btn" name="create_topic">Salveaza subiect</button>
<?php endif ?>
</form>
</div>
<!-- // Formularul din centru pentru a edita si crea -->
<!-- Arata inregistrarile din BD -->
<div class="table-div">
<!-- Afiseaza mesajele de notificare -->
<?php include(ROOT_PATH . '/includes/messages.php') ?>
<?php if (empty($subiecte)): ?>
<h1>Nici un subiect in baza de date</h1>
<?php else: ?>
<table class="table">
<thead>
<th>Nr.</th>
<th>Nume Subiect</th>
<th colspan="2">Actiuni</th>
</thead>
<tbody>
<?php foreach ($subiecte as $key => $subiect): ?>
<tr>
<td><?php echo $key + 1; ?></td>
<td><?php echo $subiect['nume']; ?></td>
<td>
<a class="fa fa-pencil btn edit"
href="topics.php?edit-topic=<?php echo $subiect['id'] ?>">
</a>
</td>
<td>
<a class="fa fa-trash btn delete"
href="topics.php?delete-topic=<?php echo $subiect['id'] ?>">
</a>
</td>
</tr>
<?php endforeach ?>
</tbody>
</table>
<?php endif ?>
</div>
<!-- // Arata inregistrarile din BD -->
</div>
</body>
</html>

Apoi scriem codul PHP în interiorul admin_functions.php pentru a efectua operațiile pe subiect.

Următorul cod are trei secțiuni. Fiecare secțiune a fost etichetată deasupra folosind un comentariu, Cele trei
sunt variabile, acțiuni și funcții. Deci, în fișierul admin_functions.php, adăugați următorul cod, dar asigurați-
vă că îl împărțiți corespunzător, după cum se indică mai jos, folosind comentariile.
<?php
// Variabile Admin utilizator
// ......aici ar trebui sa fie variabilele .....

// Variabilele subiectelor
$id_subiect = 0;
$editeazaSubiectul = false;
$nume_subiect = "";

/* - - - - - - - - - -
- Actiunile administratorilor
- - - - - - - - - - -*/
//...

/* - - - - - - - - - -
- Actiuni subiect
- - - - - - - - - - -*/
//Daca utilizatorul apasa pe butonul de creare subiect
if (isset($_POST['create_topic'])) { creeazaSubiect($_POST); }
// Daca utilizatorul apasa pe butonul de editare
if (isset($_GET['edit-topic'])) {
$editeazaSubiectul = true;
$id_subiect = $_GET['edit-topic'];
editeazaSubiect($id_subiect);
}
// Daca utilizatorul apasa pe butonul de actualizare
if (isset($_POST['update_topic'])) {
actualizeazaSubiect($_POST);
}
// if user clicks the Delete topic button
if (isset($_GET['delete-topic'])) {
$id_subiect = $_GET['delete-topic'];
stergeSubiect($id_subiect);
}

/* - - - - - - - - - - - -
- functii administrare
- - - - - - - - - - - - -*/
//......

/* - - - - - - - - - -
- Functii subiecte
- - - - - - - - - - -*/
// Preia toate subiectele din BD
function getToateSubiectele() {
global $conn;
$sql = "SELECT * FROM subiecte";
$result = mysqli_query($conn, $sql);
$subiecte = mysqli_fetch_all($result, MYSQLI_ASSOC);
return $subiecte;
}
function creeazaSubiect($request_values){
global $conn, $errors, $nume_subiect;
$nume_subiect = esc($request_values['topic_name']);
// creeaza slug: daca subiectul este " Sfaturi Prietenesti", returneaza "sfaturi-prietenesti" ca slug
$slug_subiect = executaSlug($nume_subiect);
// valideaza formularul
if (empty($nume_subiect)) {
array_push($errors, "Este nevoie de numele subiectului");
}
// Ne asiguram ca nici un subiect nu este salvat de doua ori.
$query_verifica_subiect = "SELECT * FROM subiecte WHERE slug='$slug_subiect' LIMIT 1";
$result = mysqli_query($conn, $query_verifica_subiect);
if (mysqli_num_rows($result) > 0) { // daca exista subiect
array_push($errors, "Subiectul deja exista");
}
// inregistreaza subiectul daca nu sunt erori in formular
if (count($errors) == 0) {
$query = "INSERT INTO subiecte (nume, slug)
VALUES('$nume_subiect', '$slug_subiect')";
mysqli_query($conn, $query);

$_SESSION['message'] = "Subiectul a fost creat cu succes";


header('location: topics.php');
exit(0);
}
}
/* * * * * * * * * * * * * * * * * * * * *
* - Preia ID-ul subiectului ca parametru
* - Preia subiectul din BD
* - seteaza campurile formularului pentru editare
* * * * * * * * * * * * * * * * * * * * * */
function editeazaSubiect($id_subiect) {
global $conn, $nume_subiect, $editeazaSubiectul, $id_subiect;
$sql = "SELECT * FROM subiecte WHERE id=$id_subiect LIMIT 1";
$result = mysqli_query($conn, $sql);
$subiect = mysqli_fetch_assoc($result);
// seteaza valorile formularului ($nume_subiect) pentru a fi actualizate
$nume_subiect = $topic['nume'];
}
function actualizeazaSubiect($request_values) {
global $conn, $errors, $nume_subiect, $id_subiect;
$nume_subiect = esc($request_values['topic_name']);
$id_subiect = esc($request_values['topic_id']);
// creeaza slug: daca subiectul este " Sfaturi Prietenesti", returneaza "sfaturi-prietenesti"
$slug_subiect = executaSlug($nume_subiect);
// valideaza formularul
if (empty($nume_subiect)) {
array_push($errors, "Numele subiectului este necesar");
}
// actualizeaza subiectul daca nu sunt erori in formular
if (count($errors) == 0) {
$query = "UPDATE subiecte SET nume='$nume_subiect', slug='$slug_subiect' WHERE id=$id_subiect";
mysqli_query($conn, $query);

$_SESSION['message'] = "Subiectul a fost actualizat";


header('location: topics.php');
exit(0);
}
}
// sterge subiect
function stergeSubiect($id_subiect) {
global $conn;
$sql = "DELETE FROM subiecte WHERE id=$id_subiect";
if (mysqli_query($conn, $sql)) {
$_SESSION['message'] = "Subiectul a fost sters cu succes";
header("location: topics.php");
exit(0);
}
}

Asigurați-vă că fișierul se termina in ?>

Partea a III-a a tutorialului s-a incheiat.


În partea următoare, vom adăuga un formular pentru crearea postărilor. Folosim ckeditor.js pentru a oferi
utilizatorului posibilitatea de a adăuga stiluri textelor, imaginilor și listelor.

You might also like