Bonjour,
je dois générer un flux en XML à partir d'un formulaire en php. voici comment je m'y prends:
code du formulaire:

<div class="panel-body">
        <div class="row">
            <div class="col-md-3"><b>Type :</b></div> <div class="col-md-9"><?= $infoAnnonce"type"] ?></div><hr>
        </div>
        <div class="row">
            <div class="col-md-3"><b>Prix :</b></div> <div class="col-md-9"><?= $infoAnnonce"prix_public"] ?> €</div><hr>
        </div>
        <div class="row">
            <div class="col-md-3"><b>Descriptifs :</b></div> <div class="col-md-9"><?= $infoAnnonce"descriptifs"] ?></div><hr>
        </div>
        <div class="row">
            <div class="col-md-3"><b>Marque :</b></div> <div class="col-md-9"><?= $infoAnnonce"marque"] ?></div><hr>
        </div>
        <div class="row">
            <div class="col-md-3"><b>Modèle :</b></div> <div class="col-md-9"><?= $infoAnnonce"modele"] ?></div><hr>
        </div>
        <div class="row">
            <div class="col-md-3"><b>Visibilité :</b></div> <div class="col-md-9"><?= $infoAnnonce"visibilite"] ?></div><hr>
        </div>
        <div class="row">
            <div class="col-md-3"><b>Vendu avec la place au port :</b></div> <div class="col-md-9"><?= ($infoAnnonce"venduavecplaceport"] == 1)? "Oui": "Non" ?></div>
        </div>
    </div>

code php pour générer le fichier xml:

!-- enregistrement en xml -->
<?php
//recupération des valeurs des champs et transfers de leurs valeurs dans les variables
//Info annonce
    $type= htmlspecialchars($infoAnnonce"type"]);
    $prix_public= htmlspecialchars($infoAnnonce"prix_public"]);
    $descriptif= htmlspecialchars($infoAnnonce"descriptifs"]);
    $marque= htmlspecialchars($infoAnnonce"marque"]);
    $modele= htmlspecialchars($infoAnnonce"modele"]);
    $visibilite= htmlspecialchars($infoAnnonce"visibilite"]);
    $venduavecplaceport= htmlspecialchars(($infoAnnonce"venduavecplaceport"] == 1)? "Oui": "Non" );

//verifie si le fichier export_from_html_boat_youboat.xml existe ou non
    //si il n'existe pas
    if(!file_exists("export_from_html_boat_youboat.xml"))
    {
        //on va ecrire dans la variable $chxml
        //l'element racine se nomme <annonces> et contient les elements suivant image, info_annonce, info_bateau ...
        $chxml="<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n<annonces>\n <annonce>\n 
        <image>\n <media type=\"image/jpeg\">http://localhost/GitHub/medinboats/Admin/$image</media>\n </image>\n 
        <info_annonce>\n <type><![CDATA[$type]]></type>\n <prix_public><![CDATA[$prix_public]]></prix_public>\n <descriptif><![CDATA[$descriptif]]></descriptif>\n <marque><![CDATA[$marque]]></marque>\n <modele><![CDATA[$modele]]></modele>\n <visibilite><![CDATA[$visibilite]]></visibilite>\n <venduavecplaceport><![CDATA[$venduavecplaceport]]></venduavecplaceport>\n </info_annonce>\n</annonce>\n </annonces>";
}
    else
    //si le fichier bateauxmedia.xml existe
    {
        //son contenu est recupéré et stocké dans la variable $xml
        $xml= simplexml_load_file("export_from_html_boat_youboat.xml");
        //puis on transfere $xml dans la variable de chaine de caractéres $chxml en appelant la méthode asXML()
        $chxml = $xml -> asXML();
        //comme nous allons ajouter une élement au fichier xml il faut supprimer la balise de fin </annonces> avec la fonction str_replace(search, replace, subject)
        //cela va donc selectionner la balise et la remplacer par une chaine de caractére vide dans la variable $chxml
        $chxml = str_replace("</annonces>", "", $chxml); 
        //ici on concaténe les nouvelles données avec les anciennes et on ajoute la balise </annonces> à la fin pour que le document XML soit bien formé
        $chxml.= "<annonce>\n 
        <image>\n <media type=\"image/jpeg\">http://localhost/GitHub/medinboats/Admin/$image</media>\n </image>\n 
        <info_annonce>\n <type><![CDATA[$type]]></type>\n <prix_public><![CDATA[$prix_public]]></prix_public>\n <descriptif><![CDATA[$descriptif]]></descriptif>\n <marque><![CDATA[$marque]]></marque>\n <modele><![CDATA[$modele]]></modele>\n <visibilite><![CDATA[$visibilite]]></visibilite>\n <venduavecplaceport><![CDATA[$venduavecplaceport]]></venduavecplaceport>\n </info_annonce>\n</annonce>\n </annonces>";
//il ne reste plus que a enregistrer le contenu de la chaine $chxml dans le fichier export_from_html_boat_youboat.xml à l'aide de la fonction file_put_contents()
    $verif=file_put_contents("export_from_html_boat_youboat.xml", $chxml);

Voila tout ceci fonctionne mais je bloque car maintenant mon formulaire comporte une liste d'objets que l'on peut cocher ou non. Et j'aimerais que dans mon xml cela me m'indique si l'objet est coché alors 1 si non coché alors 0.

voici le code du formulaire:

<?php if($electronique != null) { ?>
    <div class="panel panel-primary">
        <div class="panel-heading">
            <h4>Equipements electroniques</h4>
        </div>
        <div class="panel-body">
            <ul class="list-group">
                <?php foreach($electronique"electroniques"] as $unEquipement) { ?>
                    <li class="list-group-item"><?= $unEquipement ?></li>
                <?php } ?>
            </ul>
        </div>
    </div>
<?php } ?>

cela va afficher les éléments qui auront étaient sélectionnés, je pensais récupérer l'information comme ceci

$electroniques= htmlspecialchars(($electronique"electroniques"] == 1)? "1": "0" );

mais cela me renvoi que des 0 donc je dois me tromper quelque part....

si vous auriez une idée ce serait super ^^

Merci

6 réponses


Alors, déjà electronique je le vois nul pars, il sort d'où ?

Ensuite, utilise plus la syntaxe alternative dans tes templates

pour faire tes htmlspecialchars en plus propre:

foreach($infoAnnonce as $k => $v){
    $infoAnnonce$k] = htmlspecialchars($v);
}
Noblus
Auteur

bonjour Glaived,
tu as raison pour electronique, je n'avais pas donné la bonne partie du code (ce qui est maintenant rectifié).

et merci du conseil pour la qualité de mon code, n'étant pas très bon en xml je me suis basé sur un exercice d'un bouquin ou le code été écris de cette manière.

mon principal problème ici c'est que je ne sais pas comment récupérer un tableau en xml donc $electronique est exclue.

et voila le xml que j'aimerais générer :

-<electronique>
<item name="ANTENNE">0</item>
<item name="CENTRALE DE NAVIGATION">0</item>
<item name="COMPAS">1</item>
<item name="DETECTEUR RADAR">0</item>
<item name="FLAPS">0</item>
<item name="GIROUETTE - ANEMOMETRE">1</item>
<item name="GPS">1</item>
<item name="HAUT-PARLEURS DE COCKPIT">0</item>
<item name="LECTEUR CD">0</item>
<item name="LECTEUR DVD">0</item>
<item name="LOCH">0</item>
<item name="LOGICIEL DE NAVIGATION">0</item>
<item name="ORDINATEUR">0</item>
<item name="PILOTE AUTOMATIQUE">1</item>
<item name="RADAR">1</item>
<item name="REPETITEUR(S)">0</item>
<item name="SONDEUR">1</item>
<item name="SONDEUR DE PECHE">0</item>
<item name="TRACEUR">0</item>
<item name="TV">0</item>
<item name="VHF">1</item>
</electronique>

je vois toujours pas ou est $electronique ^^'

Noblus
Auteur

il est dans le post de base :) je l'ai édité.
il s'agit d'une page récapitulative de l'annonce avant de la valider.

on retrouve également $electronique à l'étape d'avant sur la page précédente je te donne le code

$electronique = !empty($_SESSION'datasForm']"electronique"]"electroniques"]) ? $_SESSION'datasForm']"electronique"] : null ;

Sur une page précédente ? donc $electronique n'existe pas dans l’exécution où il y a ton problème ?

Salut,

Déjà à quoi équivaut ta variable $unEquipement ? Un input type checkbox je suppose. Mais as tu mis un attribut de type 'value' à cette checkboxe ?

Ensuite tu vérifie si ta checkbox a été cochée ou pas en testant si celle-ci vaut 1, sinon tu lui attribut la valeur 0. As tu testé avec un dump ou on print la valeur que te retourne ton input de type checkbox correspondant à $unEquipement ? Si cela se trouve ton formulaire ne te renvoyant jamais "1" mais par exemple "on" quand celui-ci est coché, ta vérification ne sert plus à rien. Bref, fais quelques tests et retourne nous tes résultats ;).