Intrebare creare site

Discuţii despre accesabilitate, interfaţa cu utilizatorul,stil de programare, tehnici, algoritmi, managementul proiectului,probleme legate de afişarea în diverse browsere.

Moderator: Moderatori

Avatar utilizator
socu
Senior Member
Mesaje: 470
Membru din: Mie Apr 22, 2009 11:05 pm
Localitate: Marghita

Mesajde socu » Mar Oct 25, 2011 9:09 am

Atunci cand lucrezi pentru clienti reali lucrurile sunt mult mai complicate.
Ai nevoie de module mult mai diversificate decat ai crede - pornind de la structura bazei de date care are nevoie de filtre speciale pana la interfata care te poate bloca din cauza unor situatii care nu au fost luate in considerare.


Da, sunt mai complicate, de exemplu ai un termen limita, si daca acela e 2 saptamani tu singur nu o sa-l faci de la 0 (un proiect mai maricel).
Structura bazei de date se face simplu, iar in legatura cu filtrele nu tre sa-ti bati capul. In drupal interfata nu te blocheaza pentru ca siteul e impartit in regiuni unde poti sa bagi orice bucata de continut vrei, sau poti sa-i modifici clasa ca sa arate diferit.
In plus la queryuri merge treaba mult mai usor si repede pentru ca
1. nu trebuie sa-ti bati capul de sql injection
2. exista o clasa sa faci queryuri intr-un mod curat si standard
3. poti modifica oricand o conditie (camp selecteat, etc) si sa reexecuti queryul

De exemplu (am gasit un query pe net):

Cod: Selectaţi tot

$tid = 23;
$types = array('tip1', 'tip2', 'tip3');
$status = 'published';
$limit = 100;

$sql = "SELECT n.nid, n.title, n.type, c.comment_count FROM `node` n INNER JOIN `term_node` tn ON n.nid = tn.nid INNER JOIN `term_data` td ON tn.tid = td.tid LEFT JOIN `node_comment_statistics` c ON n.nid = c.nid WHERE td.tid = {$tid} AND n.type IN (" . implode(',', $types) . ") AND n.status = {$status} ORDER BY n.created DESC LIMIT {$limit}";
$results = mysql_query($sql); ...

Bun m-am straduit sa-l scriu, dar parca lipseste ceva... a da! sunt vulnerabil la sql injection. asa ca trebuie sa trec ficare printr-un filtru si codul mai capata cateva linii si cateva functii. Bun, am adaugat si filtrele. Stai ca e o eroare, am gresit la un join, acum du-te si holbeaza-te ca sa vezi chiar unde ai gresit! O ce prostie, imi mai trebuie un join, oare unde sa-l bag?

In schimb pe drupal mergi simplu:

Cod: Selectaţi tot

$tid = 23;
$types = array('tip1', 'tip2', 'tip3');
$status = 'published';
$limit = 100;

$query = db_select('node', 'n')
         ->fields('n', array('nid', 'type'));
$query->innerJoin('term_node', 'tn', 'n.nid = tn.nid');
$query->innerJoin('term_data', 'td', 'tn.tid = td.tid');
$query->leftJoin('node_comment_statistics', 'c', 'n.nid = c.nid');
$query = $query->fields('c', array('comment_count'))
               ->condition('td.tid', $tid, '=')
               ->condition('n.type', $types, 'IN')
               ->condition('n.status', $status, '=')
               ->orderBy('n.created', 'DESC')
               ->range(0, $limit);

$results = $query->execute()->fetchAll();

Nu trebuie sa-mi bat capul de sql injection, pot foarte usor sa adaug un join, o conditie, un field, etc. Pot sa primesc rezultatele in X moduri (fetchAllKeyed(), fetchCol(), etc...).

Tie nu ti se pare mai simplu, mai logic, mai normal asa? Ca bonus ruleaza pe orice baza de date cum am mai spus, trebuie doar schimbat driverul din setari.
La fel de usor poti crea un tabel, sau face alter.



Avatar utilizator
misu
PHPRomania Supporter
Mesaje: 23
Membru din: Joi Sep 01, 2011 2:54 pm
Localitate: Brasov
Contact:

Mesajde misu » Mar Oct 25, 2011 12:23 pm

Mai intervine si pasiunea, nu iti iei undita si mergi la pescuit in magazin, nu-i asa? Poate ca cel mai talentat programator din lume nu va putea concura cu drupal ca si timp de executie dar ce-i al lui e al lui.
Parerea mea e ca fiecare trebuie sa faca ceea ce-i place pentru ca suntem oameni inainte de toate si nu masini de facut bani, ca asta-i toata smecheria cu cms-urile nu? 1000+ de site-uri/luna :))

Avatar utilizator
zeuscool
Senior Member
Mesaje: 250
Membru din: Mie Sep 05, 2007 10:59 am
Localitate: Constanta
Contact:

Mesajde zeuscool » Mar Oct 25, 2011 3:53 pm

misu scrie:Mai intervine si pasiunea, nu iti iei undita si mergi la pescuit in magazin, nu-i asa? Poate ca cel mai talentat programator din lume nu va putea concura cu drupal ca si timp de executie dar ce-i al lui e al lui.
Parerea mea e ca fiecare trebuie sa faca ceea ce-i place pentru ca suntem oameni inainte de toate si nu masini de facut bani, ca asta-i toata smecheria cu cms-urile nu? 1000+ de site-uri/luna :))


me like, za bravo, 1000% de acord
Follow me on (Da cu share, like, +1 sau ce mai stii !!!) sau comenteaza articolele, sugereaza etc, FII SOCIAL ... :) marianzburlea.com

Avatar utilizator
socu
Senior Member
Mesaje: 470
Membru din: Mie Apr 22, 2009 11:05 pm
Localitate: Marghita

Mesajde socu » Mar Oct 25, 2011 4:27 pm

Mai intervine si pasiunea, nu iti iei undita si mergi la pescuit in magazin, nu-i asa? Poate ca cel mai talentat programator din lume nu va putea concura cu drupal ca si timp de executie dar ce-i al lui e al lui.
Parerea mea e ca fiecare trebuie sa faca ceea ce-i place pentru ca suntem oameni inainte de toate si nu masini de facut bani, ca asta-i toata smecheria cu cms-urile nu? 1000+ de site-uri/luna Smile)

nu asta e smecheria cu cms-urile, nu ai habar cu ce se mananca te rog sa te abtii. am mai zis si inainte, cel mai talentat programator va folosi sort() nu va face o implementare de bubble sort. Faptul ca ai experienta sa-ti construiesti propriul cms e foarte bine, faptul ca faci codul ca spaghetele doar ca sa zici ca e de la zero e o prostie.

Avatar utilizator
vectorialpx
Senior Member
Mesaje: 4832
Membru din: Mar Mar 01, 2005 9:48 am
Localitate: Bucuresti
Contact:

Mesajde vectorialpx » Mar Oct 25, 2011 4:55 pm

Bine, pe langa faptul ca nu stii cu cine vorbesti si crezi ca esti cel mai "in domeniu" nici nu intelegi ca nu oricine este fan Drupal este destept sau invers.

Iti dau un exemplu concret:
Eu am o functie javascript
ajaxRequest ( METODA_PHP, { jsonInput }, { jsonOptiuniOutput })

Aceasta functie este facuta de mine si este implementata pe un framework propriu. Daca vreau sa adaug un comentariu, metoda va fi apelata astfel:
ajaxRequest('addComment', { commentText:'val' });
Tu nu poti sa realizezi ceva atat de simplu cu drupal, decat daca faci (asa cum am facut si eu) ceva de la 0 (zero).

Acum, eu fac un insert in baza de date astfel
mydb::insert( array(camp=>valoare, camp=>valoare), TABEL )
Pentru mine acest lucru e foarte simplu si natural... daca pentru tine nu e asta nu inseamna ca tu esti prost sau nu stii ce vorbesti.

Sper ca intelegi ideea. E foarte bine ca te-ai acomodat cu un CMS dar asta nu inseamna nimic (pentru mine, cel putin). Acum, ca sa revenim la topic, in anumite momente nu se potriveste structura lui Drupal pentru ORICE pentru ca nu exista o macheta pentru ORICE. Daca vrei sa faci o retea sociala e posibil sa vrei sa folosesti Dolphin sau e posibil sa vrei sa-o faci de la 0 in CodeIgniter... e decizia ta ca programator. Eu as alege CodeIgniter pentru ca eventualele dezvoltari nu ma vor lega de nimic.

Avatar utilizator
socu
Senior Member
Mesaje: 470
Membru din: Mie Apr 22, 2009 11:05 pm
Localitate: Marghita

Mesajde socu » Mar Oct 25, 2011 5:24 pm

Bine, pe langa faptul ca nu stii cu cine vorbesti si crezi ca esti cel mai "in domeniu" nici nu intelegi ca nu oricine este fan Drupal este destept sau invers.

Era vorba despre cms vs cod scris de la zero. De unde ai tras concluzia ca ma cred in domeniu? De unde stii ca nu sunt in domeniu? De unde ai tras concluzia cu fanii destepti?

Aceasta functie este facuta de mine si este implementata pe un framework propriu. Daca vreau sa adaug un comentariu, metoda va fi apelata astfel:
ajaxRequest('addComment', { commentText:'val' });
Tu nu poti sa realizezi ceva atat de simplu cu drupal, decat daca faci (asa cum am facut si eu) ceva de la 0 (zero).

Te contrazic. Pot seta ca un form sa fie apelat prin ajax si apoi sa fac cu raspunsul ce vreau(replace, append, etc...). Nu e nevoie sa scriu de la 0.
Acum, eu fac un insert in baza de date astfel
mydb::insert( array(camp=>valoare, camp=>valoare), TABEL )
Pentru mine acest lucru e foarte simplu si natural... daca pentru tine nu e asta nu inseamna ca tu esti prost sau nu stii ce vorbesti.

Da queryul de mai sus nu ne arati cum il faci? Sa vedem cat de simplu si natural il faci, ca apoi sa incepi cu jignirile. Te rog sa-l faci sau altfel sa ma scutesti de banalitatea aia cu insertul. Ca aia oricine o poate face in 2 secunde:

Cod: Selectaţi tot

public static function insert($fields, $table) {
  $sql = "INSERT INTO `@table` (@fields) VALUES (@values)";
  $sql = strtr($sql, array(
                     '@table' => $table,
                     '@fields' => '`' . implode('`,`', array_keys($fields)) . '`',
                     '@values' => "'" . implode("','", $fields) . "'",
                     )
                    );
 //... exec query
}

Avatar utilizator
mndrk
Senior Member
Mesaje: 271
Membru din: Mar Iun 22, 2010 12:02 pm
Localitate: Bucuresti
Contact:

Mesajde mndrk » Mar Oct 25, 2011 6:00 pm

In plus, cu codul de la zero nu poti sa oferi atatea facilitati ca Drupal(sau alt CMS)

:))) hai ca a fost tare asta:))

Avatar utilizator
Birkoff
Senior Member
Mesaje: 6380
Membru din: Joi Mar 18, 2004 2:34 pm
Localitate: Bucuresti
Contact:

Mesajde Birkoff » Mar Oct 25, 2011 7:59 pm

incercati sa nu intrati in polemici sau atacuri la persoana, stiu ca unii au un ton mai dur/critic dar asa e lumea, reveniti la subiect sau se inchide si topicul asta...

socu este pentru un CMS (respectiv Drupal pentru ca asta il stie cel mai bine si probabil pe asta lucreaza) si ceilalti mai vechi de aici sunt contra pentru ca asa au lucrat pana acum si asa li sa parut ok. am zis cu 2 posturi inainte ca discutia pro/contra nu se termina niciodata asa ca daca vreti sa continuam discutia veniti doar cu argumente pro si contra nu va legati de persoana care scrie mesajul ci de subiect.
1) CMS, ERP, CRM, etc... (doar pentru clienti))
2) Portofoliu, servicii, contact, blog
3) Folositi aceasta clasa sql in proiectele voastre (open source)
4) Vrei un magazin virtual la cheie, usor de folosit, cu api-uri incluse pentru maximizarea vanzarilor si multe alte facilitati? Da un semn si discutam.

Avatar utilizator
vectorialpx
Senior Member
Mesaje: 4832
Membru din: Mar Mar 01, 2005 9:48 am
Localitate: Bucuresti
Contact:

Mesajde vectorialpx » Mie Oct 26, 2011 12:40 am

socu scrie:Era vorba despre cms vs cod scris de la zero. De unde ai tras concluzia ca ma cred in domeniu? De unde stii ca nu sunt in domeniu? De unde ai tras concluzia cu fanii destepti?
socu scrie:nu asta e smecheria cu cms-urile, nu ai habar cu ce se mananca te rog sa te abtii
Vorbesti aiurea despre oameni pe care nu-i cunosti. Bucata aia era o replica din partea mea ca moderator. Daca vine si nea zeuscool cu o replica asemanatoare... it never ends! So, cum zice si Birkoff, sa nu ne referim la persoane... eu am scris ca <<tu crezi ca esti cel mai "in domeniu"] nu am zis ca nu esti. Toti suntem, ca altfel nu postam aici.


socu scrie:Te contrazic. Pot seta ca un form sa fie apelat prin ajax si apoi sa fac cu raspunsul ce vreau (replace, append, etc...). Nu e nevoie sa scriu de la 0.
Banuiesc ca nu trebuie sa scrii de la 0 dar, cat de repede poti sa o faci (adaugarea unui comentariu cu ajax, de exemplu). Poti scrie putin cod, poate e mai usor decat imi imaginez eu.



socu scrie:Da queryul de mai sus nu ne arati cum il faci? Sa vedem cat de simplu si natural il faci, ca apoi sa incepi cu jignirile. Te rog sa-l faci sau altfel sa ma scutesti de banalitatea aia cu insertul. Ca aia oricine o poate face in 2 secunde:

Cod: Selectaţi tot

public static function insert($fields, $table) {
  $sql = "INSERT INTO `@table` (@fields) VALUES (@values)";
  $sql = strtr($sql, array(
                     '@table' => $table,
                     '@fields' => '`' . implode('`,`', array_keys($fields)) . '`',
                     '@values' => "'" . implode("','", $fields) . "'",
                     )
                    );
 //... exec query
}
1. Nu te-am jignit cu nimic
2. Ei bine, ceea ce am eu este deja facut si nu este vulnerabil la injection. Si, ma scuzi ca e o banalitate (nu stiu daca ai puterea necesara, dar tu esti cel care are ton acid si tot tu te simti ofensat)

Cod: Selectaţi tot

public static function insert($what, $tab, $back='') {
   foreach($what as $field=>$value) {
      $fields[] = self::e($field);
      $values[] = self::e($value);
   }
   $sql = 'INSERT INTO `'.self::e($tab).'` ( `'.implode('`, `', $fields).'` ) VALUES ( "'.implode('", "', $values).'" )';
   // die($sql);
   if(!mysql_unbuffered_query($sql)) return false;
   $the_id = mysql_insert_id();
   if(!empty($back)) {
      header('Location: '.$back); exit;
   } else return $the_id;
}

Banuiesc ca e acelasi lucru cu

Cod: Selectaţi tot

$nid = db_insert('node') // Table name no longer needs {}
->fields(array(
  'title' => 'Example',
  'uid' => 1,
  'created' => REQUEST_TIME,
))->execute();
doar ca e scris de mine

Avatar utilizator
socu
Senior Member
Mesaje: 470
Membru din: Mie Apr 22, 2009 11:05 pm
Localitate: Marghita

Mesajde socu » Mie Oct 26, 2011 9:39 am

Ei bine, ceea ce am eu este deja facut si nu este vulnerabil la injection. Si, ma scuzi ca e o banalitate (nu stiu daca ai puterea necesara, dar tu esti cel care are ton acid si tot tu te simti ofensat)

Nu ma simt ofensat deloc.
Ati spus ca puteti face lucruri (siteuri) mari cu cod de la zero iar ca exemplu chiar am primit o functie banala (daca tie ti se pare ceva extraordinar atunci nu mai stiu ce sa zic), iar cand te-am rugat sa-mi reproduci acel query nu ai facut-o pentru ca nu ai o metoda anume (nu ca ar fi o mare chestie dar atunci cand programezi e bine sa ai un standard ca altfel o iei prin balarii si ajungi sa modifici in 200 de locuri doar pentru ca nu ai prevazut o anume situatie). In plus este o eroare (intentionat lasata) in acel query dar nimeni nu a observat-o pentru ca asa patesti cand faci de la 0.
Am incercat sa arat avantajele nu sa va oblig sa folositi pentru ca majoritatea cred ca un cms este un blog wordpress in care iti pui posturile si poti adauga ici-colo cate un sondaj sau o statistica. Nu este asa!(?)


Înapoi la “Dezvoltare”

Cine este conectat

Utilizatori ce ce navighează pe acest forum: Niciun utilizator înregistrat și 14 vizitatori