PHP+MySQL: Nechápu některé „programátory“

Dávno pradávno, před 10 lety, jsem psal pro jednu incomingovou agenturu web. Nebylo moc času, tak práci převzala nejmenovaná firma, která se řadí mezi největší a nejlepší vývojáře webů v ČR. Majitele incomingové agentury poslali „k ledu“ (neposlali by, kdyby bych ochoten platit v desítkách tisíc za každou úpravu) a projekt se nedávno vrátil ke mně.

Že jsem já psal v době PHP3 a používal konstrukce, které již v PHP4 byly označeny za zastaralé. je jedna věc. Není to omluva, prostě jsem se učil. Bohužel nejmenovaná firma S… nedokázala za ty roky přepsat kódy do tvaru, který by odpovídal standardům, že by pořešili bezpečnostní a funkční mezery už ani nekomentuji. Takže před úpravami funkčnosti musím přepsat celou administraci a téměř všechny bloky pracující s daty. A to je práce zadarmo, účtovat se mohou až funkční změny viditelné pro zákazníka.

Kupodivu jimi přidaná funkčnost byla napsána stejně prasečím stylem, jak jsem před lety psal já. Počínaje návrhem datové struktury (mé tehdejší znalosti byly zlomkem současných a stále se mám co učit), konče mnoha podivnými postupy, z nichž tu zveřejním jen jeden:


$vysledek2=MySQL_Query("SELECT * FROM lmhotely",$db);
while(@$zaznam2 = MySQL_Fetch_Row($vysledek2)){
  if($zaznam2[1]==$oc){
    $vysledek=MySQL_Query("DELETE FROM lmhotely WHERE hotel_id=$oc;", $db);
    if(!$vysledek){
      echo "Napodarilo se smazat zaznam o last minute z databaze.\n";
      $chyba = MySQL_ErrNo." : ".MySQL_Error;
      echo $chyba;
    } else {
      echo "Zaznam o last minute byl korektne smazan.\n";
    }
  }
}

Pochopil někdo smysl toho cyklu? Po prvním průchodu cyklem budou vymazány všechny záznamy z Last minute, jež mají vazbu na mazaný hotel, nehledě k naprosto hloupému použití * v příkazu SELECT. Postačuje jen SQL příkaz pro smazání záznamu, ale to je méně řádků kódu, takže by se před zákazníkem špatně obhájila nemalá cena. :-). Bohužel co vidím je práce absolutního začátečníka, ne firmy jež se chlubí úspěchy a může si dovolit programátory znalé matematiky, databází a programování celkově.

Bohužel stále platí většina článku Ekonomičnost webdevelopmentu, který jsem tady vydal 12. února 2008. Web nějak funguje, že má bezpečnostní díry a další brutální chyby dost často zákazník nepozná.

Tak jsem si zanadával a zase zpět do práce.

Flattr this!

13 thoughts on “PHP+MySQL: Nechápu některé „programátory“”

  1. hmmm, asi bych měl začít sbírat co jsme postupně potkali při hostování v prostředí LAMP. To by vydalo na sbírku vtipů.

    1. @Zdeněk: No já si taky říkám že jsem programátorský vtip, ale zrovna u Vás mám puštěnou učebnici jak neprogramovat, hlavně s ohledem na databázi – ZenCart. Člověk se furt učí a každý začínal, ale co jsem si mohl „lajsnout“ před 10 lety já, jakožto freelancer, si nemůže dovolit firma s x vývojáři, tam už musí být nad začínajícími nějaký vedoucí, který je „dokope“ k efektivnímu a bezchybnému řešení. Je mi skoro záhadou, že web funguje dodnes.

      @Vlastimil: No tak dík. Že se mi bumerang vrátí se stejnými chybami, jaké jsem měl před 10 lety, je dost ošklivé překvápko.

  2. No tak S… je firma známá velkou fluktuací a když vám hoří projekt tak co můžete dělat? Prostě na to naženete začátečníka, on se něco naučí a nějak to sflikuje. Tak to prostě je – dobří programátoři nerostou na stromech a kde je pořád brát, že?
    Předělával jsem po nich taky jeden projekt a nechtějte vědět, co tam všechno bylo za konstrukce. To byste zírali.
    A jméno firmy můžu klidně říct na plno, žádnou mlčenlivost jsem nepodepsal. I ty zdrojáky můžu klidně ukázat, pokud by někdo chtěl mít vypálené oči 🙂

    1. @Martin: Sorry, zcenzuroval jsem název firmy (nechci se do nich opírat, protože podle referencí dělali i pro zajímavé zákazníky, přiče,ž pochybuji že by to tak zflikovali), ale trefil jste. Mě to docela dostalo, bohužel já se vyvíjel, ale ta aplikace ne, skoro se divím že jde spustit na PHP5, byť je pak sranda zapnout logování warningů, dlouhé čtení na dobrou noc. Jo znám pár špičkových větších firem, ale čímdál častěji vidím že kvalitní projekty padají od one-man-show se spolupracujícím grafikem. Já s oblibou říkám „škrtněte si jedno z rychle-levně-kvalitně a máme se o čem bavit“, ale ani při škrtnutí kvalitně nepustím výrazné bezpečnostní bugy, neefektivní databázi a nelogické konstrukce.
      Příznávám, že jsem nad ukázanou konstrukcí seděl asi 20 minut a přemýšlel, jestli nemá skrytý význam. Další srandovní věci ukážu časem, někdo asi neznal JOIN, tak vybral vše ze dvou tabulek a pro každý řádek z první hledal pomocí MySQL_Data_Seek() záznam z druhé tabulky.

  3. Nojo, přiznám se, že podobným způsobem vytvářím své skripty taky :-), ale dělám je jen pro svoji potřebu a raději nikde moc neukazuji.
    A živím se něčím jiným ..

    1. @Dalibor: Je rozdíl, když děláš něco jen pro sebe (v tom případě umím být prase že tak velký chlév neexistuje), nebo když to prodáváš dál.

  4. Tomu, co tu popisuješ se ani moc nedivím – pokud dostaneš zbastlený kód, tak se v prvé řadě snažíš dokopat zákazníka k tomu aby ti zaplatil refaktoring. A pokud ho k tomu nedokopeš, tak maximálně fixuješ chyby a snažíš se mít s tím kódem mít co nejméně společného. U malých věcí to jakž takž funguje, průser je, když se taková aplikace rozroste a má se provozovat a udržovat. Jinak – k tomu příkladu – nevzniklo to by copy/paste. Nemáš tam bokem něco podobného?

    1. @Pavel: V živých projektech nemám nic podobného, nejsem ani líný (přestože to zákazník neocení, nebo o&tom ani neví) upravovat i weby, které jsou dávno teoreticky uzavřené, prostě vylepšení a opravy nahrávám všude (rsync budiž pochválen). Vystavená ukázka je opravdu přesný copy&past mého kódu do (uvnitř byl i můj komentář //vivat Rammstein 😀 ), jen se změněnou tabulkou. Bohužel kódu, který vznikl při studiu Koskovo učebnice, takže ještě plný neznalostí funkčnosti jazyka. Spoléhání na automatickou registraci globálních proměnných a neošetřené vstupy jsem si o rok později nedovolil, hodně mě nakopla výchovná lekce od Martina Matějů (spolupráce dopadla tragicky, ale donutil mě přemýšlet nad bezpečností a čistotou kódu).

  5. Tak všichni jsme nějak začínali 🙂 – a fakt hodně záleží na tom, ke komu se člověk na začátku dostane – zda má možnost odkoukat do dobré nebo to špatné.

  6. Já jsem se jednou dávno dostal ke kšeftu optimalizace MySQL databáze na LAPMu. Ukázalo se, že databáze je úplně v pohodě, tak jsem se mrknul do PHP kódu. Ten člověk dělal KAŽDÝ REQUEST cca 30 nahrazení řetězců přes CELÝ výstup (stránky měly tak 200 kB). Chvíli jsem se pokoušel tomu člověku vysvětlovat O(n) jeho "algoritmu", ale pak jsme se rozešli.

  7. Programuji pro server s rozsáhlým obsahem (100tis+ vnitřních stránek) s 60tis UIP denně.. Nepovažuji se za dobrého programátora. Asi jsem taky prase :), ale moje nedostatky se kompenzují výkonnější mašinou.. A funguje to.

    1. [Rr]: <ironic>To se máte čím chlubit.</ironic> Bohužel odchovanců 8 bitů, kteří uměli počítat téměř s každým taktem mikroprocesoru, nebáli se smazat a znovu napsat část, která dobře vyladit nešla, nebo pro ně ladění nebylo akademickým pojmem, ubývá. Máte-li dedikovaný server, Váš problém, jste-li na sdíleném hostingu, lituji další uživatele stejného serveru.

Komentáře nejsou povoleny.