V2: Aldoende leert men ... Ook op Sitemasters?
Gepost door: xSc - 17 februari 2005 - 10:34 - Bron: Henri Schellingerhou - Hits: 2789
Het forum is nooit hetzelfde. Onze (actieve) leden dragen hun steentje bij om het levendig te houden ... Helaas ben ik nogal star als het gaat over forumregels, script lay-out, etc. Om deze reden zullen (enkele) leden soms met ingehouden woede naar hun zojuist verwijderde reactie staren. Wat is nu de drijfveer ... ?
Mijn doel is om elk lid goed en netjes te leren scripten. Ik kan me ontzettend boos maken, wanneer er een (reeds gevorderd) lid met een script uit onze Script Library komt wat echt te triest is voor woorden ... Zeker beginnelingen (zogenaamde n00bjes) lopen hierdoor onnodig vast.
Voorbeeld:
<?php
if ($_POST['submit']) {
// formulier verzonden
}
?>
<?php if ($_POST['submit']) { // formulier verzonden } ?>
Bovenstaand voorbeeld is helaas praktijk. Zo slordig en onverzorgd als het maar kan. Oh nee, er bestaat een nog erger voorbeeld:
<?php
if ($submit) {
// formulier verzonden
}
?>
<?php if ($submit) { // formulier verzonden } ?>
Waarom is dit nu fout, zul je zeggen? PHP heeft een de language construct isSet() om te controleren of een bepaalde variabele bestaat. Verder zijn SuperGlobals verplicht, tenzij je een PHP-versie gebruikt uit grootmoeders tijd.
Correct voorbeeld:
<?php
if ( $_SERVER['REQUEST_METHOD'] == 'POST' ) {
// formulier verzonden
}
/* empty( $_POST ) is toch niet goed. Het werkt namelijk in een aantal gevallen niet, dus het is overbodig. De bovenstaande constructie biedt in principe voldoende. Dit voorbeeld werkt ook wanneer het formulier verzonden wordt door op de Enter-toets te drukken.
Mensen, bedankt voor de melding. Zo zie je dat een kritisch ventje zelf ook fouten maakt.
*/ ?>
<?php if ( $_SERVER['REQUEST_METHOD'] == 'POST' ) { // formulier verzonden } /* empty( $_POST ) is toch niet goed. Het werkt namelijk in een aantal gevallen niet, dus het is overbodig. De bovenstaande constructie biedt in principe voldoende. Dit voorbeeld werkt ook wanneer het formulier verzonden wordt door op de Enter-toets te drukken. Mensen, bedankt voor de melding. Zo zie je dat een kritisch ventje zelf ook fouten maakt. */ ?>
Een andere veelvoorkomende fout is het plaatsen van variabelen en nummers tussen quotes.
Fout:
<?php
$fout = "1";
echo $_GET['1'];
echo "$_GET['test']";
$zin = "Hallo, ik heet $naam";
?>
<?php $fout = "1"; $zin = "Hallo, ik heet $naam"; ?>
Wat hierboven staat, is heel gangbaar op Sitemasters.be. Niemand behoeft zich aangesproken te voelen ...
Correct:
<?php
$fout = 1;
echo $_GET['test'];
$zin = "Hallo, ik heet " . $naam;
?>
<?php $fout = 1; $zin = "Hallo, ik heet " . $naam; ?>
Hiermee hoop ik mensen tot nadenken te zetten ...
|
|
|
Gepost op: 17 februari 2005 - 10:46 |
|
|
|
PHP beginner
|
Ja het klopt helemaal wat je zegt.
Voorbeeld:
Er komt iemand op deze site met een door 'hem' gemaakt script. Nu zit daar een fout in zodat het script niet werkt.
Het script zit vol met fouten zoals Henri zegt (geen gebruik van Superglobals, nummers en variabelen tussen quotes etc.) . Nu wordt daar helemaal niet naar gekeken maar er wordt alleen naar de 'echte' fout(en) gekeken zodat het script werkt.
Conclusie: Het script werkt wel en die persoon is ook 'blij', maar hij leert het scripten dan nooit goed. Hij gaat er vanuit (denk ik) dat de gevorderde leden hier die fouten er ook wel uit zouden halen, maar nee meestal gebeurt dat inderdaad niet. |
|
|
|
Gepost op: 17 februari 2005 - 11:04 |
|
|
|
PHP ver gevorderde
|
moet je daar niet mee uitkijken? Als je in een veld 0 intypt dan wordt dit als 'empty' aangezien. |
|
|
|
Gepost op: 17 februari 2005 - 11:18 |
|
|
|
PHP expert
|
<?php
if ( $_SERVER['REQUEST_METHOD'] == 'POST' && $_POST != "" )
{
// formulier verzonden
}
// Dit voorbeeld werkt ook wanneer het formulier verzonden wordt door op de Enter-toets te drukken.
?>
<?php if ( $_SERVER['REQUEST_METHOD'] == 'POST' && $_POST != "" ) { // formulier verzonden } // Dit voorbeeld werkt ook wanneer het formulier verzonden wordt door op de Enter-toets te drukken. ?>
Moet het dan niet zo zijn?
want zoals remy zegt zal als de waarde 0 is ingetypt het als empty worden aanzien |
|
|
|
Gepost op: 17 februari 2005 - 11:24 |
|
|
|
Onbekend
|
Let op: $_POST is een array! Als een element uit de array de waarde 0 heeft, is de array dus niet empty. |
|
|
|
Gepost op: 17 februari 2005 - 11:37 |
|
|
|
PHP ver gevorderde
|
maar het i s &&, dus er moet op de knop zijn gekikt en de inhoud moet niet leeg zijn, of minstens waarde 1 hebben want anders geeft hij false weer.
heb net nog ff geprobeerd;-) |
|
|
|
Gepost op: 17 februari 2005 - 11:44 |
|
|
|
Onbekend
|
Remy, bij een slechts een waarde 0 van een element geeft hij false terug, maar dat is niet erg.
Er wordt gekeken of het formulier verzonden is middels de post-methode en niet of er op de knop geklikt is. |
|
|
|
Gepost op: 17 februari 2005 - 12:28 |
|
|
|
MySQL ver gevorderde
|
|
|
|
Gepost op: 17 februari 2005 - 13:25 |
|
|
|
PHP expert
|
Keep up the good work |
|
|
|
Gepost op: 17 februari 2005 - 13:47 |
|
|
|
PHP gevorderde
|
Citaat: Verder zijn SuperGlobals verplicht, tenzij je een PHP-versie gebruikt uit grootmoeders tijd
Niet helemaal akkoord
In bijde gevallen geldt de regel : ken de oorsprong van je variabelen.
Je kan met bijde methodes (superglobals of niet) een veilige site creeren. Je moet enkel opleten dat de gegevens die je gebruikt niet van 'kwaadhardige' afkomst zijn, en dit in beide gevallen. |
|
|
|
Gepost op: 17 februari 2005 - 14:47 |
|
|
|
Moderator
|
Je hebt zoiets als regels, en de praktische toepassing ervan.
Ik heb het allang afgeleerd om leden die een stuk functionaliteit verlangen tot andere (wellicht betere) gedachten / een beter ontwerp te bewegen.
In de praktijk is het nou eenmaal zo dat mensen dingen willen hebben die werken, en hoe dat gebeurt interesseert eigenlijk alleen ons - en niet de mensen die er gebruik van maken...
Het beste kun je de volgende 'werkwijze' hanteren:
"make it work" - zorg dat je code de parser overleeft
"make it right" - zorg dat de code doet wat men wil dat het doet
"make it fast" - optimaliseer je code (als je hier tijd voor hebt)
De laatste stap is altijd een beetje een 'trade-off' tussen flexibiliteit <--> leesbaarheid <--> snelheid.
Over dat voorbeeld van die formulieren: ik stop er altijd een hidden veld "action" in, waarin ik aangeef wat voor formulier het betreft. Als het formulier wil verwerken, dan controleer ik op het geset-zijn van deze hidden variabele (sorry Henri ), dus zoiets:
hidden veld:
<input type="hidden" name="action" value="inloggen" />
<input type="hidden" name="action" value="inloggen" />
controle:
<?php
if(isset($_POST['action']) && $_POST['action'] == "inloggen") {
// verwerk het inlog-formulier
...
}
?>
<?php if(isset($_POST['action']) && $_POST['action'] == "inloggen") { // verwerk het inlog-formulier ... } ?>
Dit is niet geheel volgens de 'regels van de kunst', maar het werkt prima en het is duidelijk wat er gebeurt (en ik vind dit netjes genoeg). Zo heeft iedereen een beetje zijn eigen 'weg' in PHP, dus dat zouden wij als crew ook een beetje (door de vingers) moeten zien.
Ik heb iig nog geen hele erge klachten over mijn code @ sitemasters gehoord ? Misschien durft de crew dat niet . |
|
|
|
|
|