Précédent   Forum des professionnels en informatique > PHP > Bibliothèques et frameworks > XML > SimpleXML
SimpleXML Forum d'entraide pour l'extension SimpleXML, qui permet de manipuler des documents XML en PHP (approche DOM).
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 20/02/2008, 11h44   #1
Membre à l'essai
 
Inscription : décembre 2004
Messages : 74
Détails du profil
Informations forums :
Inscription : décembre 2004
Messages : 74
Points : 20
Points : 20
Envoyer un message via ICQ à sasaas Envoyer un message via AIM à sasaas
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 :
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]);
}
?>
sasaas est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/02/2008, 11h49   #2
Membre Expert
 
Inscription : avril 2006
Messages : 1 338
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : avril 2006
Messages : 1 338
Points : 1 315
Points : 1 315
je te dirige vers cette fonction

http://fr3.php.net/manual/fr/function.str-split.php
__________________
Stay in Bed .. Save Energy
boo64 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/02/2008, 11h51   #3
Membre chevronné
 
Inscription : janvier 2006
Messages : 918
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 918
Points : 735
Points : 735
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
guidav est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/02/2008, 12h00   #4
Membre expérimenté
 
Inscription : août 2005
Messages : 515
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 515
Points : 557
Points : 557
Bonjour,
je crois qu'il essayes de comprendre les boucles, donc :

Code :
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.
DaRiaN est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/02/2008, 14h38   #5
Membre à l'essai
 
Inscription : décembre 2004
Messages : 74
Détails du profil
Informations forums :
Inscription : décembre 2004
Messages : 74
Points : 20
Points : 20
Envoyer un message via ICQ à sasaas Envoyer un message via AIM à sasaas
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?
sasaas est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/02/2008, 14h47   #6
Membre actif
 
Pierre
Développeur informatique
Inscription : juin 2007
Messages : 148
Détails du profil
Informations personnelles :
Nom : Pierre
Âge : 24
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : juin 2007
Messages : 148
Points : 166
Points : 166
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.
GoTrUnKo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/02/2008, 15h05   #7
Rédacteur/Modérateur
 
Avatar de MaitrePylos
 
Homme Gérard Ernaelsten
DBA & Dev PHP
Inscription : juin 2005
Messages : 3 182
Détails du profil
Informations personnelles :
Nom : Homme Gérard Ernaelsten
Âge : 39
Localisation : Belgique

Informations professionnelles :
Activité : DBA & Dev PHP
Secteur : Service public

Informations forums :
Inscription : juin 2005
Messages : 3 182
Points : 6 469
Points : 6 469
Bonjour,

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

Code :
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
}
 
?>
MaitrePylos est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h20.


 
 
 
 
Partenaires

Hébergement Web