Part. 2   --   Part. 3

In aceast tutorial puteti invata cum sa creati un site de la zero, care foloseste si baza de date MySQL. Trebuie sa aveti cel putin cunostintele de baza despre PHP, MySQL, HTML si CSS.
Datele despre numele paginilor, titlu, cuvinte cheie si descriere vor fi stocate intr-un tabel dintr-o baza de date MySQL, iar continutul fiecarei pagini va fi salvat in fisiere intr-un director pe server.
Toate aceste date vor putea fi adaugate sau stere dintr-o pagina de administrare.
Acest sistem de script pentru site se mai numeste si CMS, acronim de la Content Management System, o colectie de proceduri prin care continutul, paginile site-ului, pot fi adaugate, sterse si modificate automat dintr-o pagina de administrare.
Exemplul din aceast tutorial este un fel de CMS mai simplu, care da posibilitatea de a adauga in site: categorii, meniuri si continut, precum si stergerea lor din pagina de Admin. Pentru a nu complica prea mult scriptul si necesitatea explicatiilor, nu am adaugat si o procedura de modificare. Ideea fiind sa puteti invata esentialul in modul de creare a unui site cu PHP si MySQL. Continutul paginilor il puteti apoi modifica din fisierele in care a fost salvat.
Accentul este pus pe partea de programare, grafica site-ului pentru modelul prezentat aici o face fiecare. Sistemul permite usor crearea si folosirea unui template HTML

- Scriptul complet il puteti descarca de aici -> Creare site - CMS.

Daca doriti sa invatati cum sa creati un script de site CMS, va sfatuiesc sa cititi cu atentie acest tutorial si sa scrieti personal scriptul din fiecare fisier, dupa codul prezentat in continuare pentru fiecare. Daca doar vreti sa folositi acest model pentru a-l adapta si dezvolta, descarcati arhiva cu tot scriptul si studiati documentatia din el.
In fisierele scriptului gasiti explicatiile necesare intelegerii fiecarei linii de cod si la ce sunt folosite. In acest tutorial este explicat in mare structura si logica scriptului.

1. Structura site-ului

Inainte de a incepe crearea unui site, trebuie stabilita structura acestuia, care consta din 3 elemente principale (daca folosim si baza de date):
        - structura tabelului (tabelelor) din baza de date.
        - structura fisierelor si directoarelor pe server.
        - structura paginii (paginilor) siteului, layout-ul.
Luam pe fiecare in parte.

Pentru exemplu de site, relativ simplu, din aceasa lectie, este folosit un singur tabel MySQL, care are urmatoarele coloane:
        - id - o coloana de tip INTEGER AUTO_INCREMENT, care va avea un 'id' (numar) unic pentru fiecare pagina adaugata.
        - meniu - unde e inregistrat numele meniurilor principale (categoria careia apartine pagina).
        - pagina - pentru numele care-l are fisierul ce contine contextul paginii respective.
        - titlu - in care e stocat titlul ce va fi adaugat in sectiunea HEAD, folosit si pt. formarea numelui si URL-ul paginii
        - descriere - pentru descrierea din meta-tag "description".
        - cuv_key - pentru cuvintele cheie care vor fi adaugate la fiecare pagina in meta-tag "keywords".
        - data - pentru inregistrarea datei (in format UNIX) la care sunt adaugate paginile.

La structura de pe server sunt folosite 5 fisiere principale si un director pentru stocarea fisierelor unde va fi salvat continutul fiecarei pagini (vor fi prezentate fiecare mai tarziu).

Structura paginii (layout-ul) este creata in "index.php", cu o configuratie impartita in 3 zone principale:
        - Top - unde sunt afisate meniurile principale din site,
        - Corp - zona in care sunt afisate: intr-o parte link-urile paginilor din categoria respectiva, si in rest continutul acestora
        - Subsol - pentru ce vrem sa apara in partea de jos a site-ului.

Aceasta e pe scurt structura site-ului, in continuare creem pe rand fiecare din aceste elemente.

2. Crearea tabelului MySQL

Partea mai simpla, dar esentiala si foarte importanta la un site care foloseste baze de date e proiectarea si scrierea codului pentru crearea tabelelor in baza de date. Pentru acest proiect, care e simplu in ceea ce priveste structura MySQL, am folosit un singur tabel, cu numele "pagini" ce are coloanele prezentate mai sus.
In directorul radacina al site-ului (www sau httpdocs) creem un fisier php (aici numit "creaza_tabel.php") in care se scrie codul PHP de mai jos, pentru tabelul MySQL (explicatiile necesare sunt in documentatia din cod).

- Fisierul creaza_tabel.php

<?php
// Include fisierul pt. conectare-selectare baza de date
include('admin.php');

// Creaza tabelul pagini, cu coloanele necesare si utilizabil cu formatul UTF-8
$sql ='CREATE TABLE `pagini` (id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, meniu varchar(25), pagina varchar(110), titlu varchar(75), descriere varchar(250), cuv_key varchar(200), data int(10)) CHARACTER SET utf8 COLLATE utf8_general_ci';

// Se verifica executia funtiei pentru transmiterea codului SQL
if($conn->query($sql))
 echo '<br><br><br><center><h4>Tabelul pagini a fost creat</h4></center><br>'; 
else
 echo '<br><br><br><center><h4>Tabelul pagini nu a putut fi creat deoarece - '. $conn->error. '</h4></center>';

3. Datele administratorului, conectarea la MySQL si functii de filtrare

Pentru a lucra cu MySQL din PHP, trebuie sa scriem datele pentru conectarea scriptului la baza de date.
Deoarece aceste date trebuie folosite in toate paginile care preiau sau transmit valori la MySQL, le scriem intr-un fisier php separat, aici numit "admin.php", pe care-l vom include (cu include()) unde este necesar.
In acest script de tip CMS vom avea nevoie de inca 2 fisiere principale: unul pentru partea de administrare (adaugare, stergere pagini) si altul pentru afisarea continutului. Ambele vor lucra cu baza de date si numele meniurilor.
Pentru a nu crea de mai multe ori aceeasi functie in fisiere diferite, folosim "admin.php", pe care oricum il includem in celelalte fisiere din script, si scriem in el si alte date sau functii generale, precum cele de filtrare, pe care va trebui sa le folosim in fisiere separate. Astfel, codul comun folosit in scripturile din ele il vom scrie cat mai simplu, o singura data, in "admin.php", unde in total adaugam:
- datele pentru conectarea si selectarea bazei de date, numele si parola pentru accesul la functiile paginii de admin (prezentata in partea a doua a tutorialului), o functie pentru selectarea meniurilor principale din tabelul MySQL, deoarece numele meniurilor vor fi necesare atat in fisierul care afiseaza paginile din site cat si in cel de administrare, o functie pentru filtrarea datelor care lucreaza cu MySQL si alta care va fi folosita pentru definirea numelor paginilor din site, utilizate si in crearea link-urilor.
Codul PHP ce trebui scris in "admin.php" e urmatorul.

- Fisierul admin.php

<?php
// De la https://marplo.net/php-mysql/

// Datele pt. autentuificare Administrator
$admin ='admin';
$pass ='pass';

// Numele directorrului unde sunt incarcate paginile
$dir ='pagini';

// Seteaza extensia folosita pt. fisierele in care sunt salvate contextul paginilor
$ext ='.htm';

// Modificati datele pt. conectare la baza de date
$host ='localhost';
$utilizator ='root';
$parola ='parola';
$numebd ='nume_bd';

// Seteaza posibilitatea lucrului cu sesiuni
session_start();

// Seteaza utilizarea formatului UTF-8 in pagina
header('Content-type: text/html; charset=utf-8');

// Conectarea la baza de date
$conn = new mysqli($host, $utilizator, $parola, $numebd);
if(!$conn) exit('Conectare nereusita la MySQL');

//seteaza conexiunea pt utf-8
$conn->query('SET character_set_client="utf8",character_set_connection="utf8",character_set_results="utf8";');

 /*** Functii necesare ***/

// Functia pt. filtrarea variabilelor folosite in lucru cu MySQL
function filtr_sql($var){
 GLOBAL $conn;
 // Se verifica daca magic_quotes_gpc() este setat ON
 // Daca e ON, se aplica stripslashes() variabilei $var, pentru a nu se adauga de 2 ori '\'
 if(get_magic_quotes_gpc()) { $var = stripslashes($var); }

 return $conn->real_escape_string($var);
}

// Functia care preia din MySQL meniurile principale ale site-ului
function get_meniu(){
 GLOBAL $conn;
 // Selecteaza coloanele in care numele meniului e acelasi cu numele paginii
 // Apoi adauga numele meniurilor intr-o variabila tip array
 $q ='SELECT `meniu` FROM `pagini` WHERE `meniu`=`pagina`';
 $result = $conn->query($q);
 if($result->num_rows ==0) $menu = false;
 else {
 $menu = array();
 // Elimina caracterele '\' care au fost adaugate de real_escape_string()
 while($rand = $result->fetch_assoc()){
 $menu[] = stripslashes($rand['meniu']);
 }
 }
 return $menu;
}

// Functia pt filtrarea sirurilor folosite la numele meniurilor sau paginilor
// Utilizate la crearea numelor fisierelor si a link-urilor
function filtrare($sir){
 // Inspirat de la www.tutoriale.far-php.ro
 // Se converteste numele in litere mici si se scot spatiile de la inceput si sfarsit
 $sir = trim(strtolower($sir));

 // Un array cu lista caracterelor care se inlocuiesc
 $lista_car = array(
 '&#259;' => 'a',
 '&icirc;' => 'i',
 '&acirc;' => 'a',
 '&#351;' => 's',
 '&#355;' => 't',
 '&#258;' => 'a',
 '&Icirc;' => 'i',
 '&Acirc;' => 'a',
 '&#350;' => 's',
 '&#354;' => 't',
 'ã' => 'a',
 'â' => 'a',
 'é' => 'e',
 'î' => 'i',
 'í' => 'i',
 'n' => 'n',
 'ó' => 'o',
 's' => 's',
 '?' => 't',
 'ú' => 'u',
 '-' => '_',
 ' _ ' => '_',
 ' _' => '_',
 '_ ' => '_',
 ' ' => '_'
 );

 // Se inlocuiesc caracterele de mai sus, parcurgand fiecare element din matrice
 foreach($lista_car as $litera=>$inlocuire) $sir = str_replace($litera, $inlocuire, $sir);

 // Pastreaza in sir doar caracterele din expresia regulata (adica litere, cifre si _)
 $sir = preg_replace('/([^A-Za-z0-9_])/', '', $sir);

 // Se returneaza gata aranjat
 return $sir;
}

4. Protejarea fisierului

Deoarece in "admin.php" sunt datele importante pentru conectare la baza de date si autentificare administrator, este indicat sa asiguram o protetie sporita acestui fisier. Pentru aceasta folosim .htaccess ca sa blocam accesul extern la el.
Deschideti un editor simplu de text si scrieti in el codul de ma jos, apoi salvati-l in format ASCII cu denumirea .htaccess, fara alta extensie, in acelasi loc unde e si "admin.php".

# Blocheaza accesul extern la admin.php
<files admin.php>
order allow,deny
deny from all
</files>

Sau o alta metoda ar fi sa mutati fisierul "admin.php" intr-un director de pe server, care nu poate fi accesat din browser. In acest caz trebuie sa modificati si calea de includere a lui.

- In partea a doua a acestui tutorial gasiti explicatii despre fisierul de administrare si management date, prin care se va putea adauga si sterge paginile site-ului.
- In partea a treia sunt prezentate fisierele "index.php" si "grafic.css"
Part. 2   --   Part. 3

Un Test simplu in fiecare zi

HTML
CSS
JavaScript
PHP-MySQL
Engleza
Spaniola
Care tag defineste zona de click intr-o harta creata dintr-o imagine?
<map> <img> <area>
<img src="image.jpg" usemap="#map1">
<map name="map1">
  <area shape="rect" coords="9, 120, 56, 149" href="#">
  <area shape="rect" coords="100, 200, 156, 249" href="#">
</map>
Ce proprietate CSS indica ce sa se intample cand continutul unui element depaseste dimensiunile lui?
display overflow position
#id {
  overflow: auto;
}
Clic pe evenimentul care este declansat cand mouse-ul e deasupra unui obiect.
onclick onmouseover onmouseout
document.getElementById("id").onmouseover = function(){
  document.write("Sa ai Viata Buna");
}
Indicati variabila PHP ce contine datele adaugate in adresa URL, dupa caracterul "?".
$_SESSION $_GET $_POST
if(isset($_GET["id"])) {
  echo $_GET["id"];
}
Clic pe pronumele reflexiv care e potrivit in propozitia: "Marc is the boy ... won the prize".
who which whoever
Marc is the boy who won the prize.
- Marc e baiatul care a castigat premiul.
Clic pe pronumele reflexiv care e potrivit in propozitia: "Voy a ver al pintor de ... les hablé ayer".
que quien cuyo
Voy a ver al pintor de quien les hablé ayer.
- Ma duc sa vad pictorul despre care ti-am vorbit ieri.
Creare site - tip CMS

Last accessed pages

  1. Trecut perfect si Trecutul perfect continuu - Present perfect and Continuous (24059)
  2. Utilizare formulare HTML cu PHP, $_GET si $_POST (1735)
  3. Prezentul continuu - Exercitii si teste incepatori (10540)
  4. Gramatica limbii engleze - Prezentare Generala (105533)
  5. Exercitii engleza - English Tests and exercises - Grammar (27660)

Popular pages this month

  1. Prezentul simplu si continuu - Present Tense Simple and Continuous (3706)
  2. Cursuri si Tutoriale: Engleza, Spaniola, HTML, CSS, Php-Mysql, JavaScript, Ajax (3277)
  3. Gramatica limbii engleze - Prezentare Generala (2798)
  4. Prezent perfect si Prezent perfect continuu - Present perfect and Continuous (2397)
  5. Trecutul simplu si continuu - Past Tense Simple and Continuous (2005)