Rechercher : dans
Par :

Probleme XML avec PHP

Dernière réponse le 3 jun 2009 à 16:13:19 nikool, le 3 jun 2009 à 13:16:35 
 Signaler ce message aux modérateurs

Bonjour,

voici ma prise de tête du jour :

Mon but ultime :
Je cherche à mettre à jour un fichier XML à l'aide de PHP, afin de le lire dans une animation flash.

voici mon problème :
j'ai un fichier XML tout simple que je lis à l'aide de PHP. Je récupère les valeurs des balises XML que je place dans un formulaire afin de pouvoir les modifier. Un champ de mon formulaire est un textarea. C'est ce champ qui me pose problème. Lorsque j'affiche le contenu récupéré dans le textarea, je ne conserve pas les retours à la ligne, malgré tous mes efforts (nl2br, str_replace, br2nl)...

qqun pourrait-il m'aider ?
Merci beaucoup d'avance !!!

Voici le code du XML: nom de fichier : myXML.xml

<?xml version="1.0" ?><menuTitle>Menu Noel</menuTitle><menuContent>Entrée à base de pousse de bambou234<br />sadadasd<br />asdasda</menuContent>


et voici ma page PHP : nom de fichier : index.php
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>admin</title>
<style type="text/css">
body{
	margin:0px;
	padding:0px;
	font-family:Arial, Helvetica, sans-serif;
	font-size:12px;
}
#header{
	height:40px;
	background-color:#666666;
	padding-top:20px;
	padding-left:20px;
	color:#FFFFFF;
	font-size:20px;
	font-weight:bold;
}
#content{
	width:900px;
	margin:0 auto;
	margin-top:40px;
}

fieldset{
  padding:20px;
}
label{
  float:left;
  width:80px;;
  margin-right:10px;
  text-align:right;
  font-weight:bold;
}
input{
	font-family:Arial, Helvetica, sans-serif;
	font-size:12px;
	width:500px;		
}
input[type=submit]{
	font-family:Arial, Helvetica, sans-serif;
	font-size:12px;
	width:100px;
}
textarea{
	font-family:Arial, Helvetica, sans-serif;
	font-size:12px;
	width:500px;
	height:300px;
}
</style>
</head>
<body>

<?php 



   /* br2nl for use with HTML forms, etc. */
   function br2nl($text)
   {
       /* Remove XHTML linebreak tags. */
       $text = str_replace("<br />","",$text);
       /* Remove HTML 4.01 linebreak tags. */
       $text = str_replace("<br>","",$text);
       /* Return the result. */
       return $text;
   }



if(isset($_POST['submit'])){
	// les données du formulaire sont envoyées au server
	// --------------------------------------------------------
	
	// on convertit les données recues du textarea pour etre compatible avec flash
	$myMenu = nl2br($_POST["myMenu"]);

	
	$myMenu = str_replace("\n", "", $myMenu);
	$myMenu = str_replace("\r", "", $myMenu);

	
	
	// on créé le contenu du nouveau XML en récupérant les données du formulaire
	$createdXML = '<?xml version="1.0" ?><menuTitle>'.$_POST["myTitle"].'</menuTitle><menuContent>'.$myMenu.'</menuContent>';

	// on définit le fichier à modifier
	$myFile = "myXML.xml";
	
	// ouverture du fichier XML en mode écriture
	$fh = fopen($myFile, 'w') or die("can't open file");
	
	// on écrit le nouveau contenu du fichier
	fwrite($fh, $createdXML);
	
	// on ferme le fichier une fois qu'il est modifié
	fclose($fh);
	
	// on redirige la navigation pour afficher à nouveau la page de l'admin
	header('Location: index.php');

		
}else{
	// aucune données n'a été envoyée, on affiche le formulaire
	// --------------------------------------------------------	
	
	// on définit une variable qui va contenir le fichier XML
	$xml = '';
	
	// on ouvre le fichier XML en mode lecture
	$f = fopen('myXML.xml', 'r');
	
	// on effectue une boucle pour récuperer toutes les données du fichier XML
	while($data = fread($f, 4096)){$xml .= $data;}
	
	// une fois les données du XML lues et enregistrées dans la variable $xml, on ferme le fichier
	fclose($f);
  
	// on parse le XML pour récuperer le contenu des balises, les variables $menuTitle et $menuContent contiennent les éléments de notre XML
	preg_match_all( "/\<menuTitle\>(.*?)\<\/menuTitle\>/", $xml, $menuTitle); //echo($menuTitle[1][0]);
	preg_match_all( "/\<menuContent\>(.*?)\<\/menuContent\>/", $xml, $menuContent);	//echo($menuContent[1][0]);
	
	// on convertit les retours à la ligne pour un affichage optimal dans le textarea
	//$menuContent = str_replace('<br>', ' \n ', $menuContent[1][0]);

?>
	<div id="header">Administration</div>
	<div id="content">
		<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
			<fieldset>
				<legend>Menu content</legend>
				<label for="name">Titre</label>
				<input type="text" value="<?php echo($menuTitle[1][0]); ?>" name="myTitle" /><br />
				<label for="mail">Menu</label>
				<textarea name="myMenu" wrap="off"><?php echo(br2nl($menuContent[1][0])); ?></textarea>
			</fieldset>
			<input type="submit" name="submit" />
		</form>
	</div>
<?php
}
?>
</body>
</html>
Configuration: Windows Vista
Firefox 3.0.10

Meilleures réponses pour « Probleme XML avec PHP » dans :
PHP - Parser du XML Voir Introduction à XML PHP permet l'analyse syntaxique (parsage ou parsing en anglais) d'un document XML. Le langage XML (eXtensible Markup Language, traduisez Langage à balises extensibles) est un métalangage, c'est-à-dire un langage permettant de...
Télécharger Notepad2 VoirNotepad2 est un bloc-note sans installation libre possédant des fonctionnalités avancées de coloration syntaxique. Fonctionnalités Coloration syntaxique pour les langages suivants : HTML, XML, PHP, ASP (JScript, VBS), CSS, JavaScript, VBScript,...
PHP - Les variables d'environnement VoirNotion de variable d'environnement Les variables d'environnement sont, comme leur nom l'indique, des données stockées dans des variables permettant au programme d'avoir des informations sur son environnement. L'environnement, dans le cas du script...
Les espaces de nom XML VoirIntroduction aux espaces de noms XML définit un système permettant de créer des balises modulaires, c'est-à-dire pouvoir donner la possibilité d'utiliser des balises provenant de différents langages à balise au sein d'un même document grâce à la...
PHP - Récupération de données VoirPHP rend très simple la récupération de données envoyées par l'intermédiaire de formulaires HTML. Création d'un formulaire Grâce à la balise FORM du langage HTML, il est très simple de créer des formulaires comprenant : des champs de saisie des...

1

ThEBiShOp, le 3 jun 2009 à 13:51:49

Tu galèrerais moins avec simpleXML

http://eusebius.developpez.com/php5dom/

Répondre à ThEBiShOp

2

 nikool, le 3 jun 2009 à 16:13:19

Salut,

merci, je vais regarder avec simpleXML.. mais en attendant, pour faire fonctionner mon bout de code, j'ai simplement changé la fonction suivante :

   function br2nl($text)
   {
       /* Remove XHTML linebreak tags. */
       $text = str_replace("<br />","",$text);
       /* Remove HTML 4.01 linebreak tags. */
       $text = str_replace("<br>","",$text);
       /* Return the result. */
       return $text;
   }


en :

   function br2nl($text)
   {
       /* Remove XHTML linebreak tags. */
       $text = str_replace("<br />","\n",$text);
       /* Remove HTML 4.01 linebreak tags. */
       $text = str_replace("<br>","\n",$text);
       /* Return the result. */
       return $text;
   }


merci encore..

Répondre à nikool