× Aidez la recherche contre le COVID-19 avec votre ordi ! Rejoignez l'équipe PC Astuces Folding@home
 > Tous les forums > Forum des Webmasters
 Sur page PHP : méthode pour rafraîchir un div sous include en AjaxSujet résolu
Ajouter un message à la discussion
Pages : [1] 2 ... Fin
Page 1 sur 2 [Fin]
Jean-Pierre
  Posté le 06/09/2019 @ 12:35 
Aller en bas de la page 
Maître astucien

Je bosse sur un petit projet (miaouuuuuuu... ) et je sèche sur un point précis :

Je dois rafraîchir un div en include automatiquement. Sans rafraîchir la page PHP bien entendu.

La page sous div est en extension .doc. Elle comporte les messages issus de divers PC.

J'ai jeté mon dévolu sur la méthode Ajax (sans rapport avec GG hein )

J'ai testé des scripts plus ou moins complexes, mais en fin de compte assez décevants pour diverses raisons.

Voilà ; si vous avez une expérience en ce domaine avec un petit exemple à la clé pas trop compliqué, ce serait super, merci d'avance

JP



Modifié par Jean-Pierre le 06/09/2019 12:42
Publicité
zoulouman
 Posté le 06/09/2019 à 19:30 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Salut limace humide,

Te fais pas de souci pour ta page PHP, en include ou en require, elle ne se mettra pas à jour si tu sais ce que tu fais.

Par contre, pour afficher un fichier .doc, ça ne le fera jamais.
Le .doc est un format propriétaire Microsoft, rien n'est prévu pour l'afficher chez tout le monde sur un navigateur.

Il va falloir changer d'approche, le .doc ne fonctionnera jamais. Enfin, ça ne fonctionnera jamais de façon simple.

Tu remarqueras que je n'ai même pas parlé de Ajax. Dès le début tu t'es planté avec ton .doc, pas la peine d'évoquer Ajax...

Jean-Pierre
 Posté le 06/09/2019 à 19:48 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Maître astucien

Hello belle grosse grenouille non moins humide

Je suis des plus têtu et tu dois désormais le savoir via un autre post focalisé sur les formulaires.

Présentement je peux même formater (= CSS) le fichier .doc en include (si tu veux je te file the link via MP))

Regarde :



Je crois avoir enfin trouvé un excellent script :
https://codes-sources.commentcamarche.net/forum/affich-10009891-rafraichir-div-par-ajax

Je réussi à rafraîchir manuellement avec le "button".

Mais malheureusement pas encore en automatique.

Je vous montre le code "semi-fonctionnel (= ne fonctionnant qu'avec le button) :
("dodo.doc" c'est mon fichier de messages à rafraîchir et "id_test" c'est l'ID de l'include )

En <head> :

<script>
window.onload = function(){
val1t=0;
var g = new JustGage({
id: "val1t",
value: Math.round(val1t*100)/100 ,
min: 0,
max: 15,
title: "valeur 1",
label : "carottes",
levelColors: [
"#ff0000",
"#ffff33",
"#33ff33"
]
});
setInterval(function() {g.refresh(Math.round(val1t*100)/100);
}, 500);

setInterval("makeRequest('dodo.doc','id_test')",2000);
};
</script>


<script language="Javascript"type="text/JavaScript">
var val1t;

// Requette AJAX
function makeRequest(url,id_test){
var http_request = false;
//créer une instance (un objet) de la classe désirée fonctionnant sur plusieurs navigateurs
if (window.XMLHttpRequest) { // Mozilla, Safari,...
http_request = new XMLHttpRequest();
if (http_request.overrideMimeType) {
http_request.overrideMimeType('text/xml');//un appel de fonction supplémentaire pour écraser l'en-tête envoyé par le serveur, juste au cas où il ne s'agit pas de text/xml, pour certaines versions de navigateurs Mozilla
}
} else if (window.ActiveXObject) { // IE
try {
http_request = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
http_request = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {}
}
}

if (!http_request) {
alert('Abandon :( Impossible de créer une instance XMLHTTP');
return false;
}
http_request.onreadystatechange = function() { traitementReponse(http_request,id_test); } //affectation fonction appelée qd on recevra la reponse
// lancement de la requete
http_request.open('POST', url, true);
//changer le type MIME de la requête pour envoyer des données avec la méthode POST , !!!! cette ligne doit etre absolument apres http_request.open('POST'....
http_request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
data="292";
http_request.send(data);
}

function traitementReponse(http_request,id_test) {
var affich="";
if (http_request.readyState == 4) {
if (http_request.status == 200) {
// cas avec reponse de PHP en mode texte:
//chargement des elements reçus dans la liste
var affich_list=http_request.responseText;
obj = document.getElementById(id_test);
obj.innerHTML = affich_list;
var reg=new RegExp("[z]+", "g");
var tableau=affich_list.split(reg);
for (var i=0; i<tableau.length; i++) {
val1t=tableau[2]

}

}
else {
alert('Un problème est survenu avec la requête.');
}

}

}
</script>



En <body> le fameux button fonctionnant impec :

<input type="button" name="toto" value="Refraich" onclick="makeRequest('dodo.doc','id_test')"/> <br />




Mon formulaire ici...
.../...



Sous ce formulaire ceci :

<div id="id_test">
<?php
// On intègre le fichier d'enregistrement
include("dodo.doc");
?>
</div>



Et voilà, je cherche quelle marche ai-je loupée...

Merci de vos lumières








midnightblue
 Posté le 06/09/2019 à 19:51 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

EN 2005, j'avais fait un petit chat tout simple. Uniquement PHP et HTML en trois fichiers. Un fichier pour envoyer les messages, un fichier de lecture inclus dans le premier, et un fichier de données à plat au format .txt

En voila le codage schématique.

FICHIER 1

ecritureduchat.php

<?php

// Initialisation
if(empty($_POST["ok"]))$_POST["ok"]="";
if(empty($_POST["message"]))$_POST["message"]="";
//*********************************************

//Traitement
$_POST["message"]=strip_tags($_POST["message"]);
$_POST["message"]=str_replace("\n","<br>",$_POST["message"]);
//*********************************************

// Ecriture
$fp=fopen("chat.txt","a+");
fwrite($fp,$_POST["message"]."\n");
fclose($fp);
//*********************************************
?>

<iframe src="lectureduchat.php"></iframe>

<form method="post">
<textarea name="message"></textarea>
<input type="submit" name="ok" value="ENVOYER">
</form>

FICHIER 2

lectureduchat.php

<!doctype html>
<head>
<title>Chat</title>
<meta http-equiv="refresh" content="4;lectureduchat.php">
</head>
<body>

<?php
$fichier="chat.txt";
$f=file($fichier);
for($i=0;$i<count($f);$i++){
$f[$i]=str_replace("\n","<br>",$f[$i]);
echo $f[$i]."<hr>";
}
?>

</body>
</html>

FICHIER 3

chat.txt

Se crée au fur et à mesure de la progression du chat...

******

Miaou...moins de 40 lignes ! On peut of course améliorer.

*µ*

Jean-Pierre
 Posté le 06/09/2019 à 20:02 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Maître astucien

miaouuuuuu !

Merci midnightblue de ton idée.

Oui mais ça rafraichi TOUTE ta page non ?

De toute façon demain je vais tester la/ta bête

zoulouman
 Posté le 06/09/2019 à 20:15 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Le rafraîchissement n'est pas le problème. Avec une requête Ajax, c'est simple à obtenir.
C'est l'affichage d'un fichier .doc qui ne marchera pas !

Le web n'a pas été conçu pour la suite Microsoft Office et c'est tant mieux !

Jean-Pierre
 Posté le 06/09/2019 à 20:25 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Maître astucien

Oui mais pourquoi le rafraichissement fonctionne nickel via le "button" de ces functions JS ?

Si je te crois, alors ça devrait fonctionner en automatique avec un fichier PHP en remplacement du .doc ?


Mais têtu comme je suis je vais concocter (si je ne réussi pas) à commander cela via un script cliquant à intervalles réguliers sur ce button.

Mais bon...ça ferait un peu bidouille.



Modifié par Jean-Pierre le 06/09/2019 20:29
zoulouman
 Posté le 06/09/2019 à 20:29 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Tu veux afficher du PHP(HTML au final) en remplacement du .doc ?!
Mais qu'est-ce que tu branles ?!

Tu veux quoi au juste ?
C'est ton histoire de chat ?

Jean-Pierre
 Posté le 06/09/2019 à 20:31 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Maître astucien

Miaouuuuuuuuuuuuuuuuuuuu oui !

Je te file the link en MP et tu verras le .doc formaté

C'est impossible, mais pôô avec ma limace qui programme à ma place

Publicité
zoulouman
 Posté le 06/09/2019 à 20:47 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

J'ai pas encore regardé mes MP, j'ai faim, je vais bientôt couper.

Mais pourquoi un bouton pour actualiser ?
Tu sais que avec jQuery/Ajax, tu peux créer un timer dans une fonction qui actualisera le contenu que tu veux dans la page mais pas la page entière. Actualiser une DIV par exemple.

Regarde ici : https://stackoverflow.com/questions/25446628/ajax-jquery-refresh-div-every-5-seconds

Je te mettrais bien du code ici, mais avec PCA c'est impossible, à chaque fois c'est illisible et affreux comme tout !
Pourtant, c'est juste un javascript supplémentaire à charger, c'est tout.

Jean-Pierre
 Posté le 06/09/2019 à 23:10 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Maître astucien

Le bouton pour actualiser est simplement une sorte de test et de ctrl en fait.

Puisque c'est possible avec ce bouton ; je ne vois pas pourquoi...

Oui des codes comme ton exemple sont bien sauf qu'ainsi qu'indiqué en haut, je ne souhaite aucunes références/appels GG :

src="http://ajax.googleapis.com/ajax/libs

Quand tu iras sur le lien MP, tu verras le résultat et tu pourras en déduire que c'est possible ; mais manque un petit quelque chose qui débloque la situation.

Bonne nuit et évite de coasser trop fort

Ma limace elle, ne produit aucun bruit (Hein ? oui elle bave et alors )

Jean-Pierre
 Posté le 07/09/2019 à 00:59 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Maître astucien

Victoire!!!

Je savais biens que j'avais loupé un truc.

Il étais bien dit sur LA DERNIÈRE LIGNE. Et non l'avant dernière

setInterval("makeRequest('dodo.doc','id_test')",2000);
</script>

C'était impossible de rafraichir un div sous include en Ajax avec un appel en .doc, hein ? qui qui a dit ça ?

INPF

Double ration de laitue pour ma limace !

zoulouman
 Posté le 07/09/2019 à 15:02 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Ben oui, depuis j'ai vu.
Ton .doc n'est pas au format office mais au format text/plain, du coup ça pourrait être un .dtc que ce serait pareil.

Il faut juste déclarer le type/mime dans Apache pour éviter les soucis.
AddType text/plain .doc

Jean-Pierre
 Posté le 07/09/2019 à 18:01 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Maître astucien

En fait je n'ai pôôô et jamais réussi à rafraichir automatiquement le div en Ajax toutes les 4 secondes...

Un secret : c'est ma limace qui le fait toute seule et tapotant de toutes ses petites forces sur le pavé F5 à cette fréquence.

En plus grosse méchante, en cours des diverses épreuves sur mon apache, ma limace avait tellement peur de cette attaque, qu'elle est venue se réfugier tout contre moi.

Elle d'habitude fait la fiérottee, et est même du gente intrépide au possible.

Elle tremblait de ton son petit corps.

Bref, tu lui as flanqué une sacré frousse.

Si elle avait eu des dents ; elle les aurait claqués.

Grande méchante va !


Autre registre :

Je vais échanger l'extension .doc contre une .txt ; confirme-moi que tout sera mieux ainsi, sans aller bidouiller ailleurs.

zoulouman
 Posté le 07/09/2019 à 18:58 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

C'est pas la peine de changer en .txt, vu que c'est juste pour un usage interne. Le .doc surprend juste un peu, c'est pas le format utilisé habituellement.
Pour ce type de données texte, j'aime bien le .dat (comme data).

Par contre, il faut faire gaffe que le fichier ne soit pas accessible directement depuis le net, par exemple : example.com/mon_chat.dat
Il faut donner un CHMOD 660 au fichier au minimum.

Tu peux aussi en interdire l'accès avec un .htaccess : (je te donne un bonus avec )

RewriteCond %{REQUEST_URI} ^(.*\.(htaccess|htpasswd|bak|co?nf|crt|dat|dist|fla|in[ci]|key|log|pem|php~|psd|save|sh|sql|sw[op]))$ [NC]
RewriteRule .* - [F]

Jean-Pierre
 Posté le 07/09/2019 à 19:09 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Maître astucien

Bon, et si je renomme en .dat, c'est mieux alors ?

Je vais voir en CHMOD 660 si c'est OK.

zoulouman
 Posté le 07/09/2019 à 19:34 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Mais pourquoi je reçois pas les notifications bon dieu de bon dieu ?!!!

Non, c'est pas mieux, c'est comme tu veux. Les extensions de fichiers, quand c'est utilisé en interne, c'est comme on veut. Par contre, vu que ça aparait dans ton code, sur le formulaire, le .dat fait un peu plus "sérieux".

Du coup, je pense à un truc, vu que ton fichier est sollicité par le formulaire, ne modifie pas son CHMOD. Sinon il ne sera plus accessible...
Avec un CHMOD en xx0, tu peux modifier les fichiers depuis PHP mais pas depuis HTML...

Publicité
Jean-Pierre
 Posté le 07/09/2019 à 19:42 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Maître astucien

Ici les notifs suivants les moments, ça patine des fois...

Le CHMOD du .doc est en 666.

Tu mettrais quoi ?

Jean-Pierre
 Posté le 07/09/2019 à 20:17 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Maître astucien

Oupssss j'avais lu en travers :

J'ai affecté 660 en CHMOD.

Remis en 666 car ça fichait le binz en requête !



Modifié par Jean-Pierre le 07/09/2019 20:21
zoulouman
 Posté le 07/09/2019 à 20:21 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

666, c'est bien.
Le minimum est 644 pour que le fichier reste lisible sur le net. Et encore, ça dépend des hébergeurs...
Avec certains, ça marchera très bien en 644 et avec d'autres tu seras emmerdé pour accéder au fichier, d'où le 666
Pourtant, le CHMOD répond à une règle simple. Trois chiffres : Propriétaire, Groupe, tout le monde. C'est pas sorcier quand même ! Et ben non, certains hébergeurs n'y arrivent pas...

Bon, eh, oh ! Je veux savoir pourquoi je ne reçois pas les notifs du sujet !!!
Avec les autres ça marche mais pas avec celui ci !
La limace !!! Attrape moi Clément et apporte moi le par la peau du cul avec tes dents bien affûtées !

Jean-Pierre
 Posté le 07/09/2019 à 21:13 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Maître astucien

Ouuuuuuuuuhhhhhhhhhhh non moi pauvre petite limacette, zé pas de dents môâ


Si tu reviens en miaouuuuuuuu : faudra rafraichir ta page, sinon tu verras des messages d'erreurs de requêtes.

Le nombre de ces requêtes en fonctions des nouveaux chattages



Modifié par Jean-Pierre le 07/09/2019 21:25
zoulouman
 Posté le 07/09/2019 à 21:27 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Hein ?
J'ai rien compris. Le nombre des requêtes en fonction des chattages ?

Je régresse, je deviens fou.

Jean-Pierre
 Posté le 07/09/2019 à 21:29 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Maître astucien

Tu verras bien si tu reviens au miaouuuuuuuuuuuu...

J'avais pensé une attaque en premier

zoulouman
 Posté le 08/09/2019 à 18:10 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Ca en est où ici ?

Jean-Pierre
 Posté le 08/09/2019 à 18:39 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Maître astucien

Pour l'instant c'est comme la rentrée ; même le dimanche...

Ce matin j'avais commencé à me pencher sur l'anti-f****, mais été dérangé et demain sera chargé aussi.

Arffff et le temps passe trop vite.

Mais pour l'instant je m'amuse un peu au côté custom et nettoyage du code ; j'aime pas le bord**.

J'ai exporté les JS en fichier. J'ai ajouté une image tu peux voir le relooking.

Comme demain la journée sera chargée, faut pas que je me lance dans un truc à prise de citron sur des heures.

Nous butinons, moi et ma limace au fil de nos idées.

@ +

Oupsss, elle me dit de bisouiller sa grosse copine grenouille verte.

zoulouman
 Posté le 08/09/2019 à 19:56 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Prends ton temps, mais fait ça bien.

Grosse léchouille à la limace.

Publicité
Pages : [1] 2 ... Fin
Page 1 sur 2 [Fin]

Vous devez être connecté pour poster des messages. Cliquez ici pour vous identifier.

Vous n'avez pas de compte ? Créez-en un gratuitement !


Les bons plans du moment PC Astuces

Tous les Bons Plans
21,91 €Souris sans fil Logitech M280 à 21,91 €
Valable jusqu'au 25 Septembre

Amazon fait une petite promotion sur la souris sans fil Logitech M280 qui passe à 21,91 €. On la trouve ailleurs à partir de 30 €. Sa forme profilée est adaptée aux droitiers. Son autonomie est de 18 mois (pile AA que vous pourrez remplacer).


> Voir l'offre
200,04 €SSD SanDisk Ultra 3D 2 To à 200,04 € livré
Valable jusqu'au 26 Septembre

Amazon Allemagne fait une belle promotion sur le SSD SanDisk Ultra 3D d'une capacité de 2 To qui passe à 195,52 €. Comptez 4,52 € pour la livraison en France, soit un total de 200,04 € livré. On le trouve ailleurs autour de 260 €. Une bonne affaire pour ce SSD performant qui offre des débits de 560 Mo/s en lecture et 530 Mo/s en écriture. Cette version est garantie 3 ans.

Vous pouvez utiliser votre compte Amazon France sur Amazon Allemagne et il n'y a pas de douane. Si vous êtes perdu en allemand, vous pouvez traduire le site en anglais.


> Voir l'offre
69 €SSD Samsung 860 EVO 500 Go à 69 €
Valable jusqu'au 26 Septembre

Amazon fait une promotion sur le SSD Samsung 860 EVO 500 Go qui passe à 69 € livré gratuitement alors qu'on le trouve ailleurs à partir de 80 €. Ce SSD offre des vitesses de 560 Mo/s en lecture et 520 Mo/s en écriture. Il est garanti 5 ans. Une bonne affaire.


> Voir l'offre

Sujets relatifs
Rafraichir la page pour relancer une animation
Quel logiciel pour mettre en page une page web ?
meilleure méthode pour faire des calculs de disponibilité
créer un site ---- Aircus.com vous en pensez quoi pour une page WEB ?
Page htlm pour toutes résolutions d'écran
Page web pour entreprise
taille page pour iframe
mot de passe pour accéder une page html
Créer un code pour page fan Facebook
Largeur d'une page pour un site
Plus de sujets relatifs à Sur page PHP : méthode pour rafraîchir un div sous include en Ajax
 > Tous les forums > Forum Forum des Webmasters