Bonsoir à tous
J'ai le formulaire suivant:

<form id="actionForm" enctype="multipart/form-data;charset=UTF-8" action="@edit-save.php" method="post" target="_blank">
    <input type="hidden" id="filepath" name="filepath" value="...">">
    <input id="action" name="action" type="hidden" value="display">
    <textarea id="content" name="content"></textarea>
    <button type="button" onclick="displayFile()">Afficher</button>
    <button type="button" onclick="saveFile()">Sauver</button>
</form>

L'attribut target="_blank" est là pour que le résultat s'affiche dans un nouvel onglet, car, comme le plupart des gens, j'ai configuré mon navigateur pour ouvrir les liens et autres dans des onglets et pas dans une nouvelle fenêtre.
Il se trouve que dans ce cas précis je préférerais que le résultat s'affiche dans une nouvelle fenêtre.
La solution à laquelle je pense, c'est de faire un window.open() en mettant dans les paramètres des choses du genre left=0,top=20,width=100,height=100... ce qui provoque l'ouverture d'un popup.
Mais pour faire cela, je ne peux pas utiliser la méthode d'un formulaire, je dois faire que les boutons au lieu de "submit'()" fassent "window.open()', ce qui n'est pas très compliqué, mais surtout que mes paramètres filepath, action et content soient encodés proprement dans l'url, laquelle url va devenir énorme car content contient en pratique tout le HTML d'une page...
Cela m'effraie un peu
Bref, j'aimerais savoir comment faire ça à moindre frais.

Merci de vos conseils.
Modifié par PapyJP (04 Aug 2017 - 19:32)
Bonjour, a toi, pas besoins de te donner trop d'explications Smiley cligne
Juste ton FORM doit appeler une fonction Javascript,en passant bien sur les paramétres (POST)
dans la fonction tu appelles alors ton PHP par

.........
open('ton_pop.php?UnPost=cate01', 'Popup', 'scrollbars=1,resizable=1,height=560,width=750'); return false;
Merci Christele, je vais essayer de manipuler ça.
Il m'est venu (durant la nuit) l'idée que mon problème était un peu différent de ce que j'estimais hier soir.
En fait, j'ai deux pages affichées, sur deux écrans (ou deux parties d'écran) distincts, l'une affichant un source HTML, l'autre le résultat de la page.
Plutôt que d'ouvrir à chaque modif une nouvelle page "résultat", je vais essayer de synchroniser les deux pages, c'est à dire:
1) dans l'ouverture de la page "source", créer la page "résultat" avec la technique de popup en question
2) à chaque modification enregistrée (ça se fait en gros paragraphe par paragraphe), envoyer le résultat au serveur, qui va garer les infos pertinentes dans une session, puis faire un reload()sur la page "résultat", qui ira rechercher les infos dans la session

Conceptuellement, ça a l'air de tenir la route.
Je vais essayer de faire marcher ça...

C'est bien d'être retraité, on a le temps de s'instruire Smiley biggrin
Bon courage, jeune retraité Smiley cligne
Je repasserai aux nouvelles voir si ça va ! mais tel que tu décrit je ferait en AJAX sur une page avec 3 DIV ?
Christele a écrit :
Bon courage, jeune retraité Smiley cligne
Je repasserai aux nouvelles voir si ça va ! mais tel que tu décrit je ferait en AJAX sur une page avec 3 DIV ?

J'ai d'abord essayé de faire une solution AJAX, mais je me heurte au problème suivant: la page "résultat" n'est pas simplement du bon HTML des familles, elle est soumise au chargement à des traitements complexes en JavaScript qui manipulent le DOM pour produire finalement la page désirée. A chaque modif, il faut recalculer la page à partir du source modifié, en exécutant les scripts contenus dans le <head> de la page et ceux qui sont déclenchés par <body onload="...">, c'est à dire faire un document.reload(), et donc
1) la
Sauf s'il y a quelque chose que je n'aie pas vu (et j'espère que c'est le cas), je ne vois pas comment surmonter ce problème.

Désolé de ne pas pouvoir donner accès à cette partie du site, c'est dans le répertoire "admin" qui est nécessaire protégé.
Regarde simplement une page comme http://tests.osirisnet.net/tombes/nobles/amenemhat82/amenemhat82_01.htm qui est celle qui me sert pour mes tests: regarde le source d'une part, l'état du DOM d'autre part, ça te donnera une idée de la nature du problème.
Chaque fois que je fais une modification dans le HTML "source", je ne vois pas comment faire en sorte que cette modification soit répercutée dans ce qui s'affiche dans "résultat" sans faire appel au serveur pour prendre en compte la modification, regénérer un fichier source modifié, l'envoyer dans une fenêtre ou une <iframe> de façon que tout le processus de calcul se déroule à nouveau.

Je sais bien que la techno qui consiste à manipuler le DOM par JavaScript peut sembler étrange, et qu'il serait sans doute préférable de faire une génération plus complète en PHP, mais ça irait contre les habitudes du propriétaire du site, qui a déjà assez de mal à s'habituer à utiliser des balises autres que <table> (et ses enfants), <a>, <img>, <span> et quelque rares autres dont il a appris le fonctionnement en 2001.
On ne peut pas demander à un ancien médecin, devenu expert en égyptologie, de devenir en plus un développeur WEB tout terrain.
Quand je vois le boulot que ça m'a demandé pour faire la migration de ce site... et pourtant toute ma carrière professionnelle s'est faite dans l'informatique, dont la plus grande partie dans le développement de systèmes.
En faisant des recherches sur AJAX POST je trouve des références aux objets FormData et Blob
Auriez vous l'expérience de l'utilisation de ces objets?
PapyJP a écrit :
En faisant des recherches sur AJAX POST je trouve des références aux objets FormData et Blob
Auriez vous l'expérience de l'utilisation de ces objets?

Personne n'ayant répondu à mon précédent message, je signale que FormData est un moyen très intéressant de lancer une requête AJAX en mode POST, ce qui est nécessaire quand on a un texte très long à faire remonter au serveur.
Ce que j'ai fait {i](ce qui ne veut pas dire qu'il n'y a pas mieux à faire!):
<form id="actionForm" enctype="multipart/form-data;charset=UTF-8" action="edit-page.php>" method="post">
    <input type="hidden" id="filepath" name="filepath" value=".....">
    <input id="action" name="action" type="hidden" value="">
    <textarea id="content" name="content"></textarea>
</form>

Sur certains évènements, le programme JavaScript met ce qu'il faut dans les <input> et <textarea> puis appelle le script suivant:

function sendForm(form, whenDone) {
	var xhr = new XMLHttpRequest();
	xhr.whenDone = whenDone;  //extension perso, pour stocker dans l'objet la fonction à appeler en fin de traitement
	xhr.onreadystatechange = function() {
		if(this.readyState == 4 && this.status == 200) {
			if(this.responseText == 'done') this.whenDone();
			else alert(this.responseText);
		}
	}
	xhr.open("POST", form.getAttribute('action'));
	xhr.send(new FormData(form));
}

C'est bien entendu la dernière ligne qui est la plus intéressante: l'objet FormData s'initialise à partir de <form>, et la méthode send() effectue le codage nécessaire.