Pb pour creer fichier xml a partir de formulaire

Messages postés
5
Date d'inscription
lundi 17 octobre 2005
Statut
Membre
Dernière intervention
11 juillet 2012
- - Dernière réponse : 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
Afficher la suite 

6 réponses

Messages postés
194
Date d'inscription
dimanche 18 mars 2007
Statut
Membre
Dernière intervention
11 juillet 2015
0
Merci
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
Commenter la réponse de devil_may_cry
Messages postés
5
Date d'inscription
lundi 17 octobre 2005
Statut
Membre
Dernière intervention
11 juillet 2012
0
Merci
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
Commenter la réponse de olox91
Messages postés
5
Date d'inscription
lundi 17 octobre 2005
Statut
Membre
Dernière intervention
11 juillet 2012
0
Merci
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
Commenter la réponse de olox91
Messages postés
194
Date d'inscription
dimanche 18 mars 2007
Statut
Membre
Dernière intervention
11 juillet 2015
0
Merci
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
Commenter la réponse de devil_may_cry
Messages postés
5
Date d'inscription
lundi 17 octobre 2005
Statut
Membre
Dernière intervention
11 juillet 2012
0
Merci
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
Commenter la réponse de olox91
Messages postés
194
Date d'inscription
dimanche 18 mars 2007
Statut
Membre
Dernière intervention
11 juillet 2015
0
Merci
Content de t'avoir aider

A bientôt
Commenter la réponse de devil_may_cry