Pb pour creer fichier xml a partir de formulaire

olox91 Messages postés 4 Date d'inscription lundi 17 octobre 2005 Statut Membre Dernière intervention 11 juillet 2012 - 6 juil. 2012 à 11:37
devil_may_cry Messages postés 194 Date d'inscription dimanche 18 mars 2007 Statut Membre Dernière intervention 11 juillet 2015 - 10 juil. 2012 à 01:19
Bonjour,

Je vais essayer d'être clair.
Je m'excuse par avance mais je suis débutant.
J'ai crée un formulaire qui demande entre autre des renseignements sur des personnes (nom, prenom, fonction, n°tel, n°portable).
Il existe plusieurs groupes de personnes.
ce formulaire demande bien d'autres renseignements mais l'important c'est de comprendre le principe.
j'ai crée un fichier traitement.php qui a pour rôle de réceptionner par methode post les variables du formulaire.
Puis il écrit tous ces paramètres dans un fichier xml qui par la suite sera utilise par une autre page qui réalisera la mise en page.
Donc pour écrire en xml, j'utilise la méthode DOM.
Pour éviter d’écrire pour chaque contact les mêmes lignes j'aimerais créer une fonction. Voici ce que j'ai écrit:

les variables:

$contact_bops_nom1 = $_POST["contact_bops_nom_1"];
$contact_bops_prenom1 = $_POST["contact_bops_prenom_1"];
$contact_bops_tel1 = $_POST["contact_bops_tel_1"];
$contact_bops_port1 = $_POST["contact_bops_port_1"];
$contact_bops_nom2 = $_POST["contact_bops_nom_2"];
$contact_bops_prenom2 = $_POST["contact_bops_prenom_2"];
$contact_bops_tel2 = $_POST["contact_bops_tel_2"];
$contact_bops_port2 = $_POST["contact_bops_port_2"];

la fonction:
function contact ($onglet, $entree, $nb) {

$contact = $dom -> createElement("contact");
return $contact;
$contact = $dom -> appendChild($contact);
return $contact;

${"$".$entree} = $dom -> createElement($entree);
return ${"$".$entree};
${"$".$entree} = $contact -> appendChild(${"$".$entree});
return ${"$".$entree};

for ($i=1; $i<=$nb; $i++) {
$var = $entree;
$var2 = $onglet;
${"parent".$i} = $dom -> createElement($var2."_".$i);
return ${"parent".$i};
${"parent".$i} = ${"$".$entree} -> appendChild(${"parent".$i});
return ${"parent".$i};
${"filsa".$i} = $dom -> createElement($var."_grd_".$i, ${$var."_grd".$i});
return ${"filsa".$i};
${"filsa".$i} = ${"parent".$i} -> appendChild(${"filsa".$i});
return ${"filsa".$i};
${"filsb".$i} = $dom -> createElement($var."_nom_".$i, ${$var."_nom".$i});
return ${"filsb".$i};
${"filsb".$i} = ${"parent".$i} -> appendChild(${"filsb".$i});
return ${"filsb".$i};
${"filsc".$i} = $dom -> createElement($var."_prenom_".$i, ${$var."_prenom".$i});
return ${"filsc".$i};
${"filsc".$i} = ${"parent".$i} -> appendChild(${"filsc".$i});
return ${"filsc".$i};
${"filsd".$i} = $dom -> createElement($var."_tel_".$i, ${$var."_tel".$i});
return ${"filsd".$i};
${"filsd".$i} = ${"parent".$i} -> appendChild(${"filsd".$i});
return ${"filsd".$i};
${"filse".$i} = $dom -> createElement($var."_port_".$i, ${$var."_port".$i});
return ${"filse".$i};
${"filse".$i} = ${"parent".$i} -> appendChild(${"filse".$i});
return ${"filse".$i};
}

}

edition du fichier xml:
$dom = new DOMDocument('1.0', 'UTF-8');

voici l'appel de la fonction:
contact ("bops", "contact_bops", "5");

sauvegarde dans fichier xml:
$dom -> save ($operation.'.xml');

malheureusement le fichier ne se crée pas.
Je tiens à préciser que lorsque j’écris tout sans la fonction, le fichier se crée bien avec les bonnes valeurs donc mon for() fonctionne.
Je vous en remercie par avance.


OLIVIER

6 réponses

devil_may_cry Messages postés 194 Date d'inscription dimanche 18 mars 2007 Statut Membre Dernière intervention 11 juillet 2015
7 juil. 2012 à 03:54
Slt
/* $varray correspond a une variable $_POST épuré ne contenant que les donnes du contact ce qui veut dire qu'il faut la créer manuellement à partir de la variable $_POST que tu recevra de ton formulaire
function xmlContact($varray,$filename) {

   $dom = new DomDocument();
   
   // creation du root
   $contact = $dom->createElement("contact");
   // On recupere tous les cles du tableau
   $nodes = array_keys($varray);
   print_r($nodes);
   // on parcours les cles
   for($i=0; $i < sizeof($nodes);$i++) {
        // On creer les tags a partir des cles du tableau ex:nom,prenom
        $node = $dom->createElement($nodes[$i]);
        // Et on creer leur noeud textuel a partir des valeurs correspondante
        $nodeText= $dom->createTextNode($varray[$nodes[$i]]);
        $node->appendChild($nodeText);
        $contact->appendChild($node);
   }
   $dom->appendChild($contact);
   $dom->save($filename.'.xml');
   
}
// exemple d utilisation
xmlContact($varray,"nouveaufichier");


CORDIALEMENT j espere que cq t'aidera
0
olox91 Messages postés 4 Date d'inscription lundi 17 octobre 2005 Statut Membre Dernière intervention 11 juillet 2012
8 juil. 2012 à 12:51
et bien tout d'abord merci beaucoup pour ta réponse.
je vais essayer ça et je te tiens au courant.
passe un bon dimanche.
et encore merci.

OLIVIER
0
olox91 Messages postés 4 Date d'inscription lundi 17 octobre 2005 Statut Membre Dernière intervention 11 juillet 2012
8 juil. 2012 à 13:31
bon j'avoue de ne pas comprendre la manière d'envoyer mes variables post.
car j'ai par exemple:

$operation = $_POST["operation"];
$contact_bops_grd1 = $_POST["contact_bops_grd_1"];
$contact_bops_nom1 = $_POST["contact_bops_nom_1"];
$contact_bops_prenom1 = $_POST["contact_bops_prenom_1"];
$contact_bops_tel1 = $_POST["contact_bops_tel_1"];
$contact_bops_port1 = $_POST["contact_bops_port_1"];
$contact_bops_grd2 = $_POST["contact_bops_grd_2"];
$contact_bops_nom2 = $_POST["contact_bops_nom_2"];
$contact_bops_prenom2 = $_POST["contact_bops_prenom_2"];
$contact_bops_tel2 = $_POST["contact_bops_tel_2"];
$contact_bops_port2 = $_POST["contact_bops_port_2"];
$contact_comsic_grd1 = $_POST["contact_comsic_grd_1"];
$contact_comsic_nom1 = $_POST["contact_comsic_nom_1"];
$contact_comsic_prenom1 = $_POST["contact_comsic_prenom_1"];
$contact_comsic_tel1 = $_POST["contact_comsic_tel_1"];
$contact_comsic_port1 = $_POST["contact_comsic_port_1"];
$contact_comsic_grd2 = $_POST["contact_comsic_grd_2"];
$contact_comsic_nom2 = $_POST["contact_comsic_nom_2"];
$contact_comsic_prenom2 = $_POST["contact_comsic_prenom_2"];
$contact_comsic_tel2 = $_POST["contact_comsic_tel_2"];
$contact_comsic_port2 = $_POST["contact_comsic_port_2"];
$contact_comtacsic_grd1 = $_POST["contact_comsic_grd_1"];
$contact_comtacsic_nom1 = $_POST["contact_comtacsic_nom_1"];
$contact_comtacsic_prenom1 = $_POST["contact_comtacsic_prenom_1"];
$contact_comtacsic_tel1 = $_POST["contact_comtacsic_tel_1"];
$contact_comtacsic_port1 = $_POST["contact_comtacsic_port_1"];
$contact_comtacsic_grd2 = $_POST["contact_comtacsic_grd_2"];
$contact_comtacsic_nom2 = $_POST["contact_comtacsic_nom_2"];
$contact_comtacsic_prenom2 = $_POST["contact_comtacsic_prenom_2"];
$contact_comtacsic_tel2 = $_POST["contact_comtacsic_tel_2"];
$contact_comtacsic_port2 = $_POST["contact_comtacsic_port_2"];
et un ainsi de suite pour les différents groupes.

donc tu écrit:
// exemple d utilisation
xmlContact($varray,"nouveaufichier");
et comme varray correspond aux différents variables post.
comment j'integre dans la fonction toutes ces variables.
Excuse-moi de mon manque de compréhension mais je suis débutant.
j'ai essayé ta fonction en mettant pour le groupe bops:

for ($x=1; $x<=8; $x++) {
xmlContact("contact_bops_grd".$x, $operation);
xmlContact("contact_bops_nom".$x, $operation);
xmlContact("contact_bops_prenom".$x, $operation);
xmlContact("contact_bops_tel".$x, $operation);
xmlContact("contact_bops_port".$x, $operation);
}

mais j'obtient dans le fichier $operation.xml:
<?xml version="1.0"?>
<contact/>

donc un petit problème.
mais je ne vois pas .


OLIVIER
0
devil_may_cry Messages postés 194 Date d'inscription dimanche 18 mars 2007 Statut Membre Dernière intervention 11 juillet 2015
8 juil. 2012 à 17:26
Slt,

Tu sais la variable superglobale $_POST contient aussi bien les tuples cle=>valeur de tes champs input type="text" mais aussi les types submit et éventuellement le type button,et reset donc puisque la fonction crée les nodes de ton document xml apartir des clé de ta variable $_POST. Voici donc un exemple concret

//
$postTmp = $_POST; 
/* Maintenant tu doit supprimer de cette variable les tuples des champs submit etc..
et tu doit le faire avec tous les autres champs optionnel qui se trouve dans le formulaire comme aussi le nom de l&#8217;opération car a ce que je vois il fait office du nom de fichier
*/
unset($postTmp['nom_de_ton_champs_submit']);
unset($postTmp['operation']);
// Et maintenant on appel la fonction
xmlContact($postTmp,$_POST["operation"]);


/* ton fichier excel devra avoir la structure suivante */
<?xml version="1.0"?>
<contact>
     <contact_bops_grd_1>
            valeur
     </contact_bops_grd_1>
     <contact_bops_prenom_1>
         valeur
     </contact_bops_prenom_1>
</contact>


J espère que j'ai pu t éclaircir
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
olox91 Messages postés 4 Date d'inscription lundi 17 octobre 2005 Statut Membre Dernière intervention 11 juillet 2012
9 juil. 2012 à 08:51
Je ne sais pas comment te remercier.
Je te dit: MERCI.
non seulement j'ai compris mais en plus ça marche.
T'imagine que tu viens en quelques lignes me remplacer mes centaines de lignes avec des boucles.
c'est la différence entre un débutant et un pro.
Merci encore.
si j'ai des difficultés je te demanderais un coup de pouce car malheureusement je n'ai pas terminé car il me faut générer maintenant toutes ces données dans une belle page web.
Mais avant je vais chercher par moi même car je dois apprendre et on ne doit pas profiter des autres sans donner.
je te souhaite une bonne journée.
et peu être à bientôt.


OLIVIER
0
devil_may_cry Messages postés 194 Date d'inscription dimanche 18 mars 2007 Statut Membre Dernière intervention 11 juillet 2015
10 juil. 2012 à 01:19
Content de t'avoir aider

A bientôt
0
Rejoignez-nous