login  Naam:   Wachtwoord: 
Registreer je!
 Reacties op nieuwsartikel:
V2: Aldoende leert men ... Ook op Sitemasters?
Gepost door: xSc - 17 februari 2005 - 10:34 - Bron: Henri Schellingerhou - Hits: 2687

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:

  1. <?php
  2.  
  3. if ($_POST['submit']) {
  4.  
  5. // formulier verzonden
  6.  
  7. }
  8.  
  9. ?>



Bovenstaand voorbeeld is helaas praktijk. Zo slordig en onverzorgd als het maar kan. Oh nee, er bestaat een nog erger voorbeeld:

  1. <?php
  2.  
  3. if ($submit) {
  4.  
  5. // formulier verzonden
  6.  
  7. }
  8.  
  9. ?>



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:

  1. <?php
  2.  
  3. if ( $_SERVER['REQUEST_METHOD'] == 'POST' )
  4. {
  5.  
  6. // formulier verzonden
  7.  
  8. }
  9.  
  10. /* 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.
  11.  
  12.   Mensen, bedankt voor de melding. Zo zie je dat een kritisch ventje zelf ook fouten maakt.
  13.  
  14.   */
  15. ?>



Een andere veelvoorkomende fout is het plaatsen van variabelen en nummers tussen quotes.

Fout:

  1. <?php
  2.  
  3. $fout = "1";
  4.  
  5. echo $_GET['1'];
  6.  
  7. echo "$_GET['test']";
  8.  
  9. $zin = "Hallo, ik heet $naam";
  10.  
  11. ?>



Wat hierboven staat, is heel gangbaar op Sitemasters.be. Niemand behoeft zich aangesproken te voelen ...

Correct:

  1. <?php
  2.  
  3. $fout = 1;
  4.  
  5. echo $_GET['test'];
  6.  
  7. $zin = "Hallo, ik heet " . $naam;
  8.  
  9. ?>



Hiermee hoop ik mensen tot nadenken te zetten ...
Bookmark and Share

Pagina:  

Offline  leendertW
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.

Offline  remy
Gepost op: 17 februari 2005 - 11:04
PHP ver gevorderde



  1. <?php empty( $_POST ) ?>

moet je daar niet mee uitkijken? Als je in een veld 0 intypt dan wordt dit als 'empty' aangezien.

Offline  nemesiskoen
Gepost op: 17 februari 2005 - 11:18
Gouden medaille

PHP expert




  1. <?php
  2.  
  3. if ( $_SERVER['REQUEST_METHOD'] == 'POST' && $_POST != "" )
  4. {
  5.  
  6. // formulier verzonden
  7.  
  8. }
  9.  
  10. // Dit voorbeeld werkt ook wanneer het formulier verzonden wordt door op de Enter-toets te drukken.
  11.  
  12. ?>

Moet het dan niet zo zijn?
want zoals remy zegt zal als de waarde 0 is ingetypt het als empty worden aanzien

Offline  xSc
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.

Offline  remy
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;-)

Offline  xSc
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.

Offline  Dennisvb
Gepost op: 17 februari 2005 - 12:28
MySQL ver gevorderde



Daarom had ik deze tut ook geschreven:
http://www.site...&id=78

Offline  BigBug
Gepost op: 17 februari 2005 - 13:25
PHP expert



Keep up the good work 

Offline  Dani
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.

Offline  Thomas
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:
  1. <input type="hidden" name="action" value="inloggen" />


controle:
  1. <?php
  2. if(isset($_POST['action']) && $_POST['action'] == "inloggen") {
  3. // verwerk het inlog-formulier
  4. ...
  5. }
  6. ?>


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 .

Pagina:  
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.051s