Robert1995 Posted September 10, 2011 Report Posted September 10, 2011 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_postid INT AUTO-INCREMENT UNIQUETitle VARCHAR 200Content TEXTcreation_date TIMESTAMPdeleted BOOLEAN DEFAULT 0 si tabela adminidusernamepasswordcam asa arata un basic basic blog .Daca ar fi sa fie facut in PHP curat ar iesi ceva de genul :index.php astaview_post.php astaview_posts_this_month.php astaadmin_login.phpview_blog_entries.php astaadd_blog_entry.php edit_blog_entry.php astaToate 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 dateId - 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_entriesLafel 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 genulROOT:index.phpview_post.phpview_posts_this_month.phpadmin_login.phpview_blog_entries.phpadd_blog_entry.php edit_blog_entry.phpCLASSES ( FOLDER )Class_SQLInterogationsClass_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` asaROOT:index.php // Arata toate entries din blogview_post.phpview_posts_this_month.phpadmin/index.php // Logareadmin/blog/index.php // View toate entries din blogadmin/blog/add_post.php admin/blog/edit_post.phpclasses/index.html ( Fac o eroare 404 nu vreau sa stie ca exista asa ceva)classes/Class_SQLInterogationsclasses/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 minuteTutoriale 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. Quote
caii Posted September 10, 2011 Report Posted September 10, 2011 classes/index.html ( Fac o eroare 404 nu vreau sa stie ca exista asa ceva)vrei sa spui 200 daca pui indexul acolodaca le ceri din edit_blog.php poti foarte simplu sa previi accesul direct cuif(!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.phpstructura tabelului blog_posts poate fi mai bine facuta, de exempluid SMALLINT pt ca nu vei avea niciodata 2147483647 posturiUNSIGNED pt ca nu folosesti id negativPRIMARY 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 blogsi la tabelul admin ai putea renunta, poti scrie parola in fisierul logare.phpinca ceva, renunta la SELECT * Quote
Robert1995 Posted September 11, 2011 Author Report Posted September 11, 2011 (edited) structura tabelului blog_posts poate fi mai bine facuta, de exempluid SMALLINT pt ca nu vei avea niciodata 2147483647 posturiUNSIGNED pt ca nu folosesti id negativPRIMARY AI daca spui ca vrei sa folosesti id-ul pt a face interogareatitlu nu as recomanda un varchar(200) daca nu ai o functie de search in acel blogImi 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 LIKEceva de genulpublic 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 everP.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 September 11, 2011 by Robert1995 Quote
caii Posted September 11, 2011 Report Posted September 11, 2011 nu o sa mearga functia ta.poti sanitiza inputul chiar si cu ceva rudimentar genforeach ($_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"; Quote