Probleme XML avec PHP

Résolu/Fermé
nikool - 3 juin 2009 à 13:16
 nikool - 3 juin 2009 à 16:13
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>
A voir également:

2 réponses

ThEBiShOp Messages postés 8378 Date d'inscription jeudi 22 mars 2007 Statut Contributeur Dernière intervention 8 février 2021 1 566
3 juin 2009 à 13:51
tu galèrerais moins avec simpleXML

https://eusebius.developpez.com/php5dom/
0
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..
0