IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[PHP-JS] Php et javascript


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Inscrit en
    Février 2007
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 54
    Points : 29
    Points
    29
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    <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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    254
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2007
    Messages : 254
    Points : 304
    Points
    304
    Par défaut
    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.

  3. #3
    Membre chevronné
    Avatar de eric.pommereau
    Homme Profil pro
    Ingénieur, pôle cartographie
    Inscrit en
    Décembre 2004
    Messages
    715
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur, pôle cartographie
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2004
    Messages : 715
    Points : 1 790
    Points
    1 790
    Par défaut
    Bonjour,

    Si l'alert javascript s'éxécute, quel est précisément le message de ton 'alert(data);' ?

  4. #4
    Nouveau membre du Club
    Inscrit en
    Février 2007
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 54
    Points : 29
    Points
    29
    Par défaut
    le premier alert affiche milieu et les deux autres comprdecomp

  5. #5
    Nouveau membre du Club
    Inscrit en
    Février 2007
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 54
    Points : 29
    Points
    29
    Par défaut
    quand je mets ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    254
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2007
    Messages : 254
    Points : 304
    Points
    304
    Par défaut
    Il faut encore teste le status 200
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    if(xhr_object.readyState == 4)
    {
      if (xhr_object.status == 200)
      {
        alert(xhr_object.responseText);
      }
    }
    On avance.

  7. #7
    Nouveau membre du Club
    Inscrit en
    Février 2007
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 54
    Points : 29
    Points
    29
    Par défaut
    avec ça : l'alert sui il y a au milieu ne s'affiche pas.

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    254
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2007
    Messages : 254
    Points : 304
    Points
    304
    Par défaut
    Remets le code de la fonction envoyer qu'on y voit plus claire.

  9. #9
    Nouveau membre du Club
    Inscrit en
    Février 2007
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 54
    Points : 29
    Points
    29
    Par défaut
    Voila :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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);
     
     
     }

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    254
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2007
    Messages : 254
    Points : 304
    Points
    304
    Par défaut
    Essaie un peu ceci (je n'ai pas testé)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  11. #11
    Nouveau membre du Club
    Inscrit en
    Février 2007
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 54
    Points : 29
    Points
    29
    Par défaut
    ça donne le même résultat que avant. ça n'a rien changé. Le alert ne s'affiche pas .

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    254
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2007
    Messages : 254
    Points : 304
    Points
    304
    Par défaut
    onreadystatechange a disparu de ton code...
    Bon voici comment cela fonctionne chez moi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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);
    }

  13. #13
    Nouveau membre du Club
    Inscrit en
    Février 2007
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 54
    Points : 29
    Points
    29
    Par défaut
    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

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    254
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2007
    Messages : 254
    Points : 304
    Points
    304
    Par défaut
    Sorry, sorry j'utilise le get plutôt que le post.
    Donc:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	xhr_object.open("GET", "essai.php?param1="+var1+"&param2="+var2, true);
    Et dans essai.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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"]).'"...';
    	  }
     
    ?>

  15. #15
    Nouveau membre du Club
    Inscrit en
    Février 2007
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 54
    Points : 29
    Points
    29
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  16. #16
    Membre chevronné
    Avatar de eric.pommereau
    Homme Profil pro
    Ingénieur, pôle cartographie
    Inscrit en
    Décembre 2004
    Messages
    715
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur, pôle cartographie
    Secteur : Administration - Collectivité locale

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

    Quand tu dis

    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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(...).

    @+

  17. #17
    Nouveau membre du Club
    Inscrit en
    Février 2007
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 54
    Points : 29
    Points
    29
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    <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

  18. #18
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    254
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2007
    Messages : 254
    Points : 304
    Points
    304
    Par défaut
    Je suis encore à blâmer, j'ai oublié une fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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);
     
    }

  19. #19
    Membre chevronné
    Avatar de eric.pommereau
    Homme Profil pro
    Ingénieur, pôle cartographie
    Inscrit en
    Décembre 2004
    Messages
    715
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur, pôle cartographie
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2004
    Messages : 715
    Points : 1 790
    Points
    1 790
    Par défaut
    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:

    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.

    @+

  20. #20
    Nouveau membre du Club
    Inscrit en
    Février 2007
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 54
    Points : 29
    Points
    29
    Par défaut
    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

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [PHP-JS] PHP dans du code javascript
    Par ChrisMan dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 04/05/2007, 14h51
  2. Réponses: 7
    Dernier message: 08/10/2005, 08h59
  3. [PHP-JS] php & javascript
    Par MANU_2 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 30/08/2005, 11h18
  4. [PHP-JS] Arguments PHP d'une fonction javascript
    Par Néo-Tony dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 22/12/2004, 12h06
  5. [PHP-JS] Php dans un script javascript
    Par nebule dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 30/11/2004, 10h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo