Précédent   Forum des professionnels en informatique > PHP > Langage > Formulaires
Formulaires Forum d'entraide sur les formulaires avec PHP. Avant de poster -> FAQ formulaires, Cours de formulaires et Sources de formulaires
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 22/05/2007, 13h12   #1
Candidat au titre de Membre du Club
 
Inscription : février 2007
Messages : 54
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 54
Points : 11
Points : 11
Par défaut [PHP-JS] Php et javascript

Bonjour,
Je suis entrain de developper un intranet.
J'ai un petit soucis en fait j'envoie des données via javascript vers un fichier php. Le problème c'est quand j'affiche le contenu de POST il n'y a rien aucune donnée n'a été transmise.
Vous trouverez ici le code que j'ai fait:

La fonction Javascript:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function envoie(data){
 
			if(window.XMLHttpRequest) {xhr_object = new XMLHttpRequest(); alert("début");}
					else if(window.ActiveXObject){ xhr_object = new ActiveXObject("Microsoft.XMLHTTP");  alert("milieu");}
				else {
						  alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");
						   return;
						}
                        alert(data);
						xhr_object.open("POST", "essai.php");
						xhr_object.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
			            xhr_object.send(data);
			            alert(data);
 
 
 }

ou on l'appele dans le fichier Html:
Code :
<li><a  href="essai.php" target="sujet" onClick="javascript:envoie('comprdecomp');"  >Comporesion/Décompression</a></li>
et le code PHP pour tester: je l'ai developpé juste pour savoir si je reçois quelque chose:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
 
	header('Content-type: text/html; charset=iso-8859-1');
    if(count($_POST) > 0) {
	    echo "Données reçues en POST:";
	    foreach($_POST as $v)
	      echo strrev(utf8_decode($v)).":";
	 }else
	 {
	  echo 'Aucune donnée n\'a été reçue par "'.basename($_SERVER["PHP_SELF"]).'"...';
	  }
 
?>

Merci d'avance
c.betty est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/05/2007, 13h24   #2
Membre confirmé
 
Inscription : avril 2007
Messages : 254
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 254
Points : 262
Points : 262
C'est un problème AJAX et non php. En fait, tu n'attends pas la réponse que t'envoie essai.php. Il faut utiliser xhr_object.onreadystatechange.
__________________
Quand un problème a une solution, rien ne sert de s'inquiéter. Quand il n'y a pas de solution, s'inquiéter n'arrange rien.
Ouach est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/05/2007, 13h25   #3
Membre Expert
 
Avatar de eric.pommereau
 
Homme ERIC POMMEREAU
Ingénieur intégration
Inscription : décembre 2004
Messages : 683
Détails du profil
Informations personnelles :
Nom : Homme ERIC POMMEREAU
Âge : 38
Localisation : France

Informations professionnelles :
Activité : Ingénieur intégration
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : décembre 2004
Messages : 683
Points : 1 294
Points : 1 294
Bonjour,

Si l'alert javascript s'éxécute, quel est précisément le message de ton 'alert(data);' ?
eric.pommereau est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/05/2007, 13h39   #4
Candidat au titre de Membre du Club
 
Inscription : février 2007
Messages : 54
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 54
Points : 11
Points : 11
le premier alert affiche milieu et les deux autres comprdecomp
c.betty est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/05/2007, 13h46   #5
Candidat au titre de Membre du Club
 
Inscription : février 2007
Messages : 54
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 54
Points : 11
Points : 11
quand je mets ça :
Code :
1
2
3
xhr_object.onreadystatechange = function() {
						   if(xhr_object.readyState == 4) alert(xhr_object.responseText);
						}
il s'affiche un alert avec aucune donnée n'a été transmise
c.betty est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/05/2007, 14h15   #6
Membre confirmé
 
Inscription : avril 2007
Messages : 254
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 254
Points : 262
Points : 262
Il faut encore teste le status 200
Code :
1
2
3
4
5
6
7
if(xhr_object.readyState == 4)
{
  if (xhr_object.status == 200)
  {
    alert(xhr_object.responseText);
  }
}
On avance.
__________________
Quand un problème a une solution, rien ne sert de s'inquiéter. Quand il n'y a pas de solution, s'inquiéter n'arrange rien.
Ouach est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/05/2007, 14h36   #7
Candidat au titre de Membre du Club
 
Inscription : février 2007
Messages : 54
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 54
Points : 11
Points : 11
avec ça : l'alert sui il y a au milieu ne s'affiche pas.
c.betty est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/05/2007, 14h45   #8
Membre confirmé
 
Inscription : avril 2007
Messages : 254
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 254
Points : 262
Points : 262
Remets le code de la fonction envoyer qu'on y voit plus claire.
__________________
Quand un problème a une solution, rien ne sert de s'inquiéter. Quand il n'y a pas de solution, s'inquiéter n'arrange rien.
Ouach est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/05/2007, 14h48   #9
Candidat au titre de Membre du Club
 
Inscription : février 2007
Messages : 54
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 54
Points : 11
Points : 11
Voila :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
function envoie(data){
 
			if(window.XMLHttpRequest) {xhr_object = new XMLHttpRequest(); alert("début");}
					else if(window.ActiveXObject){ xhr_object = new ActiveXObject("Microsoft.XMLHTTP");  alert("milieu");}
				else {
						  alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");
						   return;
						}
 
						if(xhr_object.readyState == 4)
						{
						  if (xhr_object.status == 200)
						  {
						    alert(xhr_object.responseText);
						  }
						}
 
 
						xhr_object.open("POST", "essai.php");
						xhr_object.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
			            xhr_object.send(data);
 
 
 }
c.betty est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/05/2007, 15h09   #10
Membre confirmé
 
Inscription : avril 2007
Messages : 254
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 254
Points : 262
Points : 262
Essaie un peu ceci (je n'ai pas testé)
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
function envoie(data)
{
	if(window.XMLHttpRequest) 
	{
	  xhr_object = new XMLHttpRequest(); alert("début");
	}
	else if(window.ActiveXObject)
	{ 
	  xhr_object = new ActiveXObject("Microsoft.XMLHTTP");  alert("milieu");
	}
	else 
	{
	  alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");
	  return;
	}
	xhr_object.open("POST", "essai.php");
	xhr_object.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
	if(xhr_object.readyState == 4)
	{
	  if (xhr_object.status == 200)
	  {
		alert(xhr_object.responseText);
	  }
	}
	xhr_object.send(data);
 }
Il faut envoyer la demande à essai.php puis attendre sa réponse.
__________________
Quand un problème a une solution, rien ne sert de s'inquiéter. Quand il n'y a pas de solution, s'inquiéter n'arrange rien.
Ouach est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/05/2007, 15h14   #11
Candidat au titre de Membre du Club
 
Inscription : février 2007
Messages : 54
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 54
Points : 11
Points : 11
ça donne le même résultat que avant. ça n'a rien changé. Le alert ne s'affiche pas .
c.betty est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/05/2007, 15h29   #12
Membre confirmé
 
Inscription : avril 2007
Messages : 254
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 254
Points : 262
Points : 262
onreadystatechange a disparu de ton code...
Bon voici comment cela fonctionne chez moi
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
function handleHttpResponse(objhttp) 
{
	if (objhttp.readyState == 4) 
	{
		if (objhttp.status == 200) 
		{
			alert(objhttp.responseText);//Pour visualiser le contenu de la réponse.
		}
	}
}
function envoie(url) 
{
	var xhr_object = getHTTPObject();
	xhr_object.open("POST", "essai.php", true);
	xhr_object.onreadystatechange = function() 
	{ 
		handleHttpResponse(xhr_object); 
	}
	xhr_object.send(null);
}
__________________
Quand un problème a une solution, rien ne sert de s'inquiéter. Quand il n'y a pas de solution, s'inquiéter n'arrange rien.
Ouach est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/05/2007, 15h35   #13
Candidat au titre de Membre du Club
 
Inscription : février 2007
Messages : 54
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 54
Points : 11
Points : 11
xhr_object.send(null); je l'ai changé en xhr_object.send(url);
bon ça donne le même résultat l'alert ne s'exécute pas.
Et donc quand le fichier essai.php s'affiche il dit qu'il n'y a aucune donnée transmise.
Voila
c.betty est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/05/2007, 16h09   #14
Membre confirmé
 
Inscription : avril 2007
Messages : 254
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 254
Points : 262
Points : 262
Sorry, sorry j'utilise le get plutôt que le post.
Donc:
Code :
	xhr_object.open("GET", "essai.php?param1="+var1+"&param2="+var2, true);
Et dans essai.php
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
 
	header('Content-type: text/html; charset=iso-8859-1');
    if(count($_GET) > 0) {
	    echo "Données reçues en GET:";
	    foreach($_GET as $v)
	      echo strrev(utf8_decode($v)).":";
	 }else
	 {
	  echo 'Aucune donnée n\'a été reçue par "'.basename($_SERVER["PHP_SELF"]).'"...';
	  }
 
?>
__________________
Quand un problème a une solution, rien ne sert de s'inquiéter. Quand il n'y a pas de solution, s'inquiéter n'arrange rien.
Ouach est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/05/2007, 16h22   #15
Candidat au titre de Membre du Club
 
Inscription : février 2007
Messages : 54
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 54
Points : 11
Points : 11
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
function handleHttpResponse(objhttp)
{
	if (objhttp.readyState == 4)
	{
		if (objhttp.status == 200)
		{
			alert(objhttp.responseText);//Pour visualiser le contenu de la réponse.
		}
	}
}
function envoie(data)
{
	var xhr_object = getHTTPObject();
	var filename = "essai1.php";
	filename += "?"+data;
	data=nulll;
	xhr_object.open("GET", filename, true);
 
	xhr_object.onreadystatechange = function()
	{
		handleHttpResponse(xhr_object);
	}
 
	xhr_object.send(null);
 
}
je n'aime pas trop utilisé la méthode GET mais bon j'ai essayé avec mais ça ne marche pas
c'est pareil qu'avant
c.betty est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/05/2007, 16h29   #16
Membre Expert
 
Avatar de eric.pommereau
 
Homme ERIC POMMEREAU
Ingénieur intégration
Inscription : décembre 2004
Messages : 683
Détails du profil
Informations personnelles :
Nom : Homme ERIC POMMEREAU
Âge : 38
Localisation : France

Informations professionnelles :
Activité : Ingénieur intégration
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : décembre 2004
Messages : 683
Points : 1 294
Points : 1 294
Si ton alert ne s'affiche pas c'est qu'il y a un problème dans ton javascript...

Quand tu dis

Citation:
Et donc quand le fichier essai.php s'affiche ...
Comment veux tu que cela s'affiche alors qu'il attend des paramètres en POST?

A mon avis il te faut revoir la logique javascript pour ce type de script (requête asynchrone).

Voici un petit exemple qui marche en reprenant ton code...

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 
	function envoie(data){
		var responseText = "";   
		if(window.XMLHttpRequest) {
			xhr_object = new XMLHttpRequest(); 
		}  
		else if(window.ActiveXObject)
		{ 
			xhr_object = new ActiveXObject("Microsoft.XMLHTTP"); 
		}  
		else {  
			alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest..."); return; 
		}  
 
		xhr_object.onreadystatechange = function() {
			if(xhr_object.readyState == 4) alert('Récupération des données générées par PHP: ' + xhr_object.responseText);
		}			
 
		xhr_object.open("POST", "ajax.php"); 
 
 
		xhr_object.setRequestHeader('Content-type', 'application/x-www-form-urlencoded'); 
		xhr_object.send('cle=valeur');
Plusieurs remarques:

Il te manque une fonction de 'callback' (voir la méthode 'onreadystatechange'). Cette fonction permet l'exécution de code quand la requête a été faite avec succès. (ce qui sous entend de faire la même chose en cas d'échec).

Deuxième chose, dans ton script JS tu ne passes aucun paramètre... alors qu'en PHP tu fais un comptage des paramètres POST ... là ici il faut revoir ton script... pour ce faire tu peux passer tes paramètres dans la méthode send(...).

@+
eric.pommereau est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/05/2007, 16h42   #17
Candidat au titre de Membre du Club
 
Inscription : février 2007
Messages : 54
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 54
Points : 11
Points : 11
salut ,

bein j'envoie des données car à la fin je fais : xhr_object.send(data);

Le code que tu m'as passé c'est celui que j'avais en premier mais il ne marche pas non plus.

bon je t'explique peut etre que je me trompe quelque part . bon quand je clique sur le menu on appele la méthode envoie(data) qui envoie la donnée au fichier essai.php puis je veux que le fichier essai.php s'ouvre dans un cadre de la page c'est pour cela que j'ai mis
Code :
<li><a  href="essai1.php" target="sujet" onClick="javascript:envoie('comprdecomp');"  >Comporesion/Décompression</a></li>
peut être c'est de la que vient l'erreur.
Si vous avez une solution dites le moi STP car la je n'en peux plus .
Le code est correct mais ça ne marche pas.
Merci d'avance
c.betty est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/05/2007, 21h09   #18
Membre confirmé
 
Inscription : avril 2007
Messages : 254
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 254
Points : 262
Points : 262
Je suis encore à blâmer, j'ai oublié une fonction
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
 
function getHTTPObject() 
{
   var xmlhttp=false;
   if (window.XMLHttpRequest) xmlhttp = new XMLHttpRequest();
   else if (window.ActiveXObject) 
	 {
      try {xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");}
      catch(e) {xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");}
   }
   return xmlhttp;
}
function handleHttpResponse(objhttp)
{
	if (objhttp.readyState == 4)
	{
		if (objhttp.status == 200)
		{
			alert(objhttp.responseText);//Pour visualiser le contenu de la réponse.
		}
	}
}
function envoie(data)
{
	var xhr_object = getHTTPObject();
	var filename = "essai1.php";
	filename += "?"+data;
	data=nulll;
	xhr_object.open("GET", filename, true);
 
	xhr_object.onreadystatechange = function()
	{
		handleHttpResponse(xhr_object);
	}
 
	xhr_object.send(null);
 
}
__________________
Quand un problème a une solution, rien ne sert de s'inquiéter. Quand il n'y a pas de solution, s'inquiéter n'arrange rien.
Ouach est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/05/2007, 21h15   #19
Membre Expert
 
Avatar de eric.pommereau
 
Homme ERIC POMMEREAU
Ingénieur intégration
Inscription : décembre 2004
Messages : 683
Détails du profil
Informations personnelles :
Nom : Homme ERIC POMMEREAU
Âge : 38
Localisation : France

Informations professionnelles :
Activité : Ingénieur intégration
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : décembre 2004
Messages : 683
Points : 1 294
Points : 1 294
La variable data doit comprendre les paramètres que tu passes au script PHP, par exemple 'age=26';

Dans ce cas de figure, côté PHP, tu accèderas à cette valeur de la façon suivante:

Citation:
bon quand je clique sur le menu on appele la méthode envoie(data) qui envoie la donnée au fichier essai.php puis je veux que le fichier essai.php s'ouvre dans un cadre de la page c'est pour cela que j'ai mis
Il te faut dissocier le script chargé d'afficher du contenu dans une page web de celui qui est la cible de ton script AJAX (sinon le côté AJAX perd tout son intérêt).

Quoi qu'il en soit le script que je t'ai filé au dessus marche. Essaie encore avec...

Ce que je te conseille de faire aussi c'est de simplifier ton fichier PHP pour dans un premier temps simplement afficher quelque chose (récupéré dans ton alert javascript). Une fois que c'est bon... et seulement quand tu as validé cette étape tu peux complexifier ton code... enfin c'est ce que je ferais à ta place.

@+
eric.pommereau est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/05/2007, 11h24   #20
Candidat au titre de Membre du Club
 
Inscription : février 2007
Messages : 54
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 54
Points : 11
Points : 11
Bon le problème qu'il y a c'est qu'il n'y a pas de formulaire et du coup pas de form ni rien du tout. Je veux que quand j'appuie sur un lien ça envoie une chaine de caractère à un fichier PHP puis elle l'ouvre dans un cadre précis
c.betty est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 14h19.


 
 
 
 
Partenaires

Hébergement Web