créer une requete entièrement dynamique

x@v
Mammouth du PHP | 570 Messages

02 déc. 2008, 02:03

Bonsoir,
j'espère faire un méthode pour insérer des données. mais je n'arrive pas à récupérer passer par mon formulaire en POST.
	// connaître les champs existant dans une table
	public function getListeChamp($table)
	{
		$this->sql="SHOW COLUMNS FROM $table";
		//return $result;
		$result=parent::select($this->sql);
		foreach ($result as $field) 
			$champ[] = $field['Field'];
		return $champ;
	}
	
	// faire ue requete d'insertion dynamique
	public function getSqlInsert($table)
	{
         $champs=$this->getListeChamp($table);
         $sql='INSERT INTO '.$table.' (';
         foreach ($champs as $val) :
            if($val == 'id')
               $sql.=$val;
            else
               $sql.=', '.$val;
         endforeach;
         $sql.= ') VALUES (';
         foreach ($champs as $val) :
            if($val == 'id')
               $sql.='NULL';
            else
               $sql.=", '".$_POST[$val]."'";
         endforeach;
         $sql.=');';
         return $sql;
	}
j'imprime
   $test=$modelAdmin->getSqlInsert('categorie');
   echo $test; 
le navigateur affiche:
INSERT INTO categorie (id, nom, description, langue, dateCreation, dateModification, sousCategorie, 
motsCles, venteCategorie, iconeCategorie) VALUES (NULL, '', '', '', '', '', '', '', '', '');
Sa vous parle ?
Merci

edit

Code : Tout sélectionner

sa ne fonctionne pas parce que les variables $_post sont traité dans l'entète. Je ne vois pas comment contourner cette difficulté !

ViPHP
ViPHP | 5924 Messages

02 déc. 2008, 02:50

sa ne fonctionne pas parce que les variables $_post sont traité dans l'entète.
Je ne vois pas comment contourner cette difficulté !
Euh, désolé mais je ne comprends pas ce que tu veux dire… Par ailleurs, il me paraît particulièrement laid de récupérer directement les variables $_POST dans ta requête. Déjà tu autorises royalement des magnifiques injections SQL, ensuite rien ne dit que tous les champs devront brutalement recevoir les données du formulaires, enfin pourquoi les données devraient forcément venir d'un formulaire ? Bref, il faut séparer les blocs, on ne fait pas un traitement de formulaire en même temps qu'une construction de requête. Tu souhaites faire du générique, tu fais un code qui ne sera jamais adapté à une situation générale…

x@v
Mammouth du PHP | 570 Messages

02 déc. 2008, 04:15

c'est pour un back-office, donc la sécurité c'est ok .
Pour mon back-office j'utilise des formulaires.
effectivement je boucle sur $_POST pour obtenir les valeurs
là sa fonctionne:
	// faire ue requete d'insertion dynamique
	public function getSqlInsert($table)
	{
         $champs=$this->getListeChamp($table);
         $sql='INSERT INTO '.$table.' (';
         foreach ($champs as $val) :
            if($val == 'id')
               $sql.=$val;
            else
               $sql.=', '.$val;
         endforeach;
         $sql.= ') VALUES (';
         foreach ($champs as $val) :
            if($val == 'id')
               $sql.='NULL';
         endforeach;
         foreach ($_POST as $val) :
               $sql.=", '".$val."'";
         endforeach;         
         $sql.=');';
         return $sql;
	}