Posts by Darsstar

    Als je het dynamisch wilt hebben door het in een database te zetten lijkt caching mij een oplossing voor je.
    Maar angezien TPL_Magic niet aan caching doet en je Kohana's Fragment class ook al niet kunt gebruiken kan dit moeilijk worden...
    *gaat met een vorige discussie verder* Ik heb liever business logic en presentation logic geschijden dan PHP en HTML gescheiden, en aangezien TPL_Magic eigenlijk alleen maar simpele find and replace parser is kan je dus geen presentation logic in de templates stoppen en zal die waarschijnlijk in de controller terecht komen en dus tegen MVC in druisen.
    (Voor de nieuwkomers, ik heb over het algemeen liever bestanden die puur om presentatie gaan (maar wel PHP bevatten om dat mogelijk te maken) dan templates die door PHP geparsed moeten worden.)


    De Kohana query builder enscaped automatisch waardes voor je.
    Zie Kohana_Database::quote(), Kohana_Database::quote_table(), Kohana_Database::quote_identifier() en Kohana_Database_MySQL::enscape().
    Zie DB::expr() en hoe Kohana_Database_Expression in de bovenstaande methods gebruikt wordt om iets letterlijk in de query te stoppen.

    Citaat van Lancer

    Dus ik moet een if zoals deze:

    PHP
    if ($jisin == 1)


    nooit tussen "" zetten?


    Cijfers zijn cijfers en geen strings en hoeven daardoor niet tussen quotes.


    Citaat van Lancer

    strtolower maakt dus de gehele naam naar kleine letters?
    Dus Lancer naar lancer, klopt dit?


    Dat klopt.


    Citaat van Lancer

    Waarom zou ik de accolades geen eigen niveau geven?
    Opzich is jou script een stuk overzichtelijker omdat alles onder elkaar staat, en de mijne is een weerwar...


    Daarom dus, ik zie de accolades trouwens liever op de zelfde regel als de if, elseif en else dan op hun eigen niveau (maar het liefst zoals in mijn voorbeeld, maar smaak valt niet te twusten)


    Citaat van Lancer

    Ik dacht dat beveiling zoals mysql_real_escape_string alleen bij POST's en GET's moest?


    Ik weet niet aan welke voorwaarden de login van jouw spel hangen.
    Als (bijvoorbeeld) quots toegestaan zijn, en je gebruikt alleen bij het registreren mysql_real_escape_string() dan is je spel niet bepaald veilig...
    Je moet user input beveiligen, en de login was ooit user input...
    Ik ben vanavond een beetje paranoia volgens mij...

    De tweede snippet is beter.
    Die geeft geen notices en door de variablen buiten quotes te halen kun je gemakkelijker variable in strings herkennen.


    Nog beter:

    PHP
    if(strtolower($data->status) == "dood")  { 
        $dood = mysql_query("SELECT * FROM `vermoord` WHERE `login`='" .mysql_real_escape_sring($data->login). "'");


    PS. Ik zou de accolades niet hun eigen niveau geven, en ook na elke punt-komma een enter plaatsen:


    Ok, ik heb nog wat meer dingen verbeterd, maar zo vind ik het behoorlijk wat netter.

    Ik zie de link tussen mysql_real_escape_string() niet echt...
    nl2br() hoor je pas te gebruiken als je iets op het scherm wilt weergeven, en in de database hoor je dingen zo ruw mogelijk op te slaan (geen nl2br(), htmlspecialchars() etc)


    ctype_digit() geeft TRUE of FALSE terug...
    intval() is een functie die ergens een integer van maakt, floatval() maakt ergens floats van...


    Niels
    Dat iets input is wilt niet zeggen dat het de database in gaat.
    Ik zou waarschijnlijk eerder een statische Escape class maken met methods zoals Escape::html(), Escape::(my/pg/ms)sql().
    Maar waarschijnlijk nog liever escape() methods in classes zoals Database, HTML, JSON (als dit een class waardig is dan)...


    Controleer liever alle input goed en zorg voor goede foutafhandeling.
    Als je echt merkt dat je steeds maar bepaalde stukken code blijft herhalen, dan stop je ze in een functie.


    Simpel:

    PHP
    $var = round($_POST['cijfer'])


    round() zal getallen returnen, en die bevatten geen gevaarlijke tekens die een query onveilig kunnen maken.


    Leg eens beter uit wat je precies wilt en dan zullen we vertellen of het wel echt een goed idee is of niet, en wat mogelijk is.
    Wil je bijvoorbeeld dat een functie op basis van de key bepaald wat er moet gebeuren met die waarde?
    Of wilde je een magische functie die alles voor je doet (pas op met wat je wenst, grote kans dat het verkeerd uitpakt)

    Het ziet er wel cool uit!


    Wel vind ik het jammer dat de berekeningen in PHP worden uitgevoerd.
    Als het door de CSS parser gedaan zou worden zou het nog cooler zijn. (Ik kan waarschijnlijk wachten tot ik een ons weeg, en dan zal het er nog niet zijn)

    PHP
    // geef de speler +1 nitro (kan iemand -1 nitro hebben?)
    mysql_query("UPDATE `users` SET `car_tunenitro`=`car_tunenitro`+'1' WHERE `login`='$data->login'");
    // geef de speler +50 preformance als zijn nitro -1 was, en nu dus 0 is
    mysql_query("UPDATE `users` SET `car_tuneperformance`=`car_tuneperformance`+'50' WHERE `car_tunenitro`='0' AND `login`='$data->login'");


    Het volgende is wat beter...

    PHP
    mysql_query("UPDATE `users` SET `car_tunenitro`=`car_tunenitro` + 1, `car_tuneperformance`=`car_tuneperformance` + IF(`car_tunenitro` = 0, 50, 0) WHERE `login`='".$data->login."'");


    Ook is $error = niks; fout, strings zet je tussen quotes (aanhalingstekens)

    Citaat van Spinazie


    Nu ineens wel weer... Jullie weten ook niet wat je wilt hé :p


    Joshua is te verwaarlozen... :p
    Dat besluit was gemaakt voor dat de nieuwe mods er waren, dus die hadden geen inzeg.


    Verder wel een paar fijne updates, de eerste is alleen al een aantal keer gerapporteerd voordat Pharox dat deed.

    Kan iemand mij vertellen welk genie $tijd = rand(3600,3600) heeft bedacht?
    Want ik zou graag willen weten waarom $ijd = rand(3600,3600) beter zou zijn dan $tijd = 3600?
    Of wat er mis zou zijn met het getal 3600 gewoon direct in de query te zetten?


    PS. Bedenk zelf maar waar je een sarcastische ondertoon bij moet denken.

    Die error zegt dat het veld pruimtabak niet voorkomt in de lijst met velden voor de tabel drugskoers.

    PHP
    CREATE TABLE IF NOT EXISTS `drugskoers`


    Blijkbaar had je al een tabel drugskoers, maar dan zonder het veld pruimtabak.

    Nee...



    Zo voorkom je dat...


    Het leuke van classes gebruiken is dat je meerdere instanties van die class kunt hebben.
    Als je dan een (niet statische) eigenschap in de ene instantie veranderd heeft dat geen enkel effect op de andere instantie.
    Maar soms wil je dat als je een eigenschap veranderd het juist wel effect heeft op alle andere instanties!
    Daar zijn statische variablen heel goed voor! (er zijn natuurlijk ook minder mooie manier te verzinnen)

    Citaat van SC-Scripting

    echo is om iets op het scherm te weergeven, maar met de header is het de bedoeling dat je doorgestuurd wordt.


    Zoek eens op wat headers zijn.
    Headers worden door je browser verstuurd naar een server, die headers bevatten informatie voor de server. (welke pagina je wilt bekijken, post gegevens, cookies etc.)
    De server stuurt dan headers terug, gevolgt door de output van bijvoorbeeld echo's (er hoeft natuurlijk geen output te zijn).
    Het punt is dat headers eerst verstuurt moeten worden, zodra er ook maar een spatie of wat dan ook als output terug naar de browser verstuurd wordt zijn de headers al verstuurt en kun je die net meer aanpassen.
    Daar gaat de hele error over, je bent te laat met het aanroepen van header() om de headers te veranderen.
    header() is dus niet voor het redirecten van een pagina. (je kunt ook cookies zetten met header() om even iets te noemen)