login  Naam:   Wachtwoord: 
Registreer je!
 Forum

PHP Nadenkvraag

Offline Martijn - 31/07/2012 16:15 (laatste wijziging 01/08/2012 10:14)
Avatar van MartijnCrew PHP Ik heb een situatie waar ik geen oplossing op hoef, deze kan ik prima zelf bedenken.
Het lijkt me een leuk idee om met ervaren en beginnende programmeurs over situaties na te denken

LET OP! Het gaat meer om verschillende stukjes code. Met een database werken is een betere, maar denk even gewoon in alleen html/php!

De situatie: Ik heb een formulier met 2 setjes radiobuttons als volgt:
  1. <form method="post" action="">
  2. <input type="radio" name="optie1" value="1" />
  3. <input type="radio" name="optie1" value="2" />
  4. <input type="radio" name="optie1" value="3" />
  5.  
  6. <input type="radio" name="optie2" value="1" />
  7. <input type="radio" name="optie2" value="2" />
  8. <input type="radio" name="optie2" value="3" />
  9. <input type="radio" name="optie2" value="4" />
  10. </form>


BELANGRIJK: Er kunnen items bij komen. Er zijn er nu 3&4, maar beide kunnen tot X worden aangelengd!

Nu de vraag: Hoe controleer je het meest praktisch of een user de toegestane opties heeft aangeklikt en niet SQL-inject.

Voorbeeld oplossing
  1. if( in_array($_POST['optie1'], range(1,3)){ echo "optie1 goed";}
  2. if( in_array($_POST['optie2'], range(1,4)){ echo "optie2 goed";}


Als iemand nu bv '5' invult via *hoe dan ook*, gaat dat niet werken. Hebben mensen andere leuke ideeën? Ga uit van een pagina met veel bezoekers. Gekke code mag natuurlijk ook, zolang het maar niet dom wordt ;)

8 antwoorden

Gesponsorde links
Offline Ontani - 31/07/2012 17:00
Avatar van Ontani Gouden medailleGouden medailleGouden medailleGouden medaille

-1
Lijkt me de meeste ideale manier als je met numerische opties werkt.
Offline Martijn - 31/07/2012 17:22
Avatar van Martijn Crew PHP Ik doelde meer op voorbeeld code-tjes 
Offline Stijn - 31/07/2012 19:33
Avatar van Stijn PHP expert Je zou ook een <input type="hidden" name="optie1_min_range" value="0" /> en een max_range toevoegen per optie.

In javascript vul je die hidden waarden in voor je ze gaat submitten. En op de server check je of de gestuurde waarde correct is. Nu is dat ook onderschepbaar maar dit is een makkelijke manier.
Offline Koen - 31/07/2012 20:38
Avatar van Koen PHP expert Stijn, das wel heel manipuleerbaar 

De meest correcte manier? Werken met het MVC pattern (zou je sowieso al moeten doen), je model gebruiken om de forms te genereren en de validation rules gebruiken om validatie te schrijven.

PHP heeft een groot aanbod aan MVC frameworks. En je kan ook altijd dat van jezelf gebruiken 
Offline Martijn - 01/08/2012 10:12 (laatste wijziging 01/08/2012 10:13)
Avatar van Martijn Crew PHP @stijn het ging er juist om te kunnen controleren of mensen je code aan het narren zijn, en dan maak jij ze t nog makkelijker 

@koen, dat is wat utigebreider dan waar ik op doel. Ik zoek meer verschillende stukjes code om hetzelfde probleem op te lossen. Dus niet zozeer textueel, maar een voorbeeldje.

Wat bv ook kan, is regex:

  1. if( preg_match("/^[1-3]{1}&/s", $_POST['optie1']){ echo "optie1 goed";}
  2. if( preg_match("/^[1-4]{1}$/s", $_POST['optie2']){ echo "optie2 goed";}

Zou iets sneller kunnen zijn omdat arrays in PHP niet zo supersnel zijn, nadeel van deze is zodra er meer dan 1-9 opties zijn, dan wordt deze erg lastig

edit: Uiteraard zou een geschiktere manier zijn om alle opties in een DB te zetten, ze daaruit in je template te plaatsen, en bij submit kijkien of $_POST['id'] voorkomt in de database, maar het gaan me puur om de code-truucjes
Offline Maarten - 01/08/2012 10:17
Avatar van Maarten Erelid Relationele database gebruiken, waardoor enkel geldige waarden in DB kunnen.. als iemand dan 'foefelt' werkt het gewoon niet, #care.


Ik werk over het algemeen zo: ik doe validatie ter gebruiksvriendelijkheid met nette feedback (kies een optie, vul iets in, vul iets anders in, iets groter, iets kleiner), maar als men begint te prutsen via Fiddler of weet ik veel wat, dan ga ik me echt niet engageren om een nette foutafhandeling te tonen "gelieve niet te kloten met ons systeem": dan krijg je gewoon een serverfout of wordt je update gewoon niet doorgevoerd 

Aan de andere kant ben ik dan ook een .NET'er, de technologieën die we daar gebruiken vrijwaren ons sowieso al van injections, dus ik moet me enkel 'druk' maken over de geldigheid van waardes (dus dat je appel en peer, maar geen banaan kan invoeren).
Offline Martijn - 01/08/2012 11:15
Avatar van Martijn Crew PHP Ben zelf weer eens begonnen om een spelletje te maken, en daar log ik graag elke aanpassing die mensen maken met een kleine melding voor mij waar ze het deden, dus niet zozeer voor de gebruiker, maar meer zodat ik weet waar in het systeem gaten zitten.
Offline Maarten - 02/08/2012 16:44
Avatar van Maarten Erelid Ja ok, maar dat is een ander verhaal. Doen wij ook, als iemand ook maar enige instelling wijzigt in ons systeem wordt dit gelogd (wanneer, welke user/systeem, welke instelling, oldvalue, newvalue, ip, locatie (of proces in systeem)). Je kan je niet voorstellen hoe vaak onze helpdesk er soms van beschuldigd wordt "zelf instellingen aangepast te hebben" 
Gesponsorde links
Je moet ingelogd zijn om een reactie te kunnen posten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.185s