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

Bibliothèques et frameworks PHP Discussion :

[SimpleXML] Boucle "for" n'affiche pas le résultat que je veux


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Membre du Club
    Inscrit en
    Décembre 2004
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 74
    Points : 50
    Points
    50
    Par défaut [SimpleXML] Boucle "for" n'affiche pas le résultat que je veux
    Bonjour

    J'ai un problème c'est comprendre l'exécution des boucles.
    J'eassai de faire un petit module qui récupère le contenue d'une zone de texte et décompose le texte récupérer en lettre pour ensuite afficher les lettre du texte une à une séparés.

    mon problème c'est que ce que j'ai fait affiche seulement la première lettre plusieurs fois.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <body><form method=POST action=index.php><p>
    nom : <input name="nom" type=text><p>
    <p>Style : <input name="Style" type="radio" value="F">style1
    <input name="Style" type="radio" value="H">style2
    <input name="Style" type="radio" value="A">style3<p>
    <input type=submit value="Traduire"></body><br>
    <?php 
    $Vnom= $_POST['nom'];
    $str=strlen($Vnom);
    for ($i=1;$i<=$str;$i++)
    {
     echo ($Vnom[i]);
    }
    ?>

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 349
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 349
    Points : 1 460
    Points
    1 460
    Par défaut
    je te dirige vers cette fonction

    http://fr3.php.net/manual/fr/function.str-split.php

  3. #3
    Membre éprouvé

    Inscrit en
    Janvier 2006
    Messages
    969
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 969
    Points : 958
    Points
    958
    Par défaut
    Bonjour

    C'est parce que tu as une erreur de syntaxe dans ton affichage :
    Dans ce cas, tu appelles l'index qui a pour identifiant la CONSTANTE i (qui n'existe pas ici), ce qui provoque une erreur.
    Il faudrait mettre

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2005
    Messages
    514
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 514
    Points : 631
    Points
    631
    Par défaut
    Bonjour,
    je crois qu'il essayes de comprendre les boucles, donc :

    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
    <?php
     
      $mot = 'toto'; // $mot vaut toto
      $total = strlen($mot); // $total vaut 4
     
      for ($i = 0; $i < $total; $i++) // $i commence à 0 et n'affichera jamais 4
      {
     
        echo $mot[$i].' '; // affiche la lettre qui vaut $i + un espace
     
      }
     
      // ce script retourne : t o t o
     
    ?>
    En PHP, la première lettre d'une chaine de caractère est retournée avec l'index 0, donc toto à 4 index : 0, 1, 2 et 3. Donc $i commence à 0 et est plus petit que 4, la boucle s'arrête donc quand $i arrive à 4.

    Votre erreur était d'avoir commencé votre boucle avec un $i = 1, de penser que $i pouvait être égal à la longueur de la chaine, et d'avoir utiliser la constante i dans $Vnom[i], qui n'existe pas.

    Cordialement,
    DaRiaN.

  5. #5
    Membre du Club
    Inscrit en
    Décembre 2004
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 74
    Points : 50
    Points
    50
    Par défaut
    Merci pour vos réponses, ce que je veux faire maintenant c'est stocké les lettres récupérés à partir de ce script php vers un autre fichier xml pour traduire les lettres récupérer vers une autre longue :
    c-a-d je veux stocker tous les lettres latins et données à chaque lettre son equivalent en prononciation arabe et puis réafficher le résultat.

    Pouvez vous m'aider encore?

  6. #6
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2007
    Messages
    148
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2007
    Messages : 148
    Points : 186
    Points
    186
    Par défaut
    Comme le disent les collègues un peu plus haut, dans ta boucle POUR, tu mets [i] et non [$i], le i sans $ est considéré comme une CONSTANTE, par conséquent il ne peut utiliser quelque chose qui n'existe pas.

  7. #7
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 497
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 497
    Points : 12 600
    Points
    12 600
    Par défaut
    Bonjour,

    quelque chose de vite fait, le xml serait mieux dans un fichier avec la fonction simplexml correspondante.

    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
     
    <?php
    //on definis un xml, l'idéal serais un fichier
    $string = <<<XML
    <?xml version='1.0'?> 
    <document>
    	<a>c'est le a</a>
    	<b>c'est le b</b>
    	<c>c'est le c</c>
    </document>
    XML;
     
    $xml = simplexml_load_string($string);
     
     
    $mot = 'abc';
    $total = strlen($mot);
     
    for ($i = 0; $i < $total; $i++) // $i commence à 0 et n'affichera jamais 4
    {
     
    	echo $xml->$mot[$i]."<br />"; // affiche la lettre qui vaut $i + un espace
    }
     
    ?>

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

Discussions similaires

  1. icefaces table n affiche pas les résultat
    Par *alexandre* dans le forum JSF
    Réponses: 0
    Dernier message: 15/09/2008, 17h56
  2. [XSL]Comment faire ceci ?? Mon for-each n'affiche pas tout !
    Par Devil666 dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 27/07/2005, 16h04

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