Crew 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:
<input type="text" name="voorbeeld" >
<input type="text" name="<?=$int?>voorbeeld1" >
<input type="text" name="<?=$char?>voorbeeld2" >
<input type="text" name="<?=$skip?>voorbeeld3" >
<input type="text" name="voorbeeld" > <input type="text" name="<?=$int?>voorbeeld1" > <input type="text" name="<?=$char?>voorbeeld2" > <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:
//-- moet als 1e, anders werkt code maken niet voor prep_array()
function code_generator($length){
$generated_key = "";
while (strlen($generated_key) < $length){
$generate = mt_rand(36, 93);
if (($generate >= 48 && $generate <= 57) || ($generate >= 65 && $generate <= 90 ) && ($generate != 73 && $generate != 76 && $generate != 79)){
$generated_key .= strtolower(chr($generate));
}// 73= i, 76 = l, 79 = o;
}
return $generated_key;
}
//--
if(isset($_SESSION['prep_array'])){$_SESSION['prep_array_old']=$_SESSION['prep_array'];}
$_SESSION['prep_array']=array("char"=>code_generator(3),"int"=>code_generator(3),"skip"=>code_generator(3));
$char=$_SESSION['prep_array']['char']."|||";
$int =$_SESSION['prep_array']['int']."|||";
$skip=$_SESSION['prep_array']['skip']."|||";
//--
//-- moet als 1e, anders werkt code maken niet voor prep_array() function code_generator($length){ $generated_key = ""; while (strlen($generated_key) < $length){ if (($generate >= 48 && $generate <= 57) || ($generate >= 65 && $generate <= 90 ) && ($generate != 73 && $generate != 76 && $generate != 79)){ }// 73= i, 76 = l, 79 = o; } return $generated_key; } //-- if(isset($_SESSION['prep_array'])){$_SESSION['prep_array_old']=$_SESSION['prep_array'];} $_SESSION['prep_array']=array("char"=>code_generator (3),"int"=>code_generator (3),"skip"=>code_generator (3)); $char=$_SESSION['prep_array']['char']."|||"; $int =$_SESSION['prep_array']['int']."|||"; $skip=$_SESSION['prep_array']['skip']."|||"; //--
$_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:
if(isset($_POST)){$_POST=prep_array($_POST);}
if(isset($_POST)){$_POST=prep_array ($_POST);}
Hier kun je tevens instellen dat de oude waardes worden onthouden door dit neer te zetten
$_POST=prep_array($_POST,'keep');
$_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:
function pre_prep_array($array,$type='char',$original='destroy'){
$returnArray = array();
foreach($array as $key=>$value){
if(is_array($value)){$returnArray[$key]="No 3d+ arrays allowed";}
elseif($type=="int"){
$returnArray[$key]=prep_num($value);
}
elseif($type=="char"){
$returnArray[$key]=prep_char($value);
}
elseif($type=="skip"){
$returnArray[$key]=$value;
}
elseif($type=="skip1"){
$returnArray[$key]="Ongeldig!";
}
if($original!='destroy'){$returnArray[$key."_old"]=$value;}
}//-- einde foreach
return $returnArray;
}//--einde pre_prep_array
function pre_prep_array($array,$type='char',$original='destroy'){ foreach($array as $key=>$value){ if(is_array($value)){$returnArray[$key]="No 3d+ arrays allowed";} elseif($type=="int"){ $returnArray[$key]=prep_num($value); } elseif($type=="char"){ $returnArray[$key]=prep_char($value); } elseif($type=="skip"){ $returnArray[$key]=$value; } elseif($type=="skip1"){ $returnArray[$key]="Ongeldig!"; } if($original!='destroy'){$returnArray[$key."_old"]=$value;} }//-- einde foreach return $returnArray; }//--einde pre_prep_array
en de functie die het laat uitvoeren:
function prep_array($array){
$returnArray = array();
foreach($array as $key=>$value){
$controle=explode("|||",$key);
if(count($controle)>1){
if($controle[0]==$_SESSION['prep_array_old']['int']){
$type='int';
}
elseif($controle[0]==$_SESSION['prep_array_old']['char']){
$type='char';
}
elseif($controle[0]==$_SESSION['prep_array_old']['skip']){
$type='skip';
}
elseif(!in_array($controle[0],$_SESSION['prep_array_old'])){
$type='skip1';
//echo"SQL injecter!";
// mogelijk een regel om persoon op te slaan
//exit;
}
$key=$controle[1];
}//einde count >1
else{
$type='char';
}
if(is_array($value)){
$returnArray[$key]=pre_prep_array($value,$type);
}//--einde foreach in foreach
else{
$value = pre_prep_array(array($value),$type);
$value= implode("",$value);
$returnArray[$key]=$value;
}
}//-- einde foreach
return $returnArray;
}//-- einde functie prep_array
function prep_array($array){ foreach($array as $key=>$value){ if($controle[0]==$_SESSION['prep_array_old']['int']){ $type='int'; } elseif($controle[0]==$_SESSION['prep_array_old']['char']){ $type='char'; } elseif($controle[0]==$_SESSION['prep_array_old']['skip']){ $type='skip'; } elseif(!in_array($controle[0],$_SESSION['prep_array_old'])){ $type='skip1'; //echo"SQL injecter!"; // mogelijk een regel om persoon op te slaan //exit; } $key=$controle[1]; }//einde count >1 else{ $type='char'; } $returnArray[$key]=pre_prep_array($value,$type); }//--einde foreach in foreach else{ $value = pre_prep_array (array($value),$type); $returnArray[$key]=$value; } }//-- einde foreach return $returnArray; }//-- 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?
|