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...
[PHP] Upload de fichiers VoirLe langage PHP permet de gérer des fichiers envoyés (uploadés) grâce à un formulaire HTML. Formulaire d'envoi de fichiers Configuration de PHP pour permettre l'upload Récupération du fichier avec PHP Formulaire d'envoi de fichiers La...
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,...
DOM (Document Object Model) et SAX (Simple API for XML) VoirXML permet de définir la structure du document uniquement, ce qui permet d'une part de pouvoir définir séparément la présentation de ce document, d'autre part d'être capable de récupérer les données présentes dans le document pour les...
XML-RPC (Remote Procedure Call) VoirXML-RPC Le standard XML-RPC, défini depuis 1998, est un protocole basé sur XML permettant l'invocation de procédures à distance. Avec XML-RPX l'appel d'une
PHP - Les fichiers VoirLa gestion des fichiers avec PHP Avec PHP, la création ou la lecture de fichiers est, une fois de plus, assez simple. Il existe une multitude de fonctions dédiées à l'utilisation des fichiers. La communication entre le script PHP et le fichier...

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