hlimaiem
Messages postés106Date d'inscriptiondimanche 19 mars 2006StatutMembreDernière intervention17 janvier 2007
-
10 mai 2006 à 04:47
hlimaiem
Messages postés106Date d'inscriptiondimanche 19 mars 2006StatutMembreDernière intervention17 janvier 2007
-
10 mai 2006 à 22:34
Limaiem heykel
Bonjour, j'ai un page php qui contient un tableau remplis depuis une base de donnees. Ma base et rempli a partir d'un programme en java qui ajoute des enregistrement dans ma base a temps variables. Donc je voudrait cree un ecouteur sur ma base de donnees qui me permet de rafraichir ma base quand des nouveaux enregistrement s y ajoutent, pour enfin rafraichir ma page web et de la les nouveau enregistrement seront visualiser.
Je suis encore debutant dans XMLHTTP request j'ai dut utiliser un code depuis le forum phpcs.com mais ca marche pas .
Voici ainsi le code de ma page php et ensuite le code de ma page ecouteur.php:
Page start,php qui afficher les donnees d'une requete dans un tableau
<?// ici les variables de session permettant la transmition des donnees session_start();
$heykel = "";
$heykel = "".$_SESSION['query'];
echo $heykel;
$great = 0;
mysql_connect("localhost","root","");
mysql_select_db("car");
$x = mysql_query("SELECT MAX(`index1`) AS heykel FROM voiture");
$mx = mysql_fetch_array($x);
<script language ="javascript">
xhr_url = 'admin/ecouteur.php';
old_xhr_response = '<? echo $_SESSION['maxim']; ?>';// Le maximu afficher dans la page pour permettre la comparaison si nouveau //enregistrement
// puisque mais donnees son indexer par ordre
function SendGetRequest() {
if ( window.XMLHttpRequest ) {
// Objet XmlHttpRequest pour les moteurs GECKO
xhr_object = new XMLHttpRequest();
} else if ( window.ActiveXObject ) {
// Objet XmlHttpRequest pour Internet Explorer
xhr_object = new ActiveXObject( 'Microsoft.XMLHTTP' );
} else {
// Navigateur non-compatible
alert( 'Votre navigateur ne supporte pas les objets XMLHTTPRequest...' );
return;
}
// On ouvre la requete vers la page désirée
xhr_object.open( 'GET', xhr_url, true );
// On lui donne le pointeur de fonction de retour
xhr_object.onreadystatechange = CallBackRequest;
// On envoi la requete
xhr_object.send( null );
}
function CallBackRequest() {
// Sur le retour de la requete, on teste son état
if ( xhr_object.readyState == 4 ) {
//il faut maintenant connaître la valeur de la dernière entrée de ta base de donnée :
if(xhr_object.ResponseText != old_xhr_response) {
old_xhr_response = xhr_object.ResponseText;
document.getElementById('<? echo $rtc; ?>').innerHTML = xhr_object.ResponseText;
[javascript:location.reload() ]// cette fonction permet le reload de la page si nouveau enregistrement (y a t il des fautes ds mon code????????)
}
}
}
SetInterval("SendGetRequest()",2000)
</script>
...// ici le tableau d'affichage depuis la base de donnees qui contient tous les variables Description,
Price,
Model,
Miletall,
$x = mysql_query("SELECT MAX(`index1`) AS heykel FROM voiture");
$mx = mysql_fetch_array($x);
$_SESSION['heykel1'] = $mx['heykel'];
echo $_SESSION['heykel1'];// pour envoyer la variable
?>
Merci enorment si vous pouvez m'aider a corriger ce code (je suis encore debutant en javascript)
A propos de documentation est ce que vous pouvez me fournir des liens contenant des cours ou des documentations sur ajax et xmlhttprequest.
Merci bq
Sinon, pour ton script, la variable xhr_object n'est pas defini au debut :
var xhr_object = null; // il faut le mettre car apres tu l'utilises dans une autre fonction "CallBackRequest()" et lui il ne connait pas xhr_object.
Il faut definir xhr_object comme étant une variable globale.
Au debut de la fonction SendGetRequest(), avant le if, met :
var xhr_object = null;
J'espere que ca passera, sinon je vois pas d'erreur,
A bon entendeur
Atlante34
hlimaiem
Messages postés106Date d'inscriptiondimanche 19 mars 2006StatutMembreDernière intervention17 janvier 2007 10 mai 2006 à 14:09
Bonjour, merci pour votre aide mais ca ne marche pas , j'ai
effectuer tous les changement que vous m'avez indiquer mais pas encore
il y a un probleme que j'ai pas su le localiser.
Je croit je vait m'expliquer : Vous m'avez indiquer d'utiliser une
page ecouteur qui permet d'emettre la nouvele variable saisie depuis ma
base de donnees pour la comparer dans ma page principale
avec le dernier index existant. Donc d'apres ce que j'ai lu il y 3 type de passage de valeurs : POST, GET ,HEADER ....
Je voudrait savoir s'il y un pb a ce niveau peut etre. Aussi je ne veux
rien afficher dans ma page je veux seulement la rafraichir completement
si un nouveu enregistrement me serai envoyer par la page ecouteur .
VOici mon code :
page start.php
<?
session_start();
$heykel = "";
$heykel = "".$_SESSION['query'];
echo $heykel;
$great = 0;
mysql_connect("localhost","root","");
mysql_select_db("car");
$x = mysql_query("SELECT MAX(`index1`) AS heykel FROM voiture");
xhr_object = new ActiveXObject( 'Microsoft.XMLHTTP' );
} else {
// Navigateur non-compatible
alert( 'Votre navigateur ne supporte pas les objets XMLHTTPRequest...' );
return;
}
// On ouvre la requete vers la page désirée
xhr_object.open( 'GET', xhr_url, true );//
Je doute que le mode de transmission de donnees n'est pa correct
puisque je ne transmet pas de donnees je veu seulement recupere le
dernier enregistrement de ma base et je croit que CallBackRequest
permet la comparaison de l'ancien index et le nouveau recuppere par la
page
// On lui donne le pointeur de fonction de retour
xhr_object.onreadystatechange = CallBackRequest;
// On envoi la requete
xhr_object.send( null );
}
function CallBackRequest() {
// Sur le retour de la requete, on teste son état
if ( xhr_object.readyState == 4 ) {
//il faut maintenant connaître la valeur de la dernière entrée de ta base de donnée :
atlante34
Messages postés14Date d'inscriptionlundi 16 janvier 2006StatutMembreDernière intervention24 janvier 2012 10 mai 2006 à 14:31
RE:
ce que je te disais a propos de la variable est que elle crée dans la fonction SendGetRequest() et que ensuite tu l'appelles dans CallBackRequest.
Met la dans :
function SendGetRequest() {
var xhr_object = null;
if ( window.XMLHttpRequest ) {
...
Deja une variable, en javascript c'est : var nom variable...
Donc:
var xhr_url = 'admin/ecouteur.php';
var old_xhr_response = '<? echo $_SESSION['maxim']; ?>';
pour simplifier:
xhr_object.open( "POST", "admin/ecouteur.php", true ); //post pour plus de securité
et tu rajoutes juste avant le xhr_object.send( null );
xhr_object.setRequestHeader("Content-type","application/x-www-form-urlencoded");
le location.reload() permet de rafraichir la page meme si elle n'a pas été modifiée (ca force le rafraichissement).Mais je ne pense pas que la mettre dans le javascript, ca marche comme ca.
a la place de javascript:location.reload(); met ca => window.location.reload()
---------------------------------------------------------------------------------
xhr_object.open( 'GET', xhr_url, true );// Je doute que le mode de transmission de donnees n'est pa correct puisque je ne transmet pas de donnees je veu seulement recupere le dernier enregistrement de ma base et je croit que CallBackRequest permet la comparaison de l'ancien index et le nouveau recuppere par la page
-------------------------------------------------------------------------------
le open demande juste le fichier, et le fait que tu mette xhr_object.send( null ); ca implique que tu n'envoi pas de données.
voici le code complet :
*********************************************.
<script language="javascript">
var old_xhr_response = null;
function SendGetRequest() {
var xhr_object = null;
if ( window.XMLHttpRequest ) {
// Objet XmlHttpRequest pour les moteurs GECKO
xhr_object = new XMLHttpRequest();
} else if ( window.ActiveXObject ) {
// Objet XmlHttpRequest pour Internet Explorer
xhr_object = new ActiveXObject( 'Microsoft.XMLHTTP' );
} else {
// Navigateur non-compatible
alert( 'Votre navigateur ne supporte pas les objets XMLHTTPRequest...' );
return;
}
xhr_object.open( "POST", "admin/ecouteur.php", true );
xhr_object.onreadystatechange = CallBackRequest;
xhr_object.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xhr_object.send( null );
}
function CallBackRequest() {
if ( xhr_object.readyState 4 && xhr_object.status 200)//tu vérifie a fond
{
if(xhr_object.ResponseText != old_xhr_response) {
old_xhr_response = xhr_object.ResponseText;
document.getElementById('contenu').innerHTML=xhr_object.ResponseText;
window.location.reload()
}
}
}
SetInterval("SendGetRequest()",10)
</script>
Honnetement, je fais ca de tete, je ne suis pas sur du résultat, mais esaye...
A bon entendeur,
Atlante34
hlimaiem
Messages postés106Date d'inscriptiondimanche 19 mars 2006StatutMembreDernière intervention17 janvier 2007 10 mai 2006 à 14:53
Limaiem heykel
Ca marche pas encore. Est ce que y a t il une autre solutions pour regler ce probleme moi ce que je souhaite obtenir et le rafraichissement de la page des que j'ai de nouveau enregistrement dans ma base donc seulement rafraichir je compare le plus grand index de ma page afficher avec celui que la page ecouteur renvoit si nouveau_enregistrement > ancien_afficher je rafraichit la page sinon pas de rafraichissement.
Merci
Vous n’avez pas trouvé la réponse que vous recherchez ?
atlante34
Messages postés14Date d'inscriptionlundi 16 janvier 2006StatutMembreDernière intervention24 janvier 2012 10 mai 2006 à 15:10
Salut, est ca que tu recoit bien tout ce qu'il faut?
essayes ca :
********************************
<script language="javascript">
var old_xhr_response = null;
function SendGetRequest() {
var xhr_object = null;
if ( window.XMLHttpRequest ) {
// Objet XmlHttpRequest pour les moteurs GECKO
xhr_object = new XMLHttpRequest();
} else if ( window.ActiveXObject ) {
// Objet XmlHttpRequest pour Internet Explorer
xhr_object = new ActiveXObject( 'Microsoft.XMLHTTP' );
} else {
// Navigateur non-compatible
alert( 'Votre navigateur ne supporte pas les objets XMLHTTPRequest...' );
return;
}
xhr_object.open( "POST", "admin/ecouteur.php", true );
xhr_object.onreadystatechange = function(){
if ( xhr_object.readyState 4 && xhr_object.status 200)//tu vérifie a fond
{
if(xhr_object.ResponseText != old_xhr_response) {
old_xhr_response = xhr_object.ResponseText;
alert("reception de\n"+xhr_object.ResponseText);
document.getElementById('contenu').innerHTML=xhr_object.ResponseText;
window.location.reload()
}
}
}
xhr_object.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xhr_object.send( null );
}
var chrono=setInterval("SendGetRequest()",10);//setinterval retourne qqchose
</script>
**********************************
Si je comprend bien tu veux que la page se rafraichisse des que il y a une modification de la BdD.
En effet lorsque (dans ce prog), tu lances la fonction , tu compares le contenu.
Mais la ce que tu compares c'est le contenu de la page .php
Quand tu fais : xhr_object.open( "POST", "admin/ecouteur.php", true );
tu recois le contenu de ecouteur.php(le code) est il va l'executer dans le div ou ce que tu as appellé ('contenu').
Regardes ce que tu recoit et dit moi ce que tu as recu ...
hlimaiem
Messages postés106Date d'inscriptiondimanche 19 mars 2006StatutMembreDernière intervention17 janvier 2007 10 mai 2006 à 22:34
Limaiem heykel
Bon j'ai essayer mais aparament on mettant une alerte l'instruction de rafraichissement ne fonctionne pas j'ai ajouter ; mais ca marche pas encore
window.location.reload();// donc je la remplace par koi???????
Et a propos de l'utilisation de var chrono=setInterval("SendGetRequest()",10); Je la declanche comment ???
Merci