Curs Php-mysql

Part. 1   --   Part. 3

Partea dificila la acest script si codul cel mai complicat este in fisierul care formeaza pagina de administrare, aici cu numele "add_del.php". In acest fisier se afla codul PHP si formularele pentru adaugarea meniurilor si paginilor in site si in baza de date, precum si scriptul de stergere a lor. Accesul la aceste functii se poate face numai dupa ce administratorul adauga intr-un formular datele de autentificare din "admin.php", deoarece la fiecare se verifica mai intai o sesiune de logare criptata MD5.
Imediat dupa tag-ul <body> al paginii este adaugata o conditie PHP "if()" care verifica existenta variabilei de sesiune setata la logare, daca aceasta nu exista sau nu e corecta, afiseaza formularul de autentificare, dupa care, cu instructiunea "exit;" se intrerupe executia codurilor urmatoare, care sunt pentru formularele de adaugare /stergere continut.
Inainte de codul HTML, este scriptul PHP, care e impartit in 4 parti distincte.
Ca sa intelegeti despre ce e vorba in explicatiile de mai jos, studiati in paralel si codul din "add_del.php", documentatiile adaugate.

1. - Se se include fisierul "admin.php", apoi, in prima parte se verifica datele pentru autentificare, primite de la formularul de logare, daca sunt corecte, creaza o variabila de sesiune compusa din numele si parola de admin, criptate cu MD5. Aceasta variabila e verificata la fiecare actiune de adaugare sau stergere date.

2. - Dupa aceasta urmeaza partea a doua din script, codul pentru adaugare meniuri si pagini in site. Detalii amanuntite gasiti in script.
In mare, se verifica sesiunea de logare, dupa care se verifica daca au fost trimise datele pentru adaugare meniu nou sau pagina noua. Aceste date, primite prin $_POST sunt stocate in variabile, cele care trebuie adaugate in tabelul "pagini" in MySQL sunt filtrate cu functia "filtr_sql()" creata in "admin.php", iar cu functia "filtrare($sir)" se formeaza din titlul paginii numele ei, folosit pentru salvare pe server. Astfel, in formarea numelui, caracterul '-' si spatiul sunt inlocuite cu '_', iar orice alt caracter care nu e o litera sau cifra este sters.
In functie de optiunea aleasa, adaugare meniu sau pagina, se executa codul corespunzator pentru salvarea continutului paginii intr-un fisier pe server si adaugarea datelor in tabelul MySQL: titlu, nume pagina, descriere, cuvinte cheie si data.
Pentru o diferentiere usoara, cand este adaugat meniu nou, contextul lui este salvat intr-un fisier care va avea numele meniului, iar cand este adaugata o pagina intr-o categorie (meniu) deja existenta, fisierul ce va contine contextul paginii respective va avea numele format din numele categoriei unde e adaugata pagina si titlul ei filtrat, separate prin liniuta '-'. Astfel, pagina principala a categoriei va avea numele "nume_meniu" iar cea care e ca sub-meniu dintr-o categorie va avea numele "nume_meniu-titlu_pagina".
Pentru a nu depasi lungimea indicata pt. SEO, titlul paginii e setat sa poata avea maxim 75 caractere.

3. - In partea a treia se scrie codul prin care meniurile si paginile adaugate pot fi sterse.
Prima data se verifica sesiunea de autentificare, apoi se executa si filtrarile necesare la datele primite din formulare, deoarece aceste filtrari au fost aplicate cand paginile au fost adaugate si trebuie sa corespunda.
Daca e primita cerere de stergere a unei pagini dintr-un meniu, selecteaza din MySQL numele paginilor care apartin acelui meniu si le afiseaza intr-o casuta Select de formular; cea care e selectata va fi stearsa complet, atat fisierul in care e stocat contextul ei cat si datele din MySQL care-i apartin.
Daca este primita cerere pentru stergerea unui intreg meniu, se va executa un cod care serge toate fisierele si datele din MySQL care fac parte din acel meniu (deci atentie).

4. - In ultima parte in codul PHP se apeleaza functia "get_meniu()" (creata in "admin.php") ca sa fie preluate numele meniurilor principale din site, apoi fiecare nume e adaugat in tag-uri "<option>" si stocate intr-o variabila. Continutul acestei variabile va fi inclus cu "echo" intr-o casuta Select din formularele pentru adaugare pagini si stergere meniu.

Dupa scriptul PHP se scrie codul HTML al paginii, cu formularele necesare pentru adaugare sau stergere date, dupa cum puteti vedea in codul fisierului.
In sectiunea HEAD e codul CSS pt. elementele paginii si 2 functii JavaScript, cu ajutorul lor poate fi folosit acelasi formular pentru adaugare meniu sau pagina, sau tot un singur formular pentru stergere meniu sau pagina. In functie de optiunea aleasa, scriptul JavaScript va determina afisarea formularului corespunzator.
Mai jos este codul complet.

- Fisierul add_del.php

<?php
// De la https://marplo.net/php-mysql/
// Seteaza optiunea de a afisa orice eroare care apare in executia scriptului
ini_set('display_errors',1);
error_reporting(E_ALL);

// Include fisierul cu datele pt. conectare la MySQL
include('admin.php');

 /*** Part. 1 - Autentificare admin ***/

// Se verifica datele trimise pt. autentificarea administratorului
if(isset($_POST['nume']) && isset($_POST['parola'])){
 // Verifica daca datele primite sunt aceleasi cu cele din 'admin.php'
 if($_POST['nume']==$admin && $_POST['parola']==$pass){
 // Seteaza variabila de sesiune pt. recunoasterea autentificarii
 $_SESSION['logat'] = md5($admin.$pass);
 }
 else {
 // Daca datele din formular nu sunt corecte
 echo '<h4>Numele sau Parola transmisa nu e corecta</h4>';
 // Sterge sesiune pt. logare
 unset($_SESSION['logat']);
 }
}

 /*** Part. 2 - Adaugare meniu si pagini ***/

// Verifica daca administratorul e autentificat
// Si daca sunt trimise date pt. adaugare meniu sau pagina
if(isset($_SESSION['logat']) && $_SESSION['logat']==md5($admin.$pass) && isset($_POST['titlu']) && isset($_POST['descriere']) && isset($_POST['cuv_key']) && isset($_POST['context'])){

 // Daca nu a fost adaugata pagina pt. upload, inchide executia
 if(strlen($_POST['titlu'])<2) exit('<h4>Scrieti titlul paginii, minim 2 caractere. Reveniti la pagina anterioara</h4>');

 /** Daca sunt trimise date pt. adaugare meniu nou **/
 if(isset($_POST['n_meniu'])){
 // Verifica daca este completat nume pt. meniu
 if(strlen($_POST['n_meniu'])<1) exit('<h4>Adaugati un nume pt. meniu, reveniti la pagina anterioara</h4>');

 // Daca numele e completat, se adauga in variabila, filtrat cu functia filtrare() din admin
 $meniu = filtrare($_POST['n_meniu']);

 // Seteaza denumirea fisierului salvat pe server, cu cea a meniului
 $pagina = $meniu;
 }

 /** Daca sunt trimise date pt. adaugare pagina noua **/
 else if(isset($_POST['meniul'])){
 // Verifica daca a fost ales meniul caruia va apartine pagina
 if(strlen($_POST['meniul'])<1) exit('<h4>Alegeti meniul, reveniti la pagina anterioara</h4>');

 // Adauga numele meniului intr-o variabila
 $meniu = $_POST['meniul'];

 // Seteaza numele pe care-l va avea fisierul pe server
 // Format din numele meniului si titlu filtrat cu functia filtrare() din admin
 $pagina = $meniu. '-'. filtrare($_POST['titlu']);
 }

 // Pregateste o matrice cu elementele ce trebuie adaugate in MySQL
 $add['meniu'] = $meniu;
 $add['pagina'] = $pagina;
 $add['titlu'] = $_POST['titlu'];
 $add['cuv_key'] = $_POST['cuv_key'];
 $add['descriere'] = $_POST['descriere'];
 $data = time();

 // Filtreaza toate datele din variabila array $add, folosind functia filtr_sql() creata in admin
 // Pentru ca mai tarziu sa fie adaugate in siguranta in MySQL
 $add = array_map('filtr_sql', $add);

 // Preia continutul pt. paginia (din textarea) intr-o variabila
 $context = $_POST['context'];

 // Seteaza locatia si numele pt. salvare pe server, cu extensia $ext, definita in admin.php
 $thefile = $dir. '/'. $pagina. $ext;

 // Daca fisierul poate fi creat si salvat pe server
 if(file_put_contents($thefile, $context)){
 // Se defineste interogarea pt. adaugarea datelor in tabelul MySQL `pagini`
 $sql ="INSERT INTO `pagini` (meniu, pagina, titlu, descriere, cuv_key, data) VALUES ('".$add['meniu']."', '".$add['pagina']."', '". $add['titlu']."', '".$add['descriere']."', '".$add['cuv_key']."', '$data')";

 // Se executa interogarea care adauga datele in tabele
 if($conn->query($sql)) echo '<h4>Pagina '. $pagina. ' a fost salvata si inregistrata.</h4>';
 else echo 'Eroare : '. $conn->error;
 }
 // Daca fisierul ce trebuie sa contina contextul paginii nu a putut fi creat pe server
 else echo 'Fisierul <b>'. $pagina.$ext. '</b> nu a putut fi salvat in <b>'. $dir. '</b>';
}

 /*** Part. 3 - Stergere pagini ***/

// Verifica daca admmin-ul e logat si e trimisa cerere pt. stergere
if (isset($_SESSION['logat']) && $_SESSION['logat']==md5($admin.$pass) && isset($_POST['delet'])) {
 // Daca e primita cerere de afisare a paginilor din meniu
 if (isset($_POST['s_meniu'])){
 $meniu = str_replace(' ', '_', $_POST['s_meniu']);

 // Filtreaza variabila pt. lucru cu MySQL
 $meniu = filtr_sql($meniu);

 // Selecteaza paginile din tabelul pagini care apartin meniului
 $sql = "SELECT `pagina` FROM `pagini` WHERE meniu='$meniu'";
 $result = $conn->query($sql);
 if ($result->num_rows == 0) echo '0 rezultate';
 else {
 while($rand = $result->fetch_assoc()){
 // Preia numele si titlul pagiilor care sunt in meniul accesat
 // unde randu din tabel e diferi de cel al paginii meniului
 if($rand['pagina']!=$meniu){
 // Elimina caracterele '\' care au fost adaugate de real_escape_string()
 $pags[] = stripslashes($rand['pagina']);
 }
 }
 }

 // Creaza formularul din care va fi aleasa pagina care va fi stearsa
 echo '<h4><u>Sterge pagina</u></h4>
 <form action="" method="post">Alege pagina: <select name="del_pg" id="del_pg"><option></option>';

 // Adauga o caseta select cu paginile
 for($i=0; $i<count($pags); $i++){
 echo '<option>'.$pags[$i].'</option>';
 }
 echo '</select> &nbsp; <input type="submit" name="delet" value="Sterge" /></form>';
 exit;
 }

 // Daca e primita cerere pt. a sterge o pagina
 else if(isset($_POST['del_pg'])){
 $pg_del = $_POST['del_pg'];

 // Sterge fisierul paginii de pe server,
 // daca executia reuseste, sterge inregistrarea si din MySQL
 if(unlink($dir.'/'.$pg_del.$ext)){
 echo '<h4>Pagina ' .$pg_del.$ext. ' a fost stearsa de pe server</h4>';

 // Filtreaza variabila pt. lucru cu MySQL
 $pg_del = filtr_sql($pg_del);

 // Interogatia SQL pt. stergerea paginilor meniului din MySQL
 $sql ="DELETE FROM `pagini` WHERE `pagina`='$pg_del'";
 // Daca datele sunt sterse
 if($conn->query($sql)) echo '<h4>Datele pt. pagina '. $_POST['del_pg']. ' au fost sterse din MySQL</h4>';
 }
 }

 // Daca e primita cerere pt. sters intreg meniul
 else if(isset($_POST['d_meniu'])){
 $meniu = str_replace(' ', '_', $_POST['d_meniu']);

 // Preia intr-un array numele tuturor fisierelor si directoarelor din directorul $dir
 $fisiere = scandir($dir);
 // Retine pe cele care apartin meniului
 $file_del = preg_grep('/^$meniu/', $fisiere);

 // Pregateste variabila meniu pt. lucru cu MySQL, aplica functia de filtrare
 $meniu = filtr_sql($meniu);

 // Interogatia SQL pt. stergerea paginilor meniului din MySQL
 $sql ="DELETE FROM `pagini` WHERE `meniu`='$meniu'";
 // Daca datele sunt sterse
 if($conn->query($sql)){
 echo '<h4>Datele categoriei $meniu au fost sterse din MySQL</h4>';
 // Sterge si fisierele respective din director
 // Parcurge matricea cu numele lor si aplica la fiecare unlink() pt. stergere
 foreach($file_del as $key=>$fisier){
 $fisier = $dir.'/'.$fisier;
 if(unlink($fisier)) echo "<br>Fisierul <b> $fisier </b> a fost sters.";
 }
 }
 }
}

 /** Part. 4 - Obtine mumele meniurilor, ce trebuie adaugate in formulare **/

$meniuri = get_meniu(); // Apeleaza functia din admin.php pt. obtinerea meniurilor

// Defineste o variabila ce va contine numele meniurilor intr-un cod HTML necesar pt. casuta Select din formular
$meniuri_f = '<option> </option>';

// Parcurge matricea din variabila $meniuri si adauga fiecare meniu in cod html
for($i=0; $i<count($meniuri); $i++){
 $meniuri_f .= '<option>'.$meniuri[$i]."</option> \r\n";
}
?>
<!doctype html>
<html lang="ro">
<head>
<meta charset="utf-8" />
<title>Admin - adaugarea paginilor in site</title>
<meta name="description" content="Admin" />
<meta name="keywords" content="admin" />
<style>
body { text-align:center; }
.actiune {
 cursor:pointer;
 font-family:"Calibri", sans-serif;
 font-size:18px;
 text-decoration:underline;
 font-weight:bold;
 color:blue;
}
#f_ad, #f_del {
 display:none;
 width:470px;
 border:1px solid silver;
 margin:10px auto;
 text-align:left;
 padding:5px 8px;
}
</style>

<script>
// Functia pt. afisarea formularului potrivit de adaugare meniu sau pagina
function chose_ad(hide, show) {
 // Descopera formularul, ascunde elementul ne accesat, arata elementul accesat
 document.getElementById('f_ad').style.display='block';
 document.getElementById(hide).style.display='none';
 document.getElementById(show).style.display='block';

 // Elimina 'disabled' din casuta activata
 // Adauga 'disabled' la casuta de formular neactivata
 document.getElementById(show+'_c').removeAttribute('disabled');
 document.getElementById(hide+'_c').setAttribute('disabled', 'disabled');
}

// Functia pt. afisarea formularului potrivit de stergere intreg meniu sau pagina
function chose_del(nume, val) {
 // Seteaza valorile atributului 'name' si valoarea butonului submit
 document.getElementById('del').setAttribute("name", nume);
 document.getElementById('delet').value = val;
 document.getElementById('f_del').style.display='block';
}
</script>
</head>
<body>

<?php
// Determina afisarea unui formular de logare, daca administratorul nu e autentificat
if(!isset($_SESSION['logat']) || $_SESSION['logat']!=md5($admin.$pass)){
 echo '<h4><u>Autentificare Admin</u></h4>
 <form action="" method="post">
 Nume: <input type="text" name="nume" /><br>
 Parola: <input type="password" name="parola" /><br>
 <input type="submit" value="Autentificare" />
 </form>';
 exit;
}
?>

<p>
 <span class="actiune" onclick="chose_ad('ad_pg', 'ad_meniu')">Adauga meniu nou</span> - <span class="actiune" onclick="chose_ad('ad_meniu', 'ad_pg')">Adauga pagina noua</span>
</p><br><br>

<form action="" method="post" name="f_ad" id="f_ad">
 <div id="ad_meniu">Nume meniu: <input type="text" name="n_meniu" id="ad_meniu_c" maxlength="25" /></div>
 <div id="ad_pg">Alege meniul: <select name="meniul" id="ad_pg_c"><?php echo $meniuri_f; ?></select></div>
 Titlu: <input type="text" name="titlu" id="titlu" maxlength="75" /><br>
 Cuvinte cheie: <input type="text" name="cuv_key" id="cuv_key" maxlength="200" /> (<i>separate prin virgula</i>)<br>
 Descriere: <input type="text" name="descriere" id="descriere" maxlength="250" /><br>
 Adauga continutul pentru contextul paginii (poate contine cod HTML)<br>
 <textarea rows="20" cols="55" name="context" id="context"></textarea><br>
 <input type="submit" name="add" id="add" value="Adauga" />
</form><br>

<p>
 <span class="actiune" onclick="chose_del('d_meniu', 'Sterge meniul')">Sterge intreg meniul</span> - <span class="actiune" onclick="chose_del('s_meniu', 'Gaseste paginile')">Sterge pagina</span><br><br>
</p><br>

<form action="" method="post" name="f_del" id="f_del">
 Alege meniul: <select name="" id="del"><?php echo $meniuri_f; ?></select> &nbsp;
 <input type="submit" name="delet" id="delet" value="" />
</form><br>
 <a href="index.php" title="Pagina principala"><em><b>Pagina principala</b></em></a><br>
</body>
</html>

- In partea a treia sunt prezentate ultimile doua fisiere: "index.php" si "grafic.css"
Part. 1   --   Part. 3

Un Test simplu in fiecare zi

HTML
CSS
JavaScript
PHP-MySQL
Engleza
Spaniola
Care tag afiseaza textul oblic?
<strong> <pre> <em>
<p>Cursuri, Jocuri, Anime: <em>www.MarPlo.net</em></p>
Care proprietate CSS defineste spatiul dintre continutul elementului si bordura lui?
margin padding position
h3 {
  padding: 2px 0.2em;
}
Clic pe metoda ce returneaza primul element indicat de selectorii specificati.
getElementsByName() querySelector() querySelectorAll()
// preia primul Div cu class="cls", si afiseaza continutul
var elm = document.querySelector("div.cls");
alert(elm.innerHTML);
Indicati variabila PHP ce contine datele din formular trimise cu method="post".
$_SESSION $_GET $_POST
if(isset($_POST["field"])) {
  echo $_POST["field"];
}
Indicati pronumele corespunzator celui din paranteza in propozitia: "(Noi) speak english".
I They We
We speak english.
- Noi vorbim engleza.
Indicati pronumele corespunzator celui din paranteza in propozitia: "(Noi) hablamos español".
Ellos Vosotros Nosotros
Nosotros hablamos español.
- Noi vorbim spaniola.
Creare site cu PHP si MySQL - Part 2

Last accessed pages

  1. Verbe modale - Modal verbs - CAN, COULD, MAY, MIGHT, MUST (65549)
  2. Obtine Atibutul ID, Class, Name, Title, Src cu jQuery (277)
  3. Creare link-uri (18657)
  4. Prezentul simplu si continuu - Present Tense Simple and Continuous (145361)
  5. Cursuri si Tutoriale: Engleza, Spaniola, HTML, CSS, Php-Mysql, JavaScript, Ajax (261288)

Popular pages this month

  1. Cursuri si Tutoriale: Engleza, Spaniola, HTML, CSS, Php-Mysql, JavaScript, Ajax (932)
  2. Curs HTML gratuit Tutoriale HTML5 (751)
  3. Coduri pt culori (575)
  4. Creare si editare pagini HTML (448)
  5. Conditional IF in Limba Engleza - Fraze Conditionale (431)