Archief - PHP: goede gewoontes

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

frenzal

Legacy Member
Ik ben al vrij veel ervaring met PHP ondertussen en het heeft mijn voorkeur als server side taaltje. Toch heb ik zo het gevoel dat ik wat slordig bezig ben en met sommige zaken meer tijd verlies dan nodig en andere zaken zeker beter kunnen.

Mijn php paginas zijn vaak een mix van includes, html en wat php dooreen. Het werkt allemaal, maar lijkt alles behalve ideaal, zeker voor grotere projecten. Hoe zit het met die template systemen, voor- en nadelen..

Forms maken vind ik meestal het hatelijkst als ik met php bezig, moeilijk is het niet maar wel heel repetief. Ik heb al gehoord over bepaalde form classen die het leven makkelijker kunnen maken. Zelfde voor eventuele DB classen, iemand hier ervaring mee.

Voor de rest is het de bedoeling dat dit een beetje een "php tips thread" zou kunnen zijn zoals: gebruik $_POST['blah'] ipv $blah enz...

killgore

Legacy Member
K, gauw lijstje maken want kmoet weer verder doen
  • Zorg dat je voor elke pagina een basis config file hebt, deze telt meestal slechts enkele lijnen code, vooral initialisatie van variabelen en zo goed als geen functies. Deze wordt via require_once toegevoegd bovenaan elk bestand en de variabelen daarin gedeclareerd worden niet overschreven (best dus om ze constanten te maken).
    Uitzondering op het niet gebruiken van functies: zorg dat er tijdens het ontwikkelen in die configuratie-file volgende code staat: error_reporting(E_ALL); (php5: error_reporting(E_ALL|E_STRICT); )
    Dit geeft je extreem veel warnings en notices, doe er iets aan, dit is foute & zeer vaak onveilige code hoewel ze zonder die error_reporting wel wordt uitgevoerd ... , andere situaties waarin dit systeem goed kan zijn ken ik niet.
  • Controleer elke gpc-var op het bestaan (gpc = get/post/cookie). Je werkt dus nooit rechtstreeks met bv. $_POST["var"], maar gaat als volgt te werk: $lokalevar = isset($_POST["var"]) ? $_POST["var"] : $_POST["var"];
    Let hier erop dat je best er niet van uitgaat dat deze 500 regels verder nog steeds gedeclareerd is, het is geen grote moeite om ze opnieuw op te halen uit de $_POST array, maar wel een grote moeite om een fout te vinden bij een variabele die ergens tussenstaps onverwachts gewijzigd is ;)!
  • Over includen: het systeem via ?page=blablabla is in 95% van de gevallen slecht. Vele mensen gaan niet akkoord met mij, ma imho is het zo. Je werkt hier compleet tegen alle programmatielogica in. Je programmeert een module (pagina) apart en voegt in wat je nodig hebt van layout en andere elementen, niet omgekeerd (je pagina in je layout includen). Naast die logica is het nog eens zeer moeilijk te debuggen ook.
    Deze techniek heeft bv. wel voordelen op een niet-db gericht CMS-systeem en mssch bij zeer grote sites waaraan maar zeer weinig mensen hier meewerken.
  • Als je algemene scripts ("libraries") toevoegt waarin klassen en/of functies gedeclareerd worden die je gebruiken zal -> gebruik require_once.
  • Gebruik enkel include of include_once als het echt niet noodzakelijk is dat het bestand wordt ingevoegd (moest die zeldzame situatie hem voordoen).
  • Gebruik enkel en alleen @ als je de fout daarna zelf afhandelt of bij het proberen van verscheiden functies voor 1 resultaat (gebeurt nogal vaak bij image-verwerking).
  • Zorg dat je zo snel mogelijk met een of ander template-systeem leert werken, het gescheiden houden van html & php is zowat van fundamenteel belang vo grotere projecten.
to be continued... (al 3x ondertussen :p)

tikketim

Legacy Member
ik maak meestal elke pagina apart maar de delen ervan die altijd terug komen ( menu , header , etc ... ) die include ik gewoon dus eigelijk is er dan geen html in de pagina zelf maar die html word geinclude

behalve kleine dingen natuurlijk zoals <p> tags ..

RpR

Legacy Member
ik maak gebruik van phplib om afscheiding van html en php te doen.

orez

Legacy Member
zorg dat uw $sql variabelen beschermd zijn tegen sql injection ! dit is heel eenvoudig te bekomen met een simpele functie:

PHP:
function quote_smart($value)
{
   // Stripslashes
   if (get_magic_quotes_gpc()) {
       $value = stripslashes($value);
   }
   // Quote if not integer
   if (!is_numeric($value)) {
       $value = "'" . mysql_real_escape_string($value) . "'";
   }
   return $value;
}

(dit in plaats van addslashes())

En dan als volgt uw query af te handelen waarin er een WHERE of INSERT of UPDATE statement aan te pas komt (met behulp van de sprintf() functie)

PHP:
$sql = sprintf("SELECT * FROM tbl WHERE obj1=%s, obj2=%s"), quote_smart($obj1), quote_smart($obj2));

Zo ben je al redelijk goed beveiligd tegen SQL injection, als uw gpc_quotes functie van uw host nu uit of aan staat ;)

Mulle

Legacy Member
Ik vind het ook altijd vervelend al die formulieren maken, daarom maak ik gebruik van een klasse. Ik maak gebruik van Formhandler die je kan vinden op deze site: http://81.4.87.13/FH3/.

killgore

Legacy Member
@orez: is_numeric is dikken bucht en werkt nie (test maar is op 3e5): gebruik preg_match("#^[0-9]+$#",$value)

extra tip: maak een algemene functie waar alle standaard-beveiliging & (html-)conversies in 1x gedaan worden, bespaart je heel wat code&debug-werk!

edit: trouwens, sql injection is de meest overhypte hack in php en bijna onmogelijk om misbruik van te maken... .

killgore

Legacy Member
nog:
preg functies ipv ereg functies
-weet dat je info over een bepaalde functie zeer simpel kan verkrijgen op volgende link: http://be2.php.net/functienaam (ik gebruik be2 omdat die meestal vlotter is :p)
- Gebruike en goeie IDE, een zeer goede bv. is eclipse uitgebreid met php plugin.

frenzal

Legacy Member
staan al veel goede dinges tussen, alvast bedankt iedereen

vooral die formhandler gaat mij veel werk besparen
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan