IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

PHP to XML avec DOMDocument [PHP 5.6]


Sujet :

Langage PHP

  1. #1
    Membre à l'essai Avatar de slozano
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Mars 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Mars 2014
    Messages : 12
    Points : 10
    Points
    10
    Par défaut PHP to XML avec DOMDocument
    Bonjour,
    c'est la première fois que je poste sur developpez.net.
    Je rencontre un problème qui n'en est peut être pas un mais je ne trouve pas de réponse.

    Description :
    Je génére un fichier XML à l'aide de la librairie DOMDocument de PHP, voici le code minimal, ce n'est pas le code réel, je l'ai simplifié au maximum pour poser ma question.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <?php
    $date = date("Y-m-M");
    $filename = testCreaBiens-'.$date.'.xml';
       $xml = new DOMDocument('1.0', 'utf-8');
       $tag = $xml->createElement('items','contenu de la balise');
       $xml->appendChild($tag);
       echo $xml->saveXML();
       $xml->save($filename);
     ?>
    Pas de problème, le fichier XML est correctement généré.
    Simplement lorsque je télécharge et que j'ouvre le dit fichier XML j'ai sur la dernière ligne le poids du fichier. Je mets en pièce jointe ce fichier mais voici son contenu.
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <?xml version="1.0" encoding="utf-8"?>
    <items>contenu de la balise</items>
    75
    Le fichier pèse 75 octets, j'ai un 75 sur la dernière ligne.

    Questions
    1. Du coup mon fichier XML est-il valide ?
    2. Ai-je loupé quelque chose dans la documentation ?
    3. Cela risque-t-il de poser problème au traitement ultérieur du fichier par un parseur XML?



    En espérant avoir été suffisamment clair et concis.
    Merci d'avance pour votre aide
    Fichiers attachés Fichiers attachés

  2. #2
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Réponses:
    1. Non.
    2. Je ne sais pas.
    3. Oui.




    Montre ton code réel, c'est sûrement là que le problème se cache.
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  3. #3
    Membre à l'essai Avatar de slozano
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Mars 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Mars 2014
    Messages : 12
    Points : 10
    Points
    10
    Par défaut
    Merci pour ce retour.
    En fait, mon code fonctionne, il fait bien ce que je veux mais j'ai cette information du nombre d'octets écrite en fin de fichier à chaque fois.
    Dans la documentation de la methode , il est indiqué qu'elle retourne le nombre d'octets écrit ou FALSE si une erreur survient, ce que je veux c'est uniquement sauver l'arbre et pas son poids.

    En fait, le code que j'ai mis est la partie de code qui me pose question et qui reproduit le problème.

    Mais voici mon code en cours de développement, qui fonctionne et me récupère les valeurs des champs d'un formulaire pour les réécrire dans un fichier XML.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
     
    <?php
    // ===============================================================================
    // GESTION DES BIENS 
    // ===============================================================================
     
     
    // fonction pour créer le fichier XML des nouveaux biens
    function addBiens() {
        // date annéé et mois en chiffres puis mois en 3lettres afin d'avoir un fichier horodaté
        $date = date("Y-m-M");
        // date et heure courantes pour l'affichage
        $dateTimeEnClair = date("d/m/Y à H:i:s");
        // heure courante
        $time = date("H-i-s");
        $filename ='testCreaBiens-'.$date.'.xml';
     
     
        //fonction pour tester si un post est rempli et non vide et renvoit la variable avec un htmlspecialschars
        function postRempliNonVide($varPost) {
            if (isset($varPost) && !empty($varPost)) {
                return htmlspecialchars($varPost,ENT_QUOTES,'UTF-8');
            };
        };
        // on récupère les données du formulaire
        $suiviPar=postRempliNonVide($_POST["suiviPar"]);
        $ref=$_POST["reference"];
        $numMandat=$_POST["numMandat"];
        $statut=$_POST["statut"];
        if(isset($_POST["onoffswitch"])) { 
            $pubWeb="oui"; 
        }else{
            $pubWeb="non";
        };
        $couleur=$_POST["couleur"];
        $typeBien=$_POST["typeBien"];
        $destination=$_POST["destination"];
     
        if ($destination=="vente"){
     
            $nbPieces=$_POST["choixNbPiecesV"];
            $nbChambres=$_POST["choixNbChambresV"];
            $surface=$_POST["choixSurfaceV"];
            $surfaceTerrain=$_POST["choixSurfaceTerrainV"];
            $etage=$_POST["choixEtageV"];
            $etageTot=$_POST["choixEtageTotV"];
            $prixFraisVendeurCompris=$_POST["choixPrixFraisVendeurComprisV"];
            $fraisVendeur=$_POST["choixFraisVendeurV"];
            $pourcentFraisVendeur=$_POST["pourcentFraisVendeurV"];
            $fraisAcheteur=$_POST["choixFraisAcheteurV"];
            $pourcentFraisAcheteur=$_POST["pourcentFraisAcheteurV"];
            $prixVente=$_POST["choixPrixVenteV"];
            $fraisNotaire=$_POST["choixFraisNotaireV"];
            $resteVendeur=$_POST["choixResteVendeurV"];
            $tousFraisComprisV=$_POST["choixtousFraisComprisV"];
     
     
        } elseif ($destination=="location"){
     
            $nbPieces=$_POST["choixNbPiecesL"];
            $nbChambres=$_POST["choixNbChambresL"];
            $surface=$_POST["choixSurfaceL"];
            $surfaceTerrain=$_POST["choixSurfaceTerrainL"];
            $etage=$_POST["choixEtageL"];
            $etageTot=$_POST["choixEtageTotL"];
            $typeBail=$_POST["choixTypeBailL"];
            $loyerHorsCharges=$_POST["choixLoyerHorsChargesL"];
            $provision=$_POST["choixProvisionL"];
            $honorairesLocataires=$_POST["choixHonorairesLocatairesL"];
            $pourcentHonorairesLocataires=$_POST["pourcentHonorairesLocatairesL"];
            $depotGarantie=$_POST("choixDepotGarantieL");
            $negoEntremiseLocataire=$_POST["choixNegoEntremiseLocataireL"];
            $visiteDossierActeLocataire=$_POST["choixVisiteDossierActeLocataireL"];
            $etatLieuxLocataire=$_POST["choixEtatLieuxLocataireL"];
            $totalHonoLocataire=$_POST["choixTotalHonoLocataireL"];
            $negoEntremiseBailleur=$_POST["choixNegoEntremiseBailleurL"];
            $visiteDossierActeBailleur=$_POST["choixVisiteDossierActeBailleurL"];
            $etatLieuxBailleur=$_POST["choixEtatLieuxBailleurL"];
            $totalHonoBailleur=$_POST["choixTotalHonoBailleurL"];
            $totalHonoHorsTaxes=$_POST["choixTotalHonoHorsTaxesL"];
            $totalHonoToutesTaxesComprises=$_POST["choixTotalHonoToutesTaxesComprisesL"];
     
        };
     
        // si le fichier de biens du mois n'existe pas on le crée
        if (!file_exists($filename))
        {
     
            $doc = new DOMDocument('1.0', 'utf-8');
            $doc->preserveWhiteSpace = false;
            $doc->formatOutput = true;
     
            // on crée l'élément racine
            $biens = $doc->createElement('biens');
     
            // on crée les noeuds avec les post du formulaire
            include('noeudsBien.php');
     
            // on affecte le nouveau noeud bien à la racine
            $biens->appendChild($newBien);
     
            // on affecte le tout au document
            $doc->appendChild($biens);
     
            // on sauve dans le fichier
            $doc->save($filename);
        }else{
          // sinon on ajoute les éléments ici
          $doc = new DOMDocument('1.0', 'utf-8');
          $doc->preserveWhiteSpace = false;
          $doc->formatOutput = true;
          // on charge le fichier existant
          $doc->load($filename);
     
          // on ajoute les éléments ici
          // on crée les noeuds avec les post du formulaire
          include('noeudsBien.php');
     
          // on affecte le nouveau noeud bien à la racine
          $doc->documentElement->appendChild($newBien);
     
          // on sauve dans le fichier
          $doc->save($filename);
     
        };
     
    };
     
    // on appelle la fonction
    addBiens();
     // on redirige sur la page désirée 
     header('Location: '.$urlRacineSite.'/biensNouveaux.php'); 
    ?>
    et voici le fichier noeudsBien.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
     
    <?php
            // on crée un premier noeud bien
            $newBien = $doc->createElement('bien');
     
            // on crée les enfants du noeud bien
            $newSuivi = $doc->createElement('suivi',$suiviPar);
            $newRef = $doc->createElement('reference',$ref);
            $newNumMandat = $doc->createElement('mandat',$numMandat);
            $newStatut = $doc->createElement('statut',$statut);
            $newPubWeb = $doc->createElement('pubWeb',$pubWeb);
            $newCouleur = $doc->createElement('couleur',$couleur);
            $newTypeBien = $doc->createElement('typeDeBien',$typeBien);
            $newDestination = $doc->createElement('destination',$destination);
     
            if ($destination=="vente"){
     
                    if ($nbPieces!="") {$new_nbPieces = $doc->createElement('nombreDePieces',$nbPieces);};
                    if ($nbChambres!="") {$new_nbChambres = $doc->createElement('nombreDeChambres',$nbChambres);};
     
                    $new_surface = $doc->createElement('surface',$surface);
                    $new_surfaceTerrain = $doc->createElement('surfaceTerrain',$surfaceTerrain);
                    $new_etage = $doc->createElement('etage',$etage);
                    $new_etageTot = $doc->createElement('nombreEtageTotal',$etageTot);
                    $new_prixFraisVendeurCompris = $doc->createElement('PrixFraisVendeurCompris',$prixFraisVendeurCompris);
                    $new_fraisVendeur = $doc->createElement('FraisVendeur',$fraisVendeur);
                    $new_pourcentFraisVendeur = $doc->createElement('pourcentFraisVendeur',$pourcentFraisVendeur);
                    $new_fraisAcheteur = $doc->createElement('FraisAcheteur',$fraisAcheteur);
                    $new_pourcentFraisAcheteur = $doc->createElement('pourcentFraisAcheteur',$pourcentFraisAcheteur);
                    $new_prixVente = $doc->createElement('PrixVente',$prixVente);
                    $new_fraisNotaire = $doc->createElement('FraisNotaire',$fraisNotaire);
                    $new_resteVendeur = $doc->createElement('ResteVendeur',$resteVendeur);
                    $new_tousFraisCompris = $doc->createElement('tousFraisCompris',$tousFraisCompris);
     
            } elseif ($destination=="location") {
     
            };
     
            // on affecte ses enfant au premier noeud bien
            $newBien->appendChild($newSuivi);
            $newBien->appendChild($newRef);
            $newBien->appendChild($newNumMandat);
            $newBien->appendChild($newStatut);
            $newBien->appendChild($newPubWeb);
            $newBien->appendChild($newCouleur);
            $newBien->appendChild($newTypeBien);
            $newBien->appendChild($newDestination);
     
            if ($destination=="vente"){
     
                    if ($nbPieces!="") {$newBien->appendChild($new_nbPieces);};
                    if ($nbChambres!="") {$newBien->appendChild($new_nbChambres);};
     
                    $newBien->appendChild($new_surface);
                    $newBien->appendChild($new_surfaceTerrain);
                    $newBien->appendChild($new_etage);
                    $newBien->appendChild($new_etageTot);
                    $newBien->appendChild($new_prixFraisVendeurCompris);
                    $newBien->appendChild($new_fraisVendeur);
                    $newBien->appendChild($new_pourcentFraisVendeur);
                    $newBien->appendChild($new_fraisAcheteur);
                    $newBien->appendChild($new_pourcentFraisAcheteur);
                    $newBien->appendChild($new_prixVente);
                    $newBien->appendChild($new_fraisNotaire);
                    $newBien->appendChild($new_resteVendeur);
                    $newBien->appendChild($new_tousFraisCompris);
     
     
     
            } elseif ($destination=="location") {
     
            };
     
    ?>

  4. #4
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Bah je ne vois rien dans le script que tu montres qui puisse ajouter je ne sais quoi après le xml, en tout cas, ce n'est pas la méthode DOMDocument::save() qui, certes, renvoie le nombre d'octets écrits dans le fichier cible, mais en aucun cas ne l'ajoute au fichier.

    Au passage, je trouve ton code bien long (avec une mention spéciale pour les 2 include du même contenu), il y a beaucoup de choses qui se répètent, tu dois pouvoir factoriser tout ça tout en ajoutant un contrôle drastique des données POST.
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  5. #5
    Membre à l'essai Avatar de slozano
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Mars 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Mars 2014
    Messages : 12
    Points : 10
    Points
    10
    Par défaut
    Merci pour ton retour.

    Oui c'est bien ce qui me pose question.
    Je ne comprends pas pourquoi le nombre d'octets figure en fin de fichier lorsque j'appelle DOMDocument::save().

    D'ailleurs si je fais un echo avec la méthode DOMDocumment::saveXML() je n'ai pas le souci à l'affichage dans le navigateur, mais j'ai besoin d'enregistrer le fichier.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <?php
    $date = date("Y-m-M");
    $filename = testCreaBiens-'.$date.'.xml';
       $xml = new DOMDocument('1.0', 'utf-8');
       $tag = $xml->createElement('items','contenu de la balise');
       $xml->appendChild($tag);
       echo $xml->saveXML();
     ?>
    La factorisation est prévue ainsi que les contrôles des données POST.
    Mon formulaire est progressif, au début, il y a des données communes puis cela dépendra du type de bien et de sa destination, vente ou location.

    Lorsque je me suis rendu compte que le nombre d'octets était écrit en même temps que l'arbre XML, j'ai fait quelques recherches et j'ai testé avec un fichier minimal, celui de mon premier message, qui produit le même effet.

    Je voudrais résoudre ce problème avant de poursuivre car le fichier XML doit être valide or il ne l'est clairement pas avec cette donnée orpheline et sans balise du nombre d'octets.

  6. #6
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Et dans quel cadre constates-tu ce nombre, ç-à-d avec quoi ouvres-tu ton fichier xml?
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  7. #7
    Membre à l'essai Avatar de slozano
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Mars 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Mars 2014
    Messages : 12
    Points : 10
    Points
    10
    Par défaut
    Un éditeur de texte tout bête : xed sous linux.
    Après son téléchargement.

  8. #8
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Et si tu tapes directement l'url de ton fichier xml dans la barre d'adresse de ton navigateur tu obtiens quoi? (S'il n'est pas accessible, change temporairement le dossier d'enregistrement juste pour le test).
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  9. #9
    Membre à l'essai Avatar de slozano
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Mars 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Mars 2014
    Messages : 12
    Points : 10
    Points
    10
    Par défaut
    Argh!!! tu as mis le doigt dessus.

    J'avais déjà testé l'affichage dans un navigateur et cela ne reproduisait pas le problème.

    Après ta question, je viens d'essayer d'ouvrir le fichier sans passer par mon script de téléchargement car effectivement mes fichiers seront stockés sous la racine du site car ils contiennent des données plus que privées.
    Bilan : je ne reproduis pas le problème, le fichier ne contient pas la ligne avec le nombre d'octets.

    J'en déduis que c'est mon script de téléchargement qui écrit cette ligne. Le voici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    <?php
        //demarrage de la session
        session_start();
        // si l'utilisateur n'est pas connecté, il ne peut pas télécharger
        // il est renvoyé à la page de connexion
        if (!isset($_SESSION['login'])) {
          header ('Location:'.$urlRacineSite.'/index.php');
          exit();
        };
        // les fichiers sensibles sont stockés sous la racine
        // accessibles à php mais pas à un navigateur
        // on recupère le nom du fichier à charger via une variable $_GET
        $file = $GLOBALS['repSousRacinewww']."/secureXML/".$_GET['file'];
     
        // on force le téléchargement quel que soit le type de fichier
        header('Content-Type: application/octet-stream');
        // Encodage de transfert
        header('Content-Transfer-Encoding: Binary');
        // on précise au navigateur le nom du fichier à attacher
        header('Content-disposition: attachement; filename="'.basename($file).'"');
        // on renvoit le nom et le chemin du fichier
        echo readfile($file);
    ?>
    Du coup je pense que mon problème vient, soit du header de l'encodage de transfert, soit de mon readfile().

    je vais continuer à creuser, merci.

  10. #10
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Oui, c'est dû à la fonction readfile() qui renvoie le nombre d'octets lus. Donc il faut retirer le echo devant car readfile() renvoie tout seul comme un grand le contenu du fichier dans le buffer de sortie.
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  11. #11
    Membre à l'essai Avatar de slozano
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Mars 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Mars 2014
    Messages : 12
    Points : 10
    Points
    10
    Par défaut
    Yep, c'était bien ça, le echo devant le readfile() de mon script de téléchargement.

    Un grand merci pour ton aide, je tournais en rond sans voir que le problème venait d'ailleurs.

  12. #12
    Membre à l'essai Avatar de slozano
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Mars 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Mars 2014
    Messages : 12
    Points : 10
    Points
    10
    Par défaut
    @CosmoKnacki :

    Une question de plus, lorsque tu dis un contrôle drastique des données POST tu veux bien dire :
    • le champ est non vide --> c'est ma fonction postRempliNonVide()
    • le champ est rempli --> c'est ma fonction postRempliNonVide()
    • la valeur du champ est du type attendu --> je le fais directement dans mon formulaire avec un data-inputmask
    • la valeur du champ est sans code html --> c'est le htmlspecialchars($varPost,ENT_QUOTES,'UTF-8') de ma fonction postRempliNonVide()


    j'oublie quelque chose?
    merci pour ton retour

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    function postRempliNonVide($varPost) {
            if (isset($varPost) && !empty($varPost)) {
                return htmlspecialchars($varPost,ENT_QUOTES,'UTF-8');
            };
        };

  13. #13
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    la valeur du champ est du type attendu --> je le fais directement dans mon formulaire avec un data-inputmask
    Alors là non. En fait, il faut voir la vérification des données de formulaire coté client (avec les attributs HTML5, Javascript, jQuery...) comme un simple "confort" pour l'utilisateur. Pour être plus clair, ça permet de lui fournir des messages d'erreurs personnalisés pour l'aider à remplir correctement le formulaire sans pour autant envoyer quoi que ce soit coté serveur (donc au script PHP). Les vérifications coté client ne sont pas pour autant un quelconque gage de sécurité (on peut très bien désactiver Javascript, ou même créer un programme qui envoie des données POST au serveur).
    Donc en fait la "vraie" vérification des données de formulaire doit se faire coté serveur. Pour cela, PHP propose des filtres de validation personnalisables (avec un jeu d'options): voir filter_var().
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  14. #14
    Membre à l'essai Avatar de slozano
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Mars 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Mars 2014
    Messages : 12
    Points : 10
    Points
    10
    Par défaut
    Merci pour ton retour et pour la fonction filter_var().

    ça me fait pas mal de vérifications vu le formulaire en route.
    J'avais espéré gagner du temps avec un data-input mais en effet "Never trust user input".

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [DOM] php et xml avec domdocument
    Par zerros dans le forum Bibliothèques et frameworks
    Réponses: 5
    Dernier message: 17/04/2012, 14h13
  2. Lecture de fichier XML avec DOMDocument
    Par DeeVoiD dans le forum Langage
    Réponses: 5
    Dernier message: 31/12/2009, 11h40
  3. [DOM] Validation xml avec PHP
    Par thefaycal dans le forum Bibliothèques et frameworks
    Réponses: 6
    Dernier message: 26/01/2006, 21h15
  4. [XML] [EXPAT] Parser XML avec PHP
    Par glsn dans le forum Bibliothèques et frameworks
    Réponses: 8
    Dernier message: 20/12/2005, 12h29
  5. [XSLT] Utilisation de XML avec PHP dans le cadre d'un site
    Par nicolas66 dans le forum Bibliothèques et frameworks
    Réponses: 15
    Dernier message: 06/11/2005, 22h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo