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 :

manipulation d'une chaine de caractères sous format xml


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Avril 2007
    Messages
    209
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Avril 2007
    Messages : 209
    Points : 68
    Points
    68
    Par défaut manipulation d'une chaine de caractères sous format xml
    Bonjour,
    dans mon script php j'ai une chaine de caractères ,que je récupère en exécutant un programme externe,qui égale à "
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    "<?xml version='1.0' encoding='ISO-8859-1' ?>
    <Carte>
      <Nbr_cartes>2</Nbr_cartes>
      <Stat_Ip>4119</Stat_Ip>
      <Type_carte>DTA-115 (#2)</Type_carte>
      <Taux_flux_transport>-858993460 bps</Taux_flux_transport>
      <Type_Modulation>?</Type_Modulation>
      <Frequence>578.00 MHz</Frequence>
      <Niveau_signal>-27.5 dBm</Niveau_signal>
      <Adresse_IP>204.204.204.204:52428</Adresse_IP>
      <Protocole>UDP</Protocole>
    </Carte>"
    Je veux manipuler cette chaine afin d'enregistrer chaque valeur entre deux balises dans un champs d'une table de la base de données mySql

  2. #2
    Membre actif
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    152
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2003
    Messages : 152
    Points : 248
    Points
    248

  3. #3
    Membre du Club
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Avril 2007
    Messages
    209
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Avril 2007
    Messages : 209
    Points : 68
    Points
    68
    Par défaut
    C'est bon,j'ai réussi à le faire à l'aide du simpleXML,là il me reste à convertir la valeur de Fréquence (ex: 666MHz) en entier(666),mais en sait pas s'il y a 2 ou 3 chiffres ou s'il y a des chiffres après la virgule

  4. #4
    Membre du Club
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Avril 2007
    Messages
    209
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Avril 2007
    Messages : 209
    Points : 68
    Points
    68
    Par défaut
    C'est bon avec (int)$frequence;
    J'ai un autre problème,quand j'effectue l'insertion dans la base de données,il me retourne erreur voici le code
    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
      //...............
    	$cartes = new SimpleXMLElement($xmlstr);
    	$freq = (FLOAT)$cartes->Carte[0]->Frequence;
    	$txt = (String)$cartes->Carte[0]->asXML();
     
    	//echo $freq;
    	//echo $txt;
    	//echo"\n";
    	$req = "INSERT INTO dtinv_log_agent VALUES (DEFAULT,DEFAULT,NOW(),$freq,1,$txt)";
    	//$dataset = mysql_query($req);
    	$dataset = mysql_query($req) or die($req.mysql_error());
    	 if($dataset)
         	 {
    		echo("Données Insérées avec succès\n") ;
    	 }
    	 else
    	 {
    		echo("L'opération à échouée") ;
    	 }
    et voici l'erreur retournée:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    )You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '<Carte>
      <Nbr_cartes>2</Nbr_cartes>
      <Stat_Ip>4119</Stat_Ip>
      <Type_carte>DTA' at line 1
    le champs correspondant à $txt dans la table est de type text.
    Sachant que quand j'enlève "$txt" de la requête et je la remplace par "qlqChose" ça marche

  5. #5
    Membre actif
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    152
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2003
    Messages : 152
    Points : 248
    Points
    248
    Par défaut
    Y'a pas de quote entourant $txt dans ta requete, sont-ils dans $txt ?

  6. #6
    Membre du Club
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Avril 2007
    Messages
    209
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Avril 2007
    Messages : 209
    Points : 68
    Points
    68
    Par défaut
    voici la valeurde $txt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    "<Carte>
      <Nbr_cartes>2</Nbr_cartes>
      <Stat_Ip>4119</Stat_Ip>
      <Type_carte>DTA-115 (#2)</Type_carte>
      <Taux_flux_transport>-858993460 bps</Taux_flux_transport>
      <Type_Modulation>?</Type_Modulation>
      <Frequence>578.00 MHz</Frequence>
      <Niveau_signal>-27.5 dBm</Niveau_signal>
      <Adresse_IP>204.204.204.204:52428</Adresse_IP>
      <Protocole>UDP</Protocole>
    </Carte>"

  7. #7
    Membre actif
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    152
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2003
    Messages : 152
    Points : 248
    Points
    248
    Par défaut
    Avec ou sans les double quote dedans ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    $txt = "<Carte>
      <Nbr_cartes>2</Nbr_cartes>
      <Stat_Ip>4119</Stat_Ip>
      <Type_carte>DTA-115 (#2)</Type_carte>
      <Taux_flux_transport>-858993460 bps</Taux_flux_transport>
      <Type_Modulation>?</Type_Modulation>
      <Frequence>578.00 MHz</Frequence>
      <Niveau_signal>-27.5 dBm</Niveau_signal>
      <Adresse_IP>204.204.204.204:52428</Adresse_IP>
      <Protocole>UDP</Protocole>
    </Carte>";
    Ou bien ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    $txt = "\"<Carte>
      <Nbr_cartes>2</Nbr_cartes>
      <Stat_Ip>4119</Stat_Ip>
      <Type_carte>DTA-115 (#2)</Type_carte>
      <Taux_flux_transport>-858993460 bps</Taux_flux_transport>
      <Type_Modulation>?</Type_Modulation>
      <Frequence>578.00 MHz</Frequence>
      <Niveau_signal>-27.5 dBm</Niveau_signal>
      <Adresse_IP>204.204.204.204:52428</Adresse_IP>
      <Protocole>UDP</Protocole>
    </Carte>\"";

  8. #8
    Membre du Club
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Avril 2007
    Messages
    209
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Avril 2007
    Messages : 209
    Points : 68
    Points
    68
    Par défaut
    je pense qu'il y a un problème au niveau de ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $txt = (String)$cartes->Carte[0]->asXML();
    parce que je lui dis de convertir en string,un résultat qui déjà en sortie sous format xml,est ce que quelqu'un connait autre commande que asXML?

  9. #9
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    Bonjour,

    A mon avis c'est dans $txt que tu as des caractères qui ne passent pas pour la requête et non le asXml().

    Tu peux essayer en passant par un $txt que tu donnes en dur avec juste les balises <Carte>abeukdfuh</Carte>, tu auras déjà des pbs

    voir l'échappement de $txt pour les balise et aussi pour les caractères spéciaux

  10. #10
    Membre du Club
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Avril 2007
    Messages
    209
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Avril 2007
    Messages : 209
    Points : 68
    Points
    68
    Par défaut
    -->djibxav: c'est la première que j'ai
    -->Fench: oui je pense aussi,mais est ce qu'il y a une solution pour résoudre ça?

  11. #11
    Membre du Club
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Avril 2007
    Messages
    209
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Avril 2007
    Messages : 209
    Points : 68
    Points
    68
    Par défaut
    j'ai essayé avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $req = "INSERT INTO dtinv_log_agent VALUES (DEFAULT,DEFAULT,NOW(),$freq,1,'<Carte>abeukdfuh</Carte>')";
    ça marche !

  12. #12
    Membre actif
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    152
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2003
    Messages : 152
    Points : 248
    Points
    248
    Par défaut
    Citation Envoyé par mawkli Voir le message
    -->djibxav: c'est la première que j'ai
    On est donc d'accord que:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $req = "INSERT INTO dtinv_log_agent VALUES (DEFAULT,DEFAULT,NOW(),$freq,1,$txt)";
    Créera la requete:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    INSERT INTO dtinv_log_agent VALUES (DEFAULT,DEFAULT,NOW(),$freq,1,<Carte>
      <Nbr_cartes>2</Nbr_cartes>
      <Stat_Ip>4119</Stat_Ip>
      <Type_carte>DTA-115 (#2)</Type_carte>
      <Taux_flux_transport>-858993460 bps</Taux_flux_transport>
      <Type_Modulation>?</Type_Modulation>
      <Frequence>578.00 MHz</Frequence>
      <Niveau_signal>-27.5 dBm</Niveau_signal>
      <Adresse_IP>204.204.204.204:52428</Adresse_IP>
      <Protocole>UDP</Protocole>
    </Carte>)
    Alors qu'on devrait avoir:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    INSERT INTO dtinv_log_agent VALUES (DEFAULT,DEFAULT,NOW(),$freq,1,'<Carte>
      <Nbr_cartes>2</Nbr_cartes>
      <Stat_Ip>4119</Stat_Ip>
      <Type_carte>DTA-115 (#2)</Type_carte>
      <Taux_flux_transport>-858993460 bps</Taux_flux_transport>
      <Type_Modulation>?</Type_Modulation>
      <Frequence>578.00 MHz</Frequence>
      <Niveau_signal>-27.5 dBm</Niveau_signal>
      <Adresse_IP>204.204.204.204:52428</Adresse_IP>
      <Protocole>UDP</Protocole>
    </Carte>')
    Ce qui explique l'erreur:
    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '<Carte>
    <Nbr_cartes>2</Nbr_cartes>
    <Stat_Ip>4119</Stat_Ip>
    <Type_carte>DTA' at line 1

  13. #13
    Membre du Club
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Avril 2007
    Messages
    209
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Avril 2007
    Messages : 209
    Points : 68
    Points
    68
    Par défaut
    exactement! j'ai rajouté les apostrophes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $req = "INSERT INTO dtinv_log_agent VALUES (DEFAULT,DEFAULT,NOW(),$freq,1,'''+$txt+''')";
    et ça marche ! merci bcp

  14. #14
    Membre du Club
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Avril 2007
    Messages
    209
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Avril 2007
    Messages : 209
    Points : 68
    Points
    68
    Par défaut
    ou bien juste
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $req = "INSERT INTO dtinv_log_agent VALUES (DEFAULT,DEFAULT,NOW(),$freq,1,'$txt')";
    ça marche aussi

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

Discussions similaires

  1. [XL-2010] Manipulation d'une chaine de caractères
    Par CristofMartins dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 07/05/2013, 15h14
  2. [MySQL] Manipulation d'une chaine de caractère.
    Par Tanoak_LaCapuche dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 23/07/2012, 09h01
  3. Chercher et insérer une chaine de caractères dans du XML
    Par imen1986 dans le forum Format d'échange (XML, JSON...)
    Réponses: 0
    Dernier message: 23/04/2010, 00h19
  4. Réponses: 7
    Dernier message: 07/04/2010, 16h52
  5. Réponses: 3
    Dernier message: 01/02/2006, 18h26

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