27-09-2008, 03:08 PM
(Modification du message : 28-09-2008, 11:54 AM par Sephi-Chan.)
Et me revoilà avec une variable qui m'ennuie profondément...
je vous donne un code complet de test:
fichier .php
je vous donne un code complet de test:
fichier .php
Code PHP :
<?php
session_start();
require_once('../Admin/config.php');
$code_html_0='<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//FR" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Supra Online : Test comportement Ajax</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />';
//récupération du perso
$req='SELECT `ID_kalidhia`,`CSS`, `Libre`, `Objet` FROM `perso` WHERE `ID`='.$_SESSION["ID_perso"].' LIMIT 1';
$res=mysql_query($req,$base_id) or die ('Erreur de chargement des données du personnage');
if(mysql_num_rows($res)==1){$perso=mysql_fetch_assoc($res);}
else{} //recréer perso
//CSS
$code_CSS="";
$code_CSS.='<link rel="stylesheet" type="text/css" href="../CSS/Style.css">';
$code_CSS.='<link rel="stylesheet" type="text/css" href="../CSS/mini.css">';
//JS
$code_JS='<script type="text/javascript" src="../Scripts/overlib.js"><!-- overLIB (c) Erik Bosrup --></script>';
$code_menu='</head><body>
<div id="menu">
<ul>
<li><a href="entree.php"'; if($_GET["p"]=="connect"){$code_menu.=' class="actif"';} $code_menu.='><span>Changer de perso</span></a></li>
<li><a href="index.php?p=perso"'; if($_GET["p"]=="perso"){$code_menu.=' class="actif"';} $code_menu.='><span>'.$_SESSION["Nom_perso"].'</span></a></li>
<li><a href="index.php?p=inventaire"'; if($_GET["p"]=="inventaire"){$code_menu.=' class="actif"';} $code_menu.='><span>Inventaire</span></a></li>
<li><a href="index.php?p=compet"'; if($_GET["p"]=="compet"){$code_menu.=' class="actif"';} $code_menu.='><span>Compétences</span></a></li>
<li><a href="index.php?p=map" title="votre vue"'; if($_GET["p"]=="map"){$code_menu.=' class="actif"';} $code_menu.='><span>Carte</span></a></li>
<li><a href="index.php?p=lieu"'; if($_GET["p"]=="lieu"){$code_menu.=' class="actif"';} $code_menu.='><span>Lieu</span></a></li>
<li><a href="index.php?p=messagerie"'; if($_GET["p"]=="messagerie"){$code_menu.=' class="actif"';} $code_menu.='><span>Messagerie</span></a></li>
<li><a href="index.php?p=journal"'; if($_GET["p"]=="journal"){$code_menu.=' class="actif"';} $code_menu.='><span>Journal de bord</span></a></li>
<li><a href="index.php?p=compagnie"'; if($_GET["p"]=="compagnie"){$code_menu.=' class="actif"';} $code_menu.='><span>Compagnie</span></a></li>
<li><a href="index.php?p=guilde"'; if($_GET["p"]=="guilde"){$code_menu.=' class="actif"';} $code_menu.='><span>Guilde(s)</span></a></li>
<li><a href="index.php?p=option"'; if($_GET["p"]=="option"){$code_menu.=' class="actif"';} $code_menu.='><span>Options</span></a></li>
<li><a href="../forum/index.php"><span>Forums</span></a></li>';
if($_SESSION["Admin"]==1){$code_menu.='<li><a href="../Dvlpt/index.php"><span>Administration</span></a></li>';}
$code_menu.='<li><a href="../index.php?action=Déconnecter"><span>Déconnection</span></a></li>
</ul>
</div>
<div id="content">';
$code_JS.='<script type="text/javascript" src="test_ajax_comportement.js"></script>';
//calcul X et Y
$X=$perso["ID_kalidhia"]%190;
$Y=floor($perso["ID_kalidhia"]/190);
$requete="SELECT ID, Nom, x, y FROM ville WHERE x=".$X." AND y=".$Y;
//echo '<p class="info">Requête : '.$requete.'</p>';
$resultat=mysql_query($requete,$base_id) or die ('[Lieu] Requête impossible : '.mysql_error());
if(mysql_num_rows($resultat)==0)
{
//echo '<p class="info">Vous ne vous trouvez pas sur un lieu particulier</p>';
//donc, carte normale... génération, ou pas?
include ('mini_map_controle.inc.php');
//récupérer le dernier ID du chat au chargement
$res=mysql_query('SELECT `ID` FROM `chat_kalidhia` ORDER BY `ID` DESC LIMIT 1',$base_id);
if(mysql_num_rows($res)==1){$d=mysql_fetch_assoc($res); $last_IDchat=$d["ID"]; mysql_free_result($res);}
else{$last_IDchat=0;}
//affichage
echo $code_html_0.$code_CSS.$code_JS.$code_menu;
//quoiqu'il arrive, on rentre en mini-carte
echo '<div>Votre position continent : X='.$X.'/ Y='.$Y.'</div>';
echo '<div id="barre_comp"></div>';
echo '<div id="carte"><img src="images/ajax-loader.gif" /></div>';
echo '<div id="mini-move">';
include('mini_map_mouvement.inc.php');
echo '</div>';
echo '<span class="info" id="msg" style="border: double 3px black;">messages de retour</span>';
echo '<span class="info" id="info"></span>';
echo '<div class="info" id="sortie"></div>';
echo '</div>';
//debug
echo '<input type="button" id="test" onClick="alert(\'Décor demandé (12)= \' + load_decor(12));" value="test decor" />';
//les appels ajax
echo '<script language="javascript">show_decor();var rep=load_decor("5,8,12"); SetDiv(rep,"info"); show_decor();</script>';
}
?>
un fichier .js intégré:
Code PHP :
<?php
var t_decor = new Array();
var t_decor_2 = new Array();
var mem_d= new Array();
function addslashes(str) {
str=str.replace(/\'/g,'\\\'');
str=str.replace(/\"/g,'\\"');
str=str.replace(/\\/g,'\\\\');
str=str.replace(/\0/g,'\\0');
return str;
}
function stripslashes(str) {
str=str.replace(/\\'/g,'\'');
str=str.replace(/\\"/g,'"');
str=str.replace(/\\\\/g,'\\');
str=str.replace(/\\0/g,'\0');
return str;
}
function SetDiv(text,div)
{
if (document.getElementById)
{
document.getElementById(div).innerHTML = '';
document.getElementById(div).innerHTML = text;
}
else if (document.all)
{
x = document.all[div];
x.innerHTML = text;
}
else if (document.layers)
{
x = document.layers[div];
text2 = '<p class="testclass">' + text + '</p>';
x.document.open();
x.document.write(text2);
x.document.close();
}
}
function load_decor(liste_ID)
{
var suivi='<u>Suivi de la requete Ajax :</u>';
var cpt = -1;
//méthode AJAX
var xhr_object = null;
if(window.XMLHttpRequest){xhr_object = new XMLHttpRequest();} // FIREFOX
else if(window.ActiveXObject){xhr_object = new ActiveXObject("Microsoft.XMLHTTP");} // IE
else{alert('Votre navigateur ne supporte pas les objets XMLHttpRequest');}
//on spécifie la méthode de transfert des données
xhr_object.open("GET", 'ajax.load_decor.php?ID=' + liste_ID , true); //synchrone => on affiche rien tant que ce n'est pas chargé
//on éxécute la requête
xhr_object.onreadystatechange = function()
{
try
{
if(xhr_object.readyState == 4) //données reçues!
{
suivi +='<br />Réponse reçue';
SetDiv(suivi,'msg');
var Data = xhr_object.responseText;
SetDiv(Data, 'info');
// message recu: Etat*detail
var reg=new RegExp("[*]+", "g");
var tab=Data.split(reg);
//on met à jour
if(tab[0]=="KO"){SetDiv('Décor erreur : ' + tab[1],'info');}
else if(tab[0]=="OK")
{
//detail contient plusieurs décors séparés par "µ"
reg=new RegExp("[µ]", "g");
var grp=tab[1].split(reg);
for each(a in grp)
{
var reg=new RegExp("[¤]+", "g");
var d=a.split(reg);
cpt=t_decor.length;
suivi +='<br />Traitement Décor N°' + d[0];
SetDiv(suivi,'msg');
t_decor[cpt]= new Array(d[0],stripslashes(d[1]),d[2],d[3],d[4],d[5],d[6],d[7],d[8]);
//ID, nom, Image, Bloc, Hauteur, Largeur, Transparent, Action, remplacement
//SetDiv('','info');
//test variables
t_decor_2[d[0]]=new Array(d[0],stripslashes(d[1]),d[2],d[3],d[4],d[5],d[6],d[7],d[8]);
}
}
suivi +='<br />Fin de la requete';
SetDiv(suivi,'msg');
suivi='';
//affichage du contenu des variables globales
for(a in t_decor){suivi +='<br />t_decor['+a+'][0]='+t_decor[a][0]+'<br />t_decor['+a+'][1]='+t_decor[a][1];}
SetDiv(suivi,'info');
//return cpt;
}
else if(xhr_object.readyState == 1) //données envoyées
{
SetDiv('Requete préparée','info');
suivi +='<br />Requete préparée pour ' + liste_ID;
SetDiv(suivi,'msg');
cpt="_1";
}
else if(xhr_object.readyState == 2) //données envoyées
{
SetDiv('Requete reçue par le serveur','info');
suivi +='<br />Requete reçue par le serveur';
SetDiv(suivi,'msg');
cpt="_2";
}
else //données en cours
{
SetDiv('Mise à jour des décors','info');
cpt=-2;
suivi +='<br />Requete en cours sur ' + liste_ID;
SetDiv(suivi,'msg');
}
//suivi +='<br />Fin onreadyStateChange()';
//SetDiv(suivi,'msg');
}
catch(e)
{
alert("Une exception s'est produite : " + e.description);
}
}
xhr_object.send(null);
suivi +='<br />Envoi de la requete';
SetDiv(suivi,'msg');
}
function show_decor()
{
var suivi='<u>Données en T_decor:</u>';
suivi+='<br />Taille : '+t_decor.length;
for(a in t_decor){suivi +='<br />t_decor['+a+'][0]='+t_decor[a][0]+' --- t_decor['+a+'][1]='+t_decor[a][1];}
SetDiv(suivi,'sortie');
}