Pb interprétation balises <script>

Eléphanteau du PHP | 45 Messages

18 déc. 2006, 11:29

Bonjour @tous.

Alors voila, j'ai un problème d'intégration d'un editeur HTML sur certaines pages...

En effet, la structure de mes pages est la suivante :

Index.php --> redirige (via include) vers artistes.php lorsque $_GET['page']=="artistes" et éxécute <body onload="initEditor();">

Index.php est la seule page qui contient une en-tete HTML :

Code : Tout sélectionner

<!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=iso-8859-1" />
artistes.php --> redirige vers newArtistes.php lorsque $_GET['task'] =="new"

artistes.php --> redirige vers editArtistes.php lorsque $_GET['task'] =="edit"

editArtistes.php --> est une page qui contient une liste box qui permet de choisir un artiste à éditer. Lorsque l'utilisateur à choisit son artiste, editArtistes.php redirige vers AJAX_edit_artiste_form.php de la manière suivante :

Code : Tout sélectionner

<script language="javascript" type="text/javascript"> // fonctions AJAX pour l'affichage dartistes // Renvoie le texte de l'objet ActiveXObject le plus rcent depuis une liste var pickRecentProgID = function (idList){ var bFound = false; for(var i=0; i < idList.length && !bFound; i++){ try{ var oDoc = new ActiveXObject(idList[i]); o2Store = idList[i]; bFound = true; }catch (objException){ }; }; if (!bFound) throw ("Aucun ActiveXObject n'est valide sur votre ordinateur, pensez mettre jour votre navigateur"); idList = null; return o2Store; } // Retourne un nouvel objet XmlHttpRequest var GetXmlHttpRequest_AXO=null; var GetXmlHttpRequest=function () { if (window.XMLHttpRequest) { return new XMLHttpRequest() } else if (window.ActiveXObject) { if (!GetXmlHttpRequest_AXO) { GetXmlHttpRequest_AXO=pickRecentProgID(["Msxml2.XMLHTTP.5.0", "Msxml2.XMLHTTP.4.0", "MSXML2.XMLHTTP.3.0", "MSXML2.XMLHTTP", "Microsoft.XMLHTTP"]); } return new ActiveXObject(GetXmlHttpRequest_AXO) } return false; } getXhr=GetXmlHttpRequest; function go(){ var xhr = getXhr(); // On d fini ce qu'on va faire quand on aura la rponse xhr.onreadystatechange = function(){ // On ne fait quelque chose que si on a tout re u et que le serveur est ok if(xhr.readyState == 4 && xhr.status == 200){ leselect = xhr.responseText; // On se sert de innerHTML pour rajouter les options a la liste window.document.getElementById('bloc').innerHTML = leselect; } } // Ici on va voir comment faire du post xhr.open("POST","./AJAX_edit_artiste_form.php",true); // ne pas oublier a pour le post xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded'); // ne pas oublier de poster les arguments // ici, l'id de l'artiste selectionn id_edit_art = window.document.getElementById('select_type_edit'); Id_edit_art = id_edit_art.value; xhr.send("id_edit_art="+Id_edit_art); } elem = window.document.getElementById('select_type_edit'); elem.onclick = function() { go(); }; </script>

Mon éditeur s'intègre de la facon suivante sur la page newArtistes.php :

Code : Tout sélectionner

<script type="text/javascript"> _editor_url = "./editor"; _editor_lang = "fr"; </script> <script type="text/javascript" src="./editor/htmlarea.js"></script> <script type="text/javascript"> var editor = null; function initEditor() { editor = new HTMLArea("bio_art"); </script>
Ce bout de code initialise un nouvel editeur dans la textearea nommée "bioart" qui se trouve sur la page newArtistes.php.

Seulement voila, sur ma page AJAX_edit_artiste_form.php , j'ai aussi un textarea nommée "newbio_art" que j'aimerais rendre editable grace à mon editeur HTML, mais cela ne fonctionne pas lorsque j'insère les balises <script></script> comme je le fait sur newArtistes.php. J'ai essayé de placer ceci un peu partout (AJAX_edit_artiste_form.php , index.php, editArtistes.php, artistes.php) :

Code : Tout sélectionner

<script type="text/javascript"> _editor_url = "./editor"; _editor_lang = "fr"; </script> <script type="text/javascript" src="./editor/htmlarea.js"></script> <script type="text/javascript"> var editor = null; function initEditor() { editor = new HTMLArea("newbio_art"); </script>

A titre indicatif, voila ce que contient AJAX_edit_artiste_form.php :
<?php
	include_once ("../elements/php/config.php");


if(isset($_POST['editor']) && $_POST['editor'] != "")
		echo $_POST['editor'];

	if(isset($_POST['edit_art_id']) && $_POST['edit_art_id'] != "")
	{					
			$getInfo_Art = mkquery("SELECT a.id_art, a.nom_art, a.prenom_art, a.dir, a.bio, t.id_type FROM artiste AS a, art_type AS t WHERE a.id_art = ".$_POST['edit_art_id']." AND a.id_art = t.id_art LIMIT 1");

			while ($Info_Art = mysql_fetch_array($getInfo_Art)){
				
				$id_art = $Info_Art['id_art'];
				$nom = utf8_encode($Info_Art['nom_art']);
				$prenom = utf8_encode($Info_Art['prenom_art']);
				$dir = $Info_Art['dir'];
				$bio = utf8_encode($Info_Art['bio']);
				$type = $Info_Art['id_type'];
			
			}
	}
	
?>
<input type="hidden" name="id_art_edit" value="<?php echo $id_art; ?>" />

<table cellpadding="0" cellspacing="10" border="0" width="100%">
<tr>
	<td width="55%" valign="top">
<textarea name="newbio_art" id="newbio_art" cols="48" rows="15"  /><?php if(isset($bio) && $bio!="") echo $bio; ?></textarea>
</td>
</tr>
</table>
Ma question est : Pourquoi le code de mes balises <script> ne s'éxécute pas dans la page AJAX_edit_artiste_form.php, ni ailleur d'ailleurs...

Je vous remercie d'avance pour vos réponses !

Eléphanteau du PHP | 45 Messages

18 déc. 2006, 18:46

Bon, alors j'ai ajouté ceci à mon code sur editArtiste.php :

Code : Tout sélectionner

<script language="javascript" type="text/javascript"> setInnerHTML = function(divContent, HTML) { divContent.innerHTML=HTML; var All=divContent.getElementsByTagName("*"); for (var i=0; i<All.length; i++) { All[i].id=All[i].getAttribute("id") All[i].name=All[i].getAttribute("name") All[i].className=All[i].getAttribute("class") } var AllScripts=divContent.getElementsByTagName("script") for (var i=0; i<AllScripts.length; i++) { var s=AllScripts[i]; if (s.src && s.src!="") { // Précédement asynchrone, mis en synchrone pour éviter des problèmes de dépendances de scripts eval(getFileContent(s.src)) } else { eval(s.innerHTML) } } } // fonctions AJAX pour l'affichage dartistes // Renvoie le texte de l'objet ActiveXObject le plus rcent depuis une liste var pickRecentProgID = function (idList){ var bFound = false; for(var i=0; i < idList.length && !bFound; i++){ try{ var oDoc = new ActiveXObject(idList[i]); o2Store = idList[i]; bFound = true; }catch (objException){ }; }; if (!bFound) throw ("Aucun ActiveXObject n'est valide sur votre ordinateur, pensez mettre jour votre navigateur"); idList = null; return o2Store; } // Retourne un nouvel objet XmlHttpRequest var GetXmlHttpRequest_AXO=null; var GetXmlHttpRequest=function () { if (window.XMLHttpRequest) { return new XMLHttpRequest() } else if (window.ActiveXObject) { if (!GetXmlHttpRequest_AXO) { GetXmlHttpRequest_AXO=pickRecentProgID(["Msxml2.XMLHTTP.5.0", "Msxml2.XMLHTTP.4.0", "MSXML2.XMLHTTP.3.0", "MSXML2.XMLHTTP", "Microsoft.XMLHTTP"]); } return new ActiveXObject(GetXmlHttpRequest_AXO) } return false; } getXhr=GetXmlHttpRequest; getFileContent = function (url) { var Xhr=GetXmlHttpRequest(); Xhr.open("GET",url,false); Xhr.send(null); return Xhr.responseText; } go1 = function (){ var xhr = getXhr(); // On dfini ce qu'on va faire quand on aura la r ponse xhr.onreadystatechange = function(){ // On ne fait quelque chose que si on a tout reu et que le serveur est ok if(xhr.readyState == 4 && xhr.status == 200){ leselect = xhr.responseText; // On se sert de innerHTML pour rajouter les options a la liste setInnerHTML(window.document.getElementById("bloc1"), leselect); } } // Ici on va voir comment faire du post xhr.open("POST","./AJAX_edit_artiste_form.php",true); // ne pas oublier a pour le post xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded'); // ne pas oublier de poster les arguments // ici, l'id de l'artiste selectionn edit_art_id = window.document.getElementById('sel_edit_art_id'); Edit_art_id = edit_art_id.value; xhr.send("edit_art_id="+Edit_art_id); } </script>
Par contre maintenant, on m'indique qu'il y a une erreur de syntaxe :

Erreur : syntax error
Fichier source : ?page=artistes&task=edit
Ligne : 207
Code source :
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">


A quoi cela correspond ? Pourquoi IETF ?

A la base mon En-tete HTML est la suivante :

Code : Tout sélectionner

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">