Rechercher : dans
Par :

[Ajax+PHP] Refresh et MySQL

Dernière réponse le 7 sep 2008 à 11:19:02 xxkirastarothxx, le 11 jui 2008 à 12:04:09 
 Signaler ce message aux modérateurs

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 :)
Configuration: Windows XP
Firefox 2.0.0.15

Meilleures réponses pour « [Ajax+PHP] Refresh et MySQL » dans :
Installation de Mantis Bug Tracker VoirMantis BT est un outil de gestion d'événements (ou bug tracker en anglais) Open Source. L'outil est écrit en PHP et s'appuie sur une base de données. La base de données recommandée pour l'exécution de Mantis est mysql. Pré-requis...
PHP - Bases de données VoirPhp permet un interfaçage très simple avec un grand nombre de bases de données. Lorsqu'une base de données n'est pas directement supportée par Php, il est possible d'utiliser un driver ODBC, pilote standard pour communiquer avec les bases de...
Installation d'un serveur Web sous Linux (Apache, PHP et MySQL) VoirIntroduction Un serveur web est un logiciel permettant de rendre accessibles à de nombreux ordinateurs (les clients) des pages web stockées sur le disque. Cette fiche pratique explique comment installer le serveur web Apache sur un système de type...

1

Alkaaran, le 11 jui 2008 à 12:35:29

Il nous faudrai ton fichier './xajax_core/xajax.inc.php', c'est lui le principal concerné :)

Répondre à Alkaaran

2

xxkirastarothxx, le 11 jui 2008 à 12:45:24

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 ^^

Répondre à xxkirastarothxx

3

Alkaaran, le 11 jui 2008 à 13:28:04

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 :)
http://www.siteduzero.com/tuto-3-3804-1-les-objets-xmlhttprequest.html
http://www.toutjavascript.com/savoir/xmlhttprequest.php3
http://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 =)

Répondre à Alkaaran

4

xxkirastarothxx, le 11 jui 2008 à 13:41:36

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 :)

Répondre à xxkirastarothxx

5

Alkaaran, le 11 jui 2008 à 13:51:15

De quel fichier tu parle ? le script js ?

Répondre à Alkaaran

6

xxkirastarothxx, le 11 jui 2008 à 13:57:39

Oui ^^

Répondre à xxkirastarothxx

7

Alkaaran, le 11 jui 2008 à 14:04:35

// 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 :)

Répondre à Alkaaran

8

xxkirastarothxx, le 11 jui 2008 à 14:36:42

Hmmm effectivement ça a l'air interessant.
Je vais me pencher la dessus cette après midi, je repasserais dans la soirée.
Merci :)

Répondre à xxkirastarothxx

9

xxkirastarothxx, le 11 jui 2008 à 15:54: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.

Répondre à xxkirastarothxx

10

Alkaaran, le 11 jui 2008 à 15:59:10

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 ;

:)

Répondre à Alkaaran

11

xxkirastarothxx, le 11 jui 2008 à 16:50:09

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.

Répondre à xxkirastarothxx

12

Alkaaran, le 11 jui 2008 à 17:00:58

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 :)

Répondre à Alkaaran

13

xxkirastarothxx, le 15 jui 2008 à 09:40:12

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>

Répondre à xxkirastarothxx

14

Alkaaran, le 15 jui 2008 à 11:59:37

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>

Répondre à Alkaaran

15

xxkirastarothxx, le 15 jui 2008 à 13:17:01

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.

Répondre à xxkirastarothxx

16

Alkaaran, le 15 jui 2008 à 13:50:58

Est ce que ton site est en ligne actuellement ? Ca me permettrait de voir les eventuelles erreurs javascript...

Répondre à Alkaaran

17

Alkaaran, le 15 jui 2008 à 13:53:15

Tiens a tout hasard... met .innerHTML juste après document.getElementById( 'block' )

Répondre à Alkaaran

18

xxkirastarothxx, le 15 jui 2008 à 13:59:02

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 :)

Répondre à xxkirastarothxx

19

Alkaaran, le 15 jui 2008 à 14:03:02

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" ;-) )

Répondre à Alkaaran

20

 vct, le 7 sep 2008 à 11:19:02

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!

Répondre à vct