Jump to content
Robert1995

PHP Framework

Recommended Posts

Framework - A structure for supporting or enclosing something else, especially a skeletal support used as the basis for something being constructed.

Pentru mine PHP gol fara nici un framework in spate (chiar si unul de asta basic e foarte bun) ma face sa ma simt gol , de parca ceva ar lipsi , aceea sclipire de magie , pur si simplu e ca si cum un om ar fi gol pe dinauntru , asta e ideea mea.

Ok de exemplu sa zicem ca vreti sa va faceti un blog in PHP fara nici un framework .

Asta inseamna (Nu ma refer la o baza de data pentru un blog care sa poata face o gramada de lucruri gen structurare pe categorii / comentarii / ascundere / subscription prin email etc etc etc :

tabela blog_post

id INT AUTO-INCREMENT UNIQUE

Title VARCHAR 200

Content TEXT

creation_date TIMESTAMP

deleted BOOLEAN DEFAULT 0

si tabela admin

id

username

password

cam asa arata un basic basic blog .

Daca ar fi sa fie facut in PHP curat ar iesi ceva de genul :

index.php asta

view_post.php asta

view_posts_this_month.php asta

admin_login.php

view_blog_entries.php asta

add_blog_entry.php

edit_blog_entry.php asta

Toate cele marcate rosu fac un sql interogation pe baza de date

edit_blog_entry si view_post for face aproximativ acelas query deoarece se refera la doar 1 entry care de exemplu poate fi luat dupa id sau alias .

Alias - arata mai frumos in url ;

- esti mai vulnerabil la atacuri la baza de date

Id - arata el urat in url cateodata , dar cu doar un is_numeric($id) iti dai seama daca vrei sa faci interogarea sau nu.

index si view_blog_entries

Lafel for face ceva de genul getAll , exact acelas query "select * from blog WHERE deleted = 0";

Aici sunt doua optiuni , "programatorul" isi face o clasa SQL Interogations

pe care o va extinde cu Blog si Admin de exemplu pentru a-si face queriurile mai usor si sa nu trebuiasca sa schimba in doua locuri un lucru care ar trebui sa mearga lafel .

Note : Clasele pot primi parametri (variabile) asa ca daca vreti sa faceti exceptii o puteti face cu ajutorul parametrilor.

Pana acum Codul ar arata ceva de genul

ROOT:

index.php

view_post.php

view_posts_this_month.php

admin_login.php

view_blog_entries.php

add_blog_entry.php

edit_blog_entry.php

CLASSES ( FOLDER )

Class_SQLInterogations

Class_Blog ( o extinde pe prima)

Class_Admin ( o extinde pe prima)

Ok de ce fac asta ?

Am o singura baza de date o inchid , o deschid si o mentin pe cat posibil logica de SQL intr-un singur loc.

Proiectul e destul de "neordonat"

Sa zicem ca as mai aranja `blogul` asa

ROOT:

index.php // Arata toate entries din blog

view_post.php

view_posts_this_month.php

admin/index.php // Logare

admin/blog/index.php // View toate entries din blog

admin/blog/add_post.php

admin/blog/edit_post.php

classes/index.html ( Fac o eroare 404 nu vreau sa stie ca exista asa ceva)

classes/Class_SQLInterogations

classes/Class_Blog ( o extinde pe prima)

classes/Class_Admin ( o extinde pe prima)

Si totusi inca mai sunt multe ... Mai ales pentru 'lucruri marete' . Hai sa fim seriosi un blog din asta e nimic , e absolut nimic . Un proiect cu 30-35 de tabele nu cred ca e foarte flexibil in PHP curat . Mai ales daca dupaia trebuie sa intervina modificari.

Si toate fisierele din FrontEnd Practic au acelas meniu / body pana la un punct / head / footer etc.

Ar fi o idee sa fie incluse fisierele dar doar ar incurca "developerul" pentru ca oricand mai trebuie ceva inclus trebuie sa le includa in toate fisierele .

De aceea cea mai buna idee ar fi un layout .

Layout ar trebui sa contina tot contentul unui website care e "universal" de exemplu pot fi mai multe layouturi : frontEnd , backEnd .

Nici nu mai stiu ce sa zic .

Deja nu prea mai imi vin idei in cap sa tin codul curat , eventual nu imi dau eu seama.

PHP curat vs Un Framework de php e pur si simplu cacat . Un framework te obliga sa stai ordonat si sa-ti mentii logica de date in Modele . Logica de Preluare a datelor / verificare / prelucrare / ordonare sau orice alta operatie "php" in Controller . Si View pentru a afisa pagina in sine cu doar operatia "echo" de preferabil la variabelele trimise din Controller spre view. Iar Layout care e pur si simplu magic in unele cazuri.

Un blog destul de ordonat in codeigniter ( un framework usor si flexibil) dureaza 20 de minute

Tutoriale Video(sunt 2)

In fine sper ca am ajutat pe cineva . Avand in vedere ca am inceput sa scriu la 2 noaptea si acum is prea obosit sa continui , chiar daca nu stiu ce sa mai compar sau sa scriu.

Puteti comenta orice vreti , astept pareri si pareri .

Noapte buna.

Link to comment
Share on other sites

classes/index.html ( Fac o eroare 404 nu vreau sa stie ca exista asa ceva)

vrei sa spui 200 daca pui indexul acolo

daca le ceri din edit_blog.php poti foarte simplu sa previi accesul direct cu

if(!isset($L))
{
header('HTTP/1.1 301 Moved Permanently');
header('Location: ../index.php');
die();
}

unde $L il declari inainte de a cere fisierul class_sql.php

structura tabelului blog_posts poate fi mai bine facuta, de exemplu

id SMALLINT pt ca nu vei avea niciodata 2147483647 posturi

UNSIGNED pt ca nu folosesti id negativ

PRIMARY AI daca spui ca vrei sa folosesti id-ul pt a face interogarea

titlu nu as recomanda un varchar(200) daca nu ai o functie de search in acel blog

si la tabelul admin ai putea renunta, poti scrie parola in fisierul logare.php

inca ceva, renunta la SELECT *

Link to comment
Share on other sites

structura tabelului blog_posts poate fi mai bine facuta, de exemplu

id SMALLINT pt ca nu vei avea niciodata 2147483647 posturi

UNSIGNED pt ca nu folosesti id negativ

PRIMARY AI daca spui ca vrei sa folosesti id-ul pt a face interogarea

titlu nu as recomanda un varchar(200) daca nu ai o functie de search in acel blog

Imi spunea cineva odata SQL hosting is cheap these days asa ca poate sa fie oricat de mare .

Title e varchar de 200 , si intr-o functie de search de ce ar conta cat e de mare ? un search il fac foarte usor cu LIKE

ceva de genul


public function searchPost($search){
$sql = 'select * from blog_posts where title LIKE %'.$search.'%';
}

ia uite ce frumos e search merge si daca il fac tip TEXT si pun cel mai retardat titlu ever

P.S nu-mi spune ca face SQL injection sau nu stiu ce ca iti fac verificarile si in functie .

Si mersi pentru sfat nu stiam , vorbesc despre


if(!isset($L))
{
header('HTTP/1.1 301 Moved Permanently');
header('Location: ../index.php');
die();
}

Edited by Robert1995
Link to comment
Share on other sites

nu o sa mearga functia ta.

poti sanitiza inputul chiar si cu ceva rudimentar gen


foreach ($_POST as $cheie => $valoare)
{
$_POST[$cheie] = mysql_real_escape_string($valoare);
}

sintaxa corecta este:

$sql = "SELECT * FROM blog_posts WHERE title LIKE '%".$search."%'";

totusi nu recomand SELECT *

ceva mai rapid ar fi:

$sql = "SELECT id, title, content, creation_date FROM blog_posts WHERE title LIKE '%'.$search.'%' OR content LIKE '%'.$search.'%' ORDER BY creation_date DESC";

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



×
×
  • Create New...