Documente Academic
Documente Profesional
Documente Cultură
Cum Se Creeaza Un Blog in PHP Si Baza de Date MySQL - Partea IV
Cum Se Creeaza Un Blog in PHP Si Baza de Date MySQL - Partea IV
PARTEA IV
Aceasta este partea a patra despre cum să construiești un blog cu PHP și MySQL. Este foarte important să fi
parcurs deja primele trei părți.
Până acum am creat o zonă publică care afișează postările publicate dintr-un tabel de postări din baza de
date MySQL. De asemenea, am finalizat un sistem de înregistrare a utilizatorilor care se ocupă de conectare
atât pentru utilizatorii administratori, cât și pentru utilizatorii normali. În backend, utilizatorul administrator
conectat poate crea acum alți utilizatori administratori, precum și subiecte.
În această secțiune, vom lucra la postările de pe blog. Vom crea o pagină care oferă utilizatorilor (sau
autorilor) administratori conectați un formular pentru a crea o nouă postare pe blog.
Vom crea două fișiere: fișierul posts.php în folderul admin și post_functions.php în folderul admin/includes.
Fișierul posts.php listează toate postările obținute din baza de date într-un format de tabel, în timp ce
post_functions.php conține funcții care efectuează operațiuni pe postări, cum ar fi interogarea acestora din
baza de date și returnarea lor în fișierul posts.php.
<td>
<a class="fa fa-pencil btn edit"
href="create_post.php?edit-post=<?php echo $postare['id'] ?>">
</a>
</td>
<td>
<a class="fa fa-trash btn delete"
href="create_post.php?delete-post=<?php echo $postare['id'] ?>">
</a>
</td>
</tr>
<?php endforeach?>
</tbody>
</table>
<?php endif?>
</div>
<!-- // Afiseaza inregistrarile din BD -->
</div>
</body>
</html>
În secțiunea de sus, am inclus fișierul post_functions.php nou creat.
Să-l deschidem și să adăugăm codul care preia postările din baza de date.
<?php
// variabilele postarii
$id_postare = 0;
$editeazaPostare = false;
$publicat = 0;
$titlu = "";
$slug_postare = "";
$continut = "";
$imagine = "";
$subiect_postare = "";
/* - - - - - - - - - -
- Functii postare
- - - - - - - - - - -*/
// Preia toate inregistrarile din BD
function getToatePostarile()
{
global $conn;
$postari_finale = array();
foreach ($postari as $postare) {
$postare['autor'] = getAutorPostareDupaID($postare['id_utilizator']);
array_push($postari_finale, $postare);
}
return $postari_finale;
}
// preia autorul / username de la postare
function getAutorPostareDupaID($id_utilizator)
{
global $conn;
$sql = "SELECT username FROM utilizatori WHERE id=$id_utilizator";
$result = mysqli_query($conn, $sql);
if ($result) {
// returneaza username
return mysqli_fetch_assoc($result)['username'];
} else {
return null;
}
}
Acum accesați http://localhost/blog-php/login.php și conectați-vă cu numele de utilizator și parola pe care
le-ați creat în ultimul tutorial. Dacă nu vă conectați, veți întâlni erori.
După conectare, accesați http://localhost/blog-php/admin/posts.php
Dacă totul a mers bine, veți vedea că pagina are 2 postări (cele pe care le-am creat mai devreme), afișate
într-un tabel.
În acest moment, putem interoga baza de date pentru postări și le putem lista într-un format tabelar. Hai
să facem un formular pentru crearea de fapt a postărilor. Creați un fișier create_post.php în dosarul de
administrator (admin) și scrieți acest cod:
<?php include('../config.php'); ?>
<?php include(ROOT_PATH . '/admin/includes/admin_functions.php'); ?>
<?php include(ROOT_PATH . '/admin/includes/post_functions.php'); ?>
<?php include(ROOT_PATH . '/admin/includes/head_section.php'); ?>
<!-- Preia toate subiectele -->
<?php $subiecte = getToateSubiectele(); ?>
<title>Admin | Creeaza postare</title>
</head>
<body>
<!-- admin navbar -->
<?php include(ROOT_PATH . '/admin/includes/navbar.php') ?>
<!-- daca se editeaza postarea, este nevoie de ID pentru identificarea acesteia -->
<?php if ($editeazaPostare === true): ?>
<input type="hidden" name="post_id" value="<?php echo $id_postare; ?>">
<?php endif ?>
</form>
</div>
<!-- // formularul de mijloc - pentru a crea si edita -->
</div>
</body>
</html>
<script>
CKEDITOR.replace('body');
</script>
De multe ori, pentru o postare pe blog, va trebui să scriem un text în caractere aldine, cursive, subliniate,
titluri, liste ordonate și neordonate, precum și să încărcăm imagini. Pentru a face acest lucru, vom avea
nevoie de un ckeditor care să ofere o zonă de text „bogat” cu aceste caracteristici. Pentru asta, trebuie să
includem scriptul (codul) plugin-ului ckeditor, lucru pe care l-am făcut deja în fișierul head_section.php.
Pentru a activa acest ckeditor într-o zonă text, trebuie făcute 3 lucruri:
1. Trebuie să includem scriptul sursă CKEditor (așa cum am făcut deja în fișierul head_section.php)
2. Trebuie să avem o zonă text și să-i dăm un id (spunem id = „body”, așa cum am făcut în acest caz)
3. În cele din urmă, trebuie să inițializăm textarea cu acest script (așa cum am făcut în create_post.php):
<script>
CKEDITOR.replace('body');
</script>
/* - - - - - - - - - -
- continuare functii postare
- - - - - - - - - - -*/
function creeazaPostare($request_values)
{
global $conn, $errors, $titlu, $imagine, $id_subiect, $continut, $publicat;
$titlu = esc($request_values['title']);
$continut = htmlentities(esc($request_values['body']));
if (isset($request_values['topic_id'])) {
$id_subiect = esc($request_values['topic_id']);
}
if (isset($request_values['publish'])) {
$publicat = esc($request_values['publish']);
}
// creeaza slug:
$slug_postare = executaSlug($titlu);
// valideaza formular
if (empty($titlu)) { array_push($errors, "Este necesar titlul postarii"); }
if (empty($continut)) { array_push($errors, "Nu ai pus continut"); }
if (empty($id_subiect)) { array_push($errors, "Trebuie sa setezi subiectul postarii"); }
// preia numele imaginii
$imagine = $_FILES['featured_image']['name'];
if (empty($imagine)) { array_push($errors, "Este necesara o imagine"); }
// folderul unde se salveaza imaginea
$target = "../static/images/" . basename($imagine);
if (!move_uploaded_file($_FILES['featured_image']['tmp_name'], $target)) {
array_push($errors, "Eroare de incarcare. Verificati setarile serverului ");
}
// Asigura ca nici o postare nu este salvata de doua ori
$query_verifica_postare = "SELECT * FROM postari WHERE slug='$slug_postare' LIMIT 1";
$result = mysqli_query($conn, $query_verifica_postare);
/* * * * * * * * * * * * * * * * * * * * *
* - Preia ID-ul postarii ca parametru
* - Preia postarea din baza de date
* - seteaza campurile formularului pentru editare
* * * * * * * * * * * * * * * * * * * * * */
function editeazaPostare($role_id)
{
global $conn, $titlu, $slug_postare, $continut, $publicat, $editeazaPostare, $id_postare;
$sql = "SELECT * FROM postari WHERE id=$role_id LIMIT 1";
$result = mysqli_query($conn, $sql);
$postare = mysqli_fetch_assoc($result);
// seteaza valorile din formular pentru a fi actualizate
$titlu = $postare['titlu'];
$continut = $postare['continut'];
$publicat = $post['publicat'];
}
function actualizeazaPostare($request_values)
{
global $conn, $errors, $id_postare, $titlu, $imagine, $id_subiect, $continut, $publicat;
$titlu = esc($request_values['title']);
$continut = esc($request_values['body']);
$id_postare = esc($request_values['post_id']);
if (isset($request_values['topic_id'])) {
$id_subiect = esc($request_values['topic_id']);
}
// creeaza slug
$slug_postare = executaSlug($titlu);
Un ultim lucru, hai să adăugăm codul pentru a publica / anula publicarea postării. În același fișier
post_functions.php, adăugați acest cod:
/* - - - - - - - - - -
- continuare la actiunile de postare
- - - - - - - - - - -*/
// daca utilizatorul apasa pe butonul de publicare
if (isset($_GET['publish']) || isset($_GET['unpublish'])) {
$message = "";
if (isset($_GET['publish'])) {
$message = "Postarea publicata cu succes";
$id_postare = $_GET['publish'];
} else if (isset($_GET['unpublish'])) {
$message = "Postarea nu mai este publica";
$id_postare = $_GET['unpublish'];
}
comutaPostarePublicata($id_postare, $message);
}
//.....
// sterge postare
//.....