Jump to content
php.lv forumi

wintermute

Reģistrētie lietotāji
  • Posts

    144
  • Joined

  • Last visited

Posts posted by wintermute

  1. Es nez kāpēc iedomājos, ka tu zini, kas ir FOREIGN KEY un ko tas dara.

    Sāc ar to, ka cītīgi izlasi: http://en.wikipedia.org/wiki/Foreign_key ( vēlams vismaz 2x ).

     

    Nedaudz mēģināšu paskaidrot.

     

    Pieņemsim, ka tev ir tabula Comments ar lauku user_id, un tev ir tabula Users, kas satur jūzera datus un user_id .

    Loģiski būtu, ja tu nevarētu ievietot komentāru ar jūzeri, kurš neeksistē. Tā ir viena lieta ko nodrošina FOREIGN KEY.

     

    Un tad ir tāda lieta kā notikumi ON DELETE un ON UPDATE, kas ļauj tev automātiski mainīt datus,

    ja kaut kas mainās tabulā, uz kuru tu atsaucies.

     

    Piemēram, tu dzēs ierakstu no Users tabulas, un vēlies turmpāk parādīt visus tā jūzera komentārus ar autora vardu "Dzēsts lietotājs",

    tad tabulas definīcijā tev būs framgments:

    FOREIGN KEY(user_id) REFERENCES Users(user_id) ON DELETE SET NULL

    Un tad tu visiem komentāriem kuriem komentāru tabulā user_id ir NULL , tu parādi speciālu jūzerneimu.

     

     

    Nu kaut kā tā ..

     

    IMO tev vajadzētu vienārši iemācīties kaut kādus SQL pamatus.

    Paņem izlasi kādu grāmatu par MySQL vai PostgreSQL, tad izlasi kas ir 3NF,

    Un visbeidzot palasi šito grāmatu : SQL Antipatterns

  2. Piemēram PDO ir daudz lēnāks par mysql un man kā pedantiski noskaņotam milisekunžu maniakam - ļoti nepatīk, ja redzu, ka izmantojot mysql_ - tomēr izpildes laiks ir krietni ātrāks nekā ar PDO.

    Interesanti kur tu tos benchmarkus dabūji ar "daudz lēnāko" PDO ?

    Nevēlies padalīties ? Vēlams kaut ko kas saistīts ar PHP 5.3, nevis rakstus ciema blogā no 2006tā gada.

     

    Konkrētu argumentu, nevis "ai, tas jau vecs, nafig viņu" :)

    Es jau tev konkrētus argumentus uzskaitīju:

     

    • tas šobrīd ir "maintenance only"
      • jaunas fīčas vairs klāt liktas netiek, kas nozīmē, ka iznāko MySQL 6.0 ir ļoti iespējams,
        ka mysql_* vairs nespēs izmantot jaunākās iespējas, un varbūt pat kaut kas vairs nestrādās .

    [*] ir pieejams tikai procedurāls un morāli novecojis API

  3. No tabulas Thumbs tu praktiski nekad neko neselektē.

    Varbūt vienīgi tad , ja jāpārrēķina rezultāts, pēc kāda jūzera dzēšanas.

    Un arī tad par to drošvien atbildētu kaskāde SQL pusē.

     

    Thumbs ir paredzēts galvenokārt vertējumu reģistram. Tā kā primary key's ir unikāls,

    tad DB pati tev neļaus jūzerim divreiz par vienu komentāru nobalsot.

     

    Ja INSERT's iekš Thumbs nekādu kļūdu neatgriež, tad tu Comments tabulā izmani kopējo vērtējumu.

     

    Šito var norealizēt gan ar diviem query'iem , gan arī (labāk) ar SQL procedūru.

  4. Ne bluži.

     

    Starp citu , svarīgi : vajag PRIMARY KEY( user_id , comment_id ) un + atsevišķu indeksu priekš comment_id .. un tad nekādi miljoni tur selektēti netiek.

     

    Anyway , paskaties :

    Akcents diezgn specifisks , bet saturs tev noderēs.

  5. Thumbs(
      value [ -1 , 1 ],
      user_id,
      comment_id,
      primary key( comment_id , user_id )
    );
    Comments(
      comment_id
      total_thumbs
      ... cits stuffs
    )

     

    Es turētu kopējo komenta vētējumu pie komentiem ,

    un pie katra balsojumaa pārbaudītu , vai neeksistē jau ieraksts Thumbs tabulā.

     

    Nav jegas no atsevišķa ID priekš thumbiem, jo tas tāpat netisk lietots.

  6. Kaut kāds pliks attēls ar 3 kolonnu izkārtojumu man neko neizsaka.

    Koda fragmentu kādu būtu parādījis.

    Same here.

     

    Piemēram parādi mums bootstrap failu un varbūt Routing klasi.

    Vismaz cilvēkiem būtu kaut kāda nojausma par koda kvalitāti.

    Citādi tu te "kaķi maisā" tirgo.

  7. Patiesībā labās variants būtu

    <link rel="stylesheet" type="text/css" href="http://res.<?php echo $SITE_NAME ?>/includes/layout.css" />

     

    Tas uzlabotu ielādes ātrumu, jo browseris var vilkt tikai divus failus vienlaicīgi no viena domeina.

    Un cookie'ji arī netiktu sūtīti komplektā.

  8. Hehe .. no tad neraksti procedurālu kodu un izmanto OOP.

    Pašu lapas loģiku vari noformēt kā MVC.

     

    Kodu izkartotu kā

    /public/
      asserts/
         css/
         javascript/
         graphics/
      uploads/
    /blog/
      cotrollers/
      views/
      models/
    /cms/
      cotrollers/
      views/
      models/
    /framework/
    

    Kur /public/ ir tas Document_Root us webservera.

  9. daGrevis, tam 2005ajā tika atrasta ievainojamība un 2008tajā tā tikai veiksmīgi realizēta.

    Un, ja palasi wikipēdijā, tad md5 ir līdzīgā stāvoklī.

     

    Protams tas viss galvenokārt attiecas uz "nesālītiem" hashiem.

     

     

    snach15, ehh ... nu ko tu tur vispār dari ?!

    • funkcijas isset() un empty() nav savstaprēji aizstājamas
    • nafig tu ierobežo simbolus, kas drīkst būt parolē ?
    • tu glabā lietotāja parole, kā "nesālītu" hash'u padarot to ievainojamu pret kollīzijām
    • tā vietā, lai salabotu klūdu, kas saistīta ar "header already sent" paziņojumu, tu to paslēp un paildzini laiku kurā lapa ielādējas

     

    Varbūt tomēt tev vajadzītu nedaudz pamācīties PHP, nevis lipināt kaut ko kopā no netā atrastiem fragmentiem.

  10. Tā ...

     

    Es teiktu ka tajā skriptā ir diezgan daudz problēmas:

    • tas noteikti nav kvalitatīvi uzrakstīts kods, jo loģika ir sabāzta kopā ar html'u
    • tiek izmantots session_register(), kas ir novecojusi ( deprecated ) funkcija sākot no 5.3.0 versijas
    • tiek izmantots addslashes() , to vajadzētu aizstāt at mysql_real_escape_string()
    • vispār jau jaunu kodu ar mysql_* funkcijām pat rakstīt nevajadzētu ... palasi iekš 'MySQL Forge'
    • rindās 63 un 64 tu piešķir vērtības nepārbaudot vai tās eksistē.
    • sql daļa ir pilnīgā dirsā
      • paroles ir jāglabā kā vienvirziena hash'us , vēlams vismaz kā sha256
      • tu pārbaudi vai ir pareizs jūzeris un parole,
        izskaiti vai rezultāts ir tikai 1 ( izskatās ja lietotāji tabulā nav norādti kā UNIQUE ) ,
        un pēc tam tu selectē vēlreiz to pašu tabu un skaties vai ir tāds jūzeris - KĀPĒC ?!?

      [*]visur ir nez kāpēc izmantot echo, lai rukātu leilus HTML gabalus, tā vietā vajadžetu būt aizētam <?php ?> tagam, tad HTMLam un tad atvērtam php tagam.

      [*] .. un ar php nesaistīta piezīme - mūsdienās šitā HTML neraksta.

     

     

    Par header() .. šitai funkcijai ir jātiek izpildītais pirms tu sāc sūtīt lapas saturu ( tavā gadījuā, tas būtu pirms <!DOCTYPE> ).

    Ņem vērā ka "atstarpe arī ir "saturs".

×
×
  • Create New...