[Ajax+PHP] Refresh et MySQL

Résolu/Fermé
xxkirastarothxx Messages postés 378 Date d'inscription vendredi 19 octobre 2007 Statut Membre Dernière intervention 22 mars 2013 - 11 juil. 2008 à 12:04
 vct - 7 sept. 2008 à 11:19
Bonjour à tous,

J'ai récupéré et modifié un script de mini chat, mais depuis que je veux afficher des réponses SQL, à la place de ce qu'il y a dans un fichier txt, plus rien ne marche.
je suis spécialement mauvais en Ajax, donc si quelqu'un pouvais m'aider un peu ça serrai super :)

<?php
function afficher()
{
    mysql_connect("localhost", "root", "");
	mysql_select_db("chat");
	$reponse = mysql_query("SELECT * FROM minichat");
	while ($donnees = mysql_fetch_array($reponse))
	{
		echo $donnees['name'];
	}
    mysql_close();
}

require_once('./xajax_core/xajax.inc.php');
$xajax = new xajax();
$xajax->register(XAJAX_FUNCTION, 'afficher');
$xajax->processRequest();
?>
<html>
        <head>
                <title>Chat xAjax</title>
                <?php $xajax->printJavascript();?>
                <script type="text/javascript">
                    function refresh()
                    {
                        xajax_afficher();
                        setTimeout(refresh, 5000);
                    }
                </script>
        </head>
        <body>
                <div id="block"></div>
		<?php include "form.php"; ?>
                <script type="text/javascript">
                        refresh();
                </script>
        </body>
</html>


il n'y a presque que la fonction afficher() qui change, l'originale était:
function afficher()
{
        $reponse = new xajaxResponse();
        $chat = '';//Initialisation de la variable $chat
        $fichier_texte = fopen('./chat.txt', 'r');
        $chat = fread($fichier_texte, filesize('./chat.txt'));
        fclose($fichier_texte);
        $reponse->assign('block', 'innerHTML', $chat);
        return $reponse;
}

je suppose donc que ma fonction est complètement fausse, mais comme je l'ai dis j'y connais rien en ajax :P
Merci Beaucoup :)
A voir également:

18 réponses

Alkaaran Messages postés 285 Date d'inscription dimanche 20 mai 2007 Statut Membre Dernière intervention 3 novembre 2009 37
11 juil. 2008 à 12:35
Il nous faudrai ton fichier './xajax_core/xajax.inc.php', c'est lui le principal concerné :)
0
xxkirastarothxx Messages postés 378 Date d'inscription vendredi 19 octobre 2007 Statut Membre Dernière intervention 22 mars 2013 40
11 juil. 2008 à 12:45
Merci pour la réponse :)
Heuu c'est plutôt énorme comme fichier, j'ai + de 1300 lignes
c'est un script xajax, que j'ai télécharger sur: http://xajaxproject.org/download.php
(version 0.5 beta 4b Full)
Si ça aide pas, je veux bien le poster quand même ^^
0
Alkaaran Messages postés 285 Date d'inscription dimanche 20 mai 2007 Statut Membre Dernière intervention 3 novembre 2009 37
11 juil. 2008 à 13:28
Ahem, pour tout te dire après l'aperçu des fichiers qui composent le zip... je pense qu'il y a une sacrée enjambée entre un script de chat PHP par fichier texte et un script utilisant une librairie xAjax :)

Même si le site dit "The easiest way to develop apps with Ajax", c'est pas forcément vrai ^^

Si tu est un minimum autodidacte, renseigne toi sur les XMLHttpRequest (javascript), sinon je te propose de t'aider à faire le javascript, et tu t'occupera du php :p

Voici quelques liens :)
https://openclassrooms.com/fr/courses
https://www.toutjavascript.com/savoir/xmlhttprequest.php3
https://www.xul.fr/xml-ajax.html

Si tu veux un script js tout fait qui t'exécute ton fichier php par Ajax, j'en ai sous la main =)
0
xxkirastarothxx Messages postés 378 Date d'inscription vendredi 19 octobre 2007 Statut Membre Dernière intervention 22 mars 2013 40
11 juil. 2008 à 13:41
Enfait, je cherche juste le moyen d'actualiser automatiquement l'affichage des messages, se trouvant dans ma base de donnée.
Le reste (channel privé, session utilisateur, utilisateur en ligne etc etc, c'est pas un soucis.

Je vais allé voir les liens que tu m'as passé
100% autodidacte sur la conception web, mais depuis apeine 6 mois (HTML/CSS Ok - Php+Mysql Ok sans problème, sauf la poo pour laquel je n'ai encore aucune notion) :p
et je suis en train de développé ça pour le CMS que je développe en parallèle (Mdr).

Pour ton fichier, tu pourrais m'expliquer vite fais le fonctionement, je comprends pas trop :)
0
Alkaaran Messages postés 285 Date d'inscription dimanche 20 mai 2007 Statut Membre Dernière intervention 3 novembre 2009 37
11 juil. 2008 à 13:51
De quel fichier tu parle ? le script js ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
xxkirastarothxx Messages postés 378 Date d'inscription vendredi 19 octobre 2007 Statut Membre Dernière intervention 22 mars 2013 40
11 juil. 2008 à 13:57
oui ^^
0
Alkaaran Messages postés 285 Date d'inscription dimanche 20 mai 2007 Statut Membre Dernière intervention 3 novembre 2009 37
11 juil. 2008 à 14:04
// retourne un objet xmlHttpRequest.
// méthode compatible entre tous les navigateurs (IE/Firefox/Opera)
function getXMLHTTP(){
  var xhr=null;
  if(window.XMLHttpRequest) // Firefox et autres
  xhr = new XMLHttpRequest();
  else if(window.ActiveXObject){ // Internet Explorer
    try {
      xhr = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
      try {
        xhr = new ActiveXObject("Microsoft.XMLHTTP");
      } catch (e1) {
        xhr = null;
      }
    }
  }
  else { // XMLHttpRequest non supporté par le navigateur
    alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");
  }
  return xhr;
}

var _xmlHttp = null; //l'objet xmlHttpRequest utilisé pour contacter le serveur
var _adresseRecherche = "Tonfichier.php" //l'adresse à interroger 

function getData(){
  if(_xmlHttp&&_xmlHttp.readyState!=0){
    _xmlHttp.abort()
  }
  _xmlHttp=getXMLHTTP();
  if(_xmlHttp){
    //appel à l'url distante
    _xmlHttp.open("GET",_adresseRecherche,true);
    _xmlHttp.onreadystatechange=function() {
      if(_xmlHttp.readyState==4&&_xmlHttp.responseText) {
	alert(_xmlHttp.responseText) ; //Le contenu est renvoyé dans la propriété _xmlHttp.responseText :)
      }
    };
    // envoi de la requête
    _xmlHttp.send(null)
  }
}


La fonction javascript getData te renverra le resultat du fichier Tonfichier.php :)
0
xxkirastarothxx Messages postés 378 Date d'inscription vendredi 19 octobre 2007 Statut Membre Dernière intervention 22 mars 2013 40
11 juil. 2008 à 14:36
hmmm effectivement ça a l'air interessant.
Je vais me pencher la dessus cette après midi, je repasserais dans la soirée.
Merci :)
0
xxkirastarothxx Messages postés 378 Date d'inscription vendredi 19 octobre 2007 Statut Membre Dernière intervention 22 mars 2013 40
11 juil. 2008 à 15:54
Bon, alors :)
ça a l'air de marcher, mais pour le moment ça m'affiche le résultats dans une alerte et je n'ai pas trouvé le moyen de l'afficher "simplement" dans une div par exemple.
je continue de chercher de mon coté, mais un petit indice ne serrait pas de refus :)

j'ai essayé:
assign('block', 'innerHTML', _xmlHttp.responseText);
mais ça à pas l'air de marcher.
0
Alkaaran Messages postés 285 Date d'inscription dimanche 20 mai 2007 Statut Membre Dernière intervention 3 novembre 2009 37
11 juil. 2008 à 15:59
Rooh... je t'ai fait ça exprès pour que ça te fasse voir ^^

Donc dans ton code javascript :
remplace alert( _xmlHttp.responseText ) ;

par document.getElementById( 'id_de_ton_div' ) = _xmlHttp.responseText ;

:)
0
xxkirastarothxx Messages postés 378 Date d'inscription vendredi 19 octobre 2007 Statut Membre Dernière intervention 22 mars 2013 40
11 juil. 2008 à 16:50
Je fais des efforts mais franchement je comprends rien dans cette langue "lol" :P
Il faudrait que je suive bien les tutos (voir déjà que j'entame les bases du js), mais j'aimerais finir de dev ce truc avant, surtout que pour le moment c'est le seul endroits ou j'aurais besoin d'utiliser de l'ajax dans mon CMS.

pour le moment, j'ai pris ton script, j'ai tout mis entre balise <script type="text/javascript"></script>; j'ai changer "Tonficher.php" par "message.php" (qui, pour le test, ne contient qu'un simpe 'echo "ok";' ; et j'ai rajouter le getData(); en toute fin de script.
=> Jusque la ça marche, j'ai mon alerte qui me dis "ok"

je change "alert( _xmlHttp.responseText ) ;" par "document.getElementById( 'block' ) = _xmlHttp.responseText ;" et je rajoute "<html><body><div id='block'> </div></body></html>"
=> Et bah là y'a p'u rien :S

voici mon fichier "test.php":

<script type="text/javascript">
// retourne un objet xmlHttpRequest.
// méthode compatible entre tous les navigateurs (IE/Firefox/Opera)
function getXMLHTTP()
{
	var xhr=null;
	if(window.XMLHttpRequest) // Firefox et autres
	xhr = new XMLHttpRequest();
	else if(window.ActiveXObject)// Internet Explorer
	{ 
		try 
		{
			xhr = new ActiveXObject("Msxml2.XMLHTTP");
	    } 
		catch (e) 
		{
			try 
			{
				xhr = new ActiveXObject("Microsoft.XMLHTTP");
			}
			catch (e1)
			{
				xhr = null;
			}
	    }
	}
	else // XMLHttpRequest non supporté par le navigateur
	{ 
		alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");
	}
	return xhr;
}

var _xmlHttp = null; //l'objet xmlHttpRequest utilisé pour contacter le serveur
var _adresseRecherche = "chat.php" //l'adresse à interroger 

function getData()
{
	if(_xmlHttp&&_xmlHttp.readyState!=0)
	{
		_xmlHttp.abort()
	}
	_xmlHttp=getXMLHTTP();
	if(_xmlHttp)
		{
		    //appel à l'url distante
		    _xmlHttp.open("GET",_adresseRecherche,true);
		    _xmlHttp.onreadystatechange=function()
			{
			    if(_xmlHttp.readyState==4&&_xmlHttp.responseText)
				{
					document.getElementById( 'block' ) = _xmlHttp.responseText ;
			    }
		    };
		    // envoi de la requête
		    _xmlHttp.send(null)
		}
}
getData();
</script>
<html><body><div id='block'> </div></body></html>


Encore un peu d'aide ? O:-)
Merci encore pour tout, dans tout les cas j'ai énormément avancé grâce à toi.
0
Alkaaran Messages postés 285 Date d'inscription dimanche 20 mai 2007 Statut Membre Dernière intervention 3 novembre 2009 37
11 juil. 2008 à 17:00
Aucun problème ! Voici la clé de ton bonheur :

remplace getData(); à la fin de ton script par :

window.onload = getData() ;

Explication :
lorsque getData() ; est seule en fin de script elle se déclenche... récupère les données du php... et essaie de mettre dans une boite du doux nom de block :p

Le problème c'est qu'elle est po la maligne ! Bah oui, ton navigateur n'a meme pas encore atteint la balise html !

Donc pour remédier à ce problème, on lui d'attendre que le chargement soit fini grâce à l'evénement window.onLoad

CQFD :)
0
xxkirastarothxx Messages postés 378 Date d'inscription vendredi 19 octobre 2007 Statut Membre Dernière intervention 22 mars 2013 40
15 juil. 2008 à 09:40
Merci pour tes réponses :)
j'ai changé "getData();" par "window.onload = getData();"
mais aucun changement, rien ne s'affiche :s

je reposte mon fichier au cas où:

affichage.php
<script type="text/javascript">
// retourne un objet xmlHttpRequest.
// méthode compatible entre tous les navigateurs (IE/Firefox/Opera)
function getXMLHTTP()
{
	var xhr=null;
	if(window.XMLHttpRequest) // Firefox et autres
	xhr = new XMLHttpRequest();
	else if(window.ActiveXObject)// Internet Explorer
	{ 
		try 
		{
			xhr = new ActiveXObject("Msxml2.XMLHTTP");
	    } 
		catch (e) 
		{
			try 
			{
				xhr = new ActiveXObject("Microsoft.XMLHTTP");
			}
			catch (e1)
			{
				xhr = null;
			}
	    }
	}
	else // XMLHttpRequest non supporté par le navigateur
	{ 
		alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");
	}
	return xhr;
}

var _xmlHttp = null; //l'objet xmlHttpRequest utilisé pour contacter le serveur
var _adresseRecherche = "chat.php" //l'adresse à interroger 

function getData()
{
	if(_xmlHttp&&_xmlHttp.readyState!=0)
	{
		_xmlHttp.abort()
	}
	_xmlHttp=getXMLHTTP();
	if(_xmlHttp)
		{
		    //appel à l'url distante
		    _xmlHttp.open("GET",_adresseRecherche,true);
		    _xmlHttp.onreadystatechange=function()
			{
			    if(_xmlHttp.readyState==4&&_xmlHttp.responseText)
				{
					document.getElementById( 'block' ) = _xmlHttp.responseText ;
			    }
		    };
		    // envoi de la requête
		    _xmlHttp.send(null)
		}
}
window.onload = getData();
</script>
<html>
	<body>
		<div id='block'> </div>
	</body>
</html>


chat.php:
<?php echo 'test1'; ?>
<p>test2</p>
0
Alkaaran Messages postés 285 Date d'inscription dimanche 20 mai 2007 Statut Membre Dernière intervention 3 novembre 2009 37
15 juil. 2008 à 11:59
Peut-être ta structure html alors... :-)

Il faudrait que tu respecte le standard :
<html>
	<head>
		<title>(Ton titre de page)</title>
		<script type="text/javascript">(Ton script)</script>
	</head>
	
	<body>
		(Ton texte)
	</body>
</html>
0
xxkirastarothxx Messages postés 378 Date d'inscription vendredi 19 octobre 2007 Statut Membre Dernière intervention 22 mars 2013 40
15 juil. 2008 à 13:17
c'est fait, j'ai remonté la balise <html>, j'ai mis le script entre les balises <head> et mon div id="block" dans le <body>, et j'ai également rajouter le <title> au cas ou;
mais nan ça veut rien savoir :S
toujours pas le moindre caractère d'affiché :(

le window.onload, il faut pas le placer dans les balise du div ? genre <div onload:"GetData();" id="block", j'en ai aucune idée mais je me rappelle avoir déjà vu ce genre de syntaxe.
0
Alkaaran Messages postés 285 Date d'inscription dimanche 20 mai 2007 Statut Membre Dernière intervention 3 novembre 2009 37
15 juil. 2008 à 13:50
est ce que ton site est en ligne actuellement ? Ca me permettrait de voir les eventuelles erreurs javascript...
0
Alkaaran Messages postés 285 Date d'inscription dimanche 20 mai 2007 Statut Membre Dernière intervention 3 novembre 2009 37
15 juil. 2008 à 13:53
Tiens a tout hasard... met .innerHTML juste après document.getElementById( 'block' )
0
xxkirastarothxx Messages postés 378 Date d'inscription vendredi 19 octobre 2007 Statut Membre Dernière intervention 22 mars 2013 40
15 juil. 2008 à 13:59
Yeah !!
à première vu ça marche.

Je vais continuer le développement du chat, et lorsqu'il serra fini:
1] je te tiendrais au courant du lien
2] Je te propose de laisser ta marque de développement dans le log si tu veux, tu m'as énormément aidé, donc c'est la moindre des choses :)

Je préfère pas donner le lien du site pour le moment, j'ai énormément de failles de secus, enfin je pense puisque je ne m'en suis absolument pas occupé ^^

Encore merci :)
0
Alkaaran Messages postés 285 Date d'inscription dimanche 20 mai 2007 Statut Membre Dernière intervention 3 novembre 2009 37
15 juil. 2008 à 14:03
Okay ravi de l'entendre, pour le log bah pourquoi pas, mais c'est du code open sauce que je t'ai donné...
Par contre je serai curieux de ton site :-) A la prochaine !

(n'oublie la petite option "résolu" ;-) )
0
Hello, permettez moi de m'incruster.
J'ai cru comprendre que ton script est censé appeler la page chat.php lorsqu'il y a de nouvelles entrées dans la base, me tromperais-je ?

Je l'ais essayé mais il n'actualise pas mes pages tout seul...

Parce que je recherche à faire en AJAX une actualisation de page lorsqu'il y a une nouvelle entrée dans la base de donnée. Un peu comme le principe des webradios qui actualises les artistes et titres lorsque la musique change.

Merci pour votre aide!
0