login  Naam:   Wachtwoord: 
Registreer je!
 Forum

verbetering voor mn prep_array()

Offline Martijn - 29/10/2008 16:43 (laatste wijziging 29/10/2008 19:04)
Avatar van MartijnCrew PHP (ik weet niet of als je segmenten code hebt dat op plaatscode moet, indien dat moet, meld het maar, dan pas ik het aan)

Ik zou graag willen weten of er betere manieren zijn 

oke, kleine uitleg:
Ik heb een functie gemaakt die een array kan onschadelijk maken, dus de chars als char en de ints als int.
"Waarom zou je een array bewerken?" => je $_POST is ook een array, en daar issie voor gebouwd.

Je kunt de volgende dingen laten doen:
  1. <input type="text" name="voorbeeld" >
  2. <input type="text" name="<?=$int?>voorbeeld1" >
  3. <input type="text" name="<?=$char?>voorbeeld2" >
  4. <input type="text" name="<?=$skip?>voorbeeld3" >

voorbeeld word als char gedaan
voorbeeld1 als int
voorbeeld2 als char
voorbeeld3 blijft ongeweizigd

Het is de bedoeling dat je dit helemaal bovenaanzet:
  1. //-- moet als 1e, anders werkt code maken niet voor prep_array()
  2. function code_generator($length){
  3. $generated_key = "";
  4. while (strlen($generated_key) < $length){
  5. $generate = mt_rand(36, 93);
  6. if (($generate >= 48 && $generate <= 57) || ($generate >= 65 && $generate <= 90 ) && ($generate != 73 && $generate != 76 && $generate != 79)){
  7. $generated_key .= strtolower(chr($generate));
  8. }// 73= i, 76 = l, 79 = o;
  9. }
  10. return $generated_key;
  11. }
  12. //--
  13. if(isset($_SESSION['prep_array'])){$_SESSION['prep_array_old']=$_SESSION['prep_array'];}
  14. $_SESSION['prep_array']=array("char"=>code_generator(3),"int"=>code_generator(3),"skip"=>code_generator(3));
  15. $char=$_SESSION['prep_array']['char']."|||";
  16. $int =$_SESSION['prep_array']['int']."|||";
  17. $skip=$_SESSION['prep_array']['skip']."|||";
  18. //--


$_SESSION['old'] onthoud dus de vorige ronde, want zodra je ergens op klikt ververst de session waarde, dus die moet je houden.

De codegenerator is van hier geloof ik, maar dats niets speciaals

Dan moet je dit neerzetten:
  1. if(isset($_POST)){$_POST=prep_array($_POST);}

Hier kun je tevens instellen dat de oude waardes worden onthouden door dit neer te zetten
  1. $_POST=prep_array($_POST,'keep');

$_POST['voorbeeld'] word dan als char gedaan
$_POST['voorbeeld_old'] is de originele input.
En dan word alles voor je gedaan door deze functies
De functie die filterd:
  1. function pre_prep_array($array,$type='char',$original='destroy'){
  2. $returnArray = array();
  3. foreach($array as $key=>$value){
  4. if(is_array($value)){$returnArray[$key]="No 3d+ arrays allowed";}
  5. elseif($type=="int"){
  6. $returnArray[$key]=prep_num($value);
  7. }
  8. elseif($type=="char"){
  9. $returnArray[$key]=prep_char($value);
  10. }
  11. elseif($type=="skip"){
  12. $returnArray[$key]=$value;
  13. }
  14. elseif($type=="skip1"){
  15. $returnArray[$key]="Ongeldig!";
  16. }
  17. if($original!='destroy'){$returnArray[$key."_old"]=$value;}
  18.  
  19. }//-- einde foreach
  20. return $returnArray;
  21. }//--einde pre_prep_array


en de functie die het laat uitvoeren:
  1. function prep_array($array){
  2. $returnArray = array();
  3. foreach($array as $key=>$value){
  4. $controle=explode("|||",$key);
  5.  
  6. if(count($controle)>1){
  7. if($controle[0]==$_SESSION['prep_array_old']['int']){
  8. $type='int';
  9. }
  10. elseif($controle[0]==$_SESSION['prep_array_old']['char']){
  11. $type='char';
  12. }
  13. elseif($controle[0]==$_SESSION['prep_array_old']['skip']){
  14. $type='skip';
  15. }
  16. elseif(!in_array($controle[0],$_SESSION['prep_array_old'])){
  17. $type='skip1';
  18. //echo"SQL injecter!";
  19. // mogelijk een regel om persoon op te slaan
  20. //exit;
  21. }
  22. $key=$controle[1];
  23. }//einde count >1
  24. else{
  25. $type='char';
  26. }
  27.  
  28. if(is_array($value)){
  29. $returnArray[$key]=pre_prep_array($value,$type);
  30. }//--einde foreach in foreach
  31.  
  32. else{
  33. $value = pre_prep_array(array($value),$type);
  34. $value= implode("",$value);
  35. $returnArray[$key]=$value;
  36. }
  37. }//-- einde foreach
  38. return $returnArray;
  39. }//-- einde functie prep_array


Volgens mij heb ik SQL-injection gedekt.
Ook kan die checkboxes of andere 2d vormen van arrays aan.
Is dr iemand die punten voort verbetering ziet?

10 antwoorden

Gesponsorde links
Offline Abbas - 29/10/2008 18:17 (laatste wijziging 29/10/2008 18:19)
Avatar van Abbas Gouden medaille

Crew .NET
Als dit als uitleg wilt geven en geen vraag hierover hebt omdat er iets niet werkt ofzo post je dit best als script of tutorial! 
Alleen denk ik dat er een foutje zit in je eerste stukje code, aan de highlighting te zien..
Offline Martijn - 29/10/2008 18:19
Avatar van Martijn Crew PHP nee ik zou graag willen dat wat meer ervaren mensen (of uberhaupt iemand die wat ziet) verteld wat beter zou kunnen

en de highlight komt omdat dr php in de html staat 
Offline Abbas - 29/10/2008 18:20
Avatar van Abbas Gouden medaille

Crew .NET
Ok, maar als alles juist geopend en afgesloten is, zou toch alles hetzelfde moeten zijn van kleur van dit tags...?
Offline Martijn - 29/10/2008 18:21
Avatar van Martijn Crew PHP you'd say eh? maar toch niet of mn html moet erg slecht zijn 8|
Offline jelle - 29/10/2008 22:09 (laatste wijziging 29/10/2008 22:09)
Avatar van jelle PHP beginner
  1. <input type="text" name="voorbeeld" >
  2. <input type="text" name="<?=$int?>voorbeeld1" >
  3. <input type="text" name="<?=$char?>voorbeeld2" >
  4. <input type="text" name="<?=$skip?>voorbeeld3" >


ben je bij de php echo's vergeten af te sluiten met ";"
Offline Abbas - 29/10/2008 22:15
Avatar van Abbas Gouden medaille

Crew .NET
  1. <input type="text" name="voorbeeld" >
  2. <input type="text" name="<?php echo $int; ?>voorbeeld1" >
  3. <input type="text" name="<?php echo $char; ?>voorbeeld2" >
  4. <input type="text" name="<?php echo $skip; ?>voorbeeld3" >

Zo dan?
Offline jelle - 29/10/2008 22:21
Avatar van jelle PHP beginner yep  
Offline Stijn - 29/10/2008 22:22
Avatar van Stijn PHP expert @jelle: hoeft niet.
Offline jelle - 29/10/2008 22:26
Avatar van jelle PHP beginner hoef je bij zoiets :
  1. <?="blaat"?>


geen ";" te gebruiken?? lol  wist ik niet
Offline Martijn - 29/10/2008 22:46 (laatste wijziging 30/10/2008 22:22)
Avatar van Martijn Crew PHP met de short hoeft dat niet nee k weet niet of dat ook zo geld voor "tekst", maar voor een $var niet iig. Maar iemand opmerkingen over mn script? ik zou dr graag een goede solide functie van willen maken die simpel veel kan

edit: Iemand nog wat anders op te merken op de shorttags na? 
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.232s