Passage variable dans page php via javascript

Résolu/Fermé
grabenouite01 Messages postés 19 Date d'inscription mardi 17 mai 2011 Statut Membre Dernière intervention 20 mai 2011 - Modifié par crapoulou le 5/07/2012 à 22:17
grabenouite01 Messages postés 19 Date d'inscription mardi 17 mai 2011 Statut Membre Dernière intervention 20 mai 2011 - 20 mai 2011 à 14:16
Bonjour,

Tout d'abord ne démarrez pas au quart de tour en disant que ce sujet à déjà été traité ^^
Le thème a été traité mais mon problème n'en est pas plus résolu.
Donc voici le soucis:
une page php avec un bête formulaire contenant entre autre un select avec des valeurs de 1 à 10.
Ce select appel une fonction javascript -->
<select name="nbcartesavion" id="nbcartesavion" value="0" onchange=carteavion(value); >
Par la suite, ce script récupère la valeur choisie par l'utilisateur dans le select.
Le voici :
function carteavion(carte){ 
  var requete='./carteavion.php?nbcartesavion='+carte; 
  var htr=httpRequest(); //récupère l'objet XMLHttpRequest 
  htr.onreadystatechange=function(){ 
  if(4==htr.readyState && 200==htr.status) 
                       // j'injecte dans un div d'id carteavion le résultat de la page de traitement carteavion.php 
   document.getElementById("carteavion").innerHTML=htr.responseText;    
  } 
  htr.open("GET", requete, true); 
  htr.send(null); 
 } 

Ce que je souhaite faire, c'est envoyé cette valeur à une page de traitement php qui va m'afficher un certains nombre de champs (input type=text) en fonction de la valeur récupérer. 
En utilisant la méthode GET comme vous le voyez ds le script ci dessus, aucun problème, tous fonctionne sur Chrome et Firefox MAIS pas sur IE 8. 
Or les futurs utilisateurs sont principalement sur IE je dois donc optimiser cette page pour IE. 
Je décide donc de passer par la méthode POST en testant les résultats d'abord sur Chrome. 

Voici le nouveau script: 
function carteavion(){ 
  var data = "abc="+document.getElementById("nbcartesavion").value; //on récupère la valeur value du select dont l'id est nbcartesavion 
  var requete='./carteavion.php'; //la page requise de traitement 
  var htr=httpRequest(); //récupération de l'objet XMLHttpRequest 
  htr.open("POST", requete, true); //on initialise la requête avec la méthode POST, à l'url "requete" en mode asynchrone   
  htr.send(data); //on envoi la requête http au serveur en transmettant la valeur data 
  htr.onreadystatechange=function(){ 
  if(4==htr.readyState && 200==htr.status) 
   document.getElementById("carteavion").innerHTML=htr.responseText; // on injecte le résultat de la requête (htr.reponseXML) dans un div qui a pour id carteavion 
  }   
 } 

Le soucis c'est que ma page de traitement n'arrive pas à récupérer le $_POST : 

<?php 
//la page carteavion.php 
 $nb=$_POST['abc']; 
 echo "<p>".$_POST['abc']."</p>"; //ce echo permet uniquement de voir quelle est la valeur de $_POST['abc'] (pour l'instant elle vaut "Array") 
 if($nb != NULL){ //affichage des input } 


Voilà, c'est un peu long et je m'en excuse mais je préfère vous donnez le cheminement et les point qui me paraissent importants.

Merci d'avance pour vos réponses.
A voir également:

8 réponses

grabenouite01 Messages postés 19 Date d'inscription mardi 17 mai 2011 Statut Membre Dernière intervention 20 mai 2011
17 mai 2011 à 16:57
Je précise tout de même l'erreur qui s'affiche sur ma page -->
Notice: Undefined index: abc in C:\wamp\www\ODT\carteavion.php on line 4
0
grabenouite01 Messages postés 19 Date d'inscription mardi 17 mai 2011 Statut Membre Dernière intervention 20 mai 2011
18 mai 2011 à 11:01
up !
0
Melooo Messages postés 1405 Date d'inscription vendredi 28 novembre 2008 Statut Membre Dernière intervention 18 mars 2013 84
18 mai 2011 à 11:13
Salut,
rah que ton code est long alors qu'en Jquery tu peux utiliser ajax en 5 lignes !
je te conseille donc de voir de ce côté...
https://api.jquery.com/jQuery.ajax/
0
grabenouite01 Messages postés 19 Date d'inscription mardi 17 mai 2011 Statut Membre Dernière intervention 20 mai 2011
Modifié par grabenouite01 le 18/05/2011 à 14:31
J'ai utilisé le JQuerry avant d'en arriver là. Seulement j'ai eu qq soucis avec les variables c'est pour ça que je me suis contenté du javascript et du php. Mais je vais remettre un peu le nez dedans ;)
Je suis un peu pris par le temps c'est pour ça en fait
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
grabenouite01 Messages postés 19 Date d'inscription mardi 17 mai 2011 Statut Membre Dernière intervention 20 mai 2011
18 mai 2011 à 14:30
Après une séries de tests (encore et toujours ^^) j'ai trouvé d'où venait le vrai problème. Un truc tout con comme bien souvent.
IE 8 n'interprète pas document.getElementById(nom_id).value
J'ai donc testé avec document.getElementsByName(name).value, et là, l'alert me retourne un undefined au lieu d'une boîte vide avec le document.getElementById(nom_id).value.
Je recherche donc actuellement d'autres techniques. Par exemple :
document.forms['formulaire'].elements['id'].value, celle-ci ne marche pas non plus avec IE mais fonctionne avec FF et Chrome...

Donc toujours bloqué mais je ne désespère pas ^^
0
Melooo Messages postés 1405 Date d'inscription vendredi 28 novembre 2008 Statut Membre Dernière intervention 18 mars 2013 84
18 mai 2011 à 14:50
IE nous feras c**** jusqu'au bout ! lol
window.document.forms['formulaire'].id.value
0
grabenouite01 Messages postés 19 Date d'inscription mardi 17 mai 2011 Statut Membre Dernière intervention 20 mai 2011
18 mai 2011 à 14:58
J'ai testé "window.document.forms['formulaire'].id.value", forcément il affiche undefined puisqu'il n'ya pas de champ 'id' ^^ et j'ai testé "window.document.forms['formulaire'].nbcartesavion.value"
avec nbcartesavion le vrai id du div mais là il ne m'affiche rien même pas undefined.
Mais j'avoue, ça doit leur coûter trop cher de se mettre aux normes du w3c...
0
Melooo Messages postés 1405 Date d'inscription vendredi 28 novembre 2008 Statut Membre Dernière intervention 18 mars 2013 84
18 mai 2011 à 15:02
essayes :
var mavaleur = document.getElementById('.nbcartesavion').value;
alert(mavaleur)

good ou pas good ?
pourtant ils doivent être blindés étant donné qu'ils viennent de racheter Skype pour un bon paquet LOL
0
grabenouite01 Messages postés 19 Date d'inscription mardi 17 mai 2011 Statut Membre Dernière intervention 20 mai 2011
Modifié par grabenouite01 le 18/05/2011 à 15:11
Pas good :( et déconne aussi sur chrome -->
Uncaught TypeError: Cannot read property 'value' of null
Etant donné que lorsqu'il ne m'affiche pas undefined, il m'affiche une boîte d'alerte vide, est ce que ça pourrait venir d'un encodage des caractères ? sachant que la valeur que je récupère et un chiffre entre 0 et 10
0
grabenouite01 Messages postés 19 Date d'inscription mardi 17 mai 2011 Statut Membre Dernière intervention 20 mai 2011
18 mai 2011 à 15:16
J'ai testé avec des chaines de caractères (bonjour et aurevoir), pareil m'affiche une boite alert vide
0
grabenouite01 Messages postés 19 Date d'inscription mardi 17 mai 2011 Statut Membre Dernière intervention 20 mai 2011
Modifié par grabenouite01 le 18/05/2011 à 17:20
J'ai suivi ton conseil en pensant que ça marcherait mais toujours pas... enfin sur IE parceque sur FF et Chrome ça marche
le javascript
function carteavion(){ 
  var data = document.formulaire.plane.value;  
  var requete='./form_airfrance.php?cartouche='+data;  
  var htr=httpRequest(); 
  alert(data); 
  htr.open("GET", requete, true);   
  htr.send(null);  
  htr.onreadystatechange=function(){  
  if(4==htr.readyState && 200==htr.status)    document.getElementById("arobase").innerHTML=htr.responseText; 
  }   
 } 


et le html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<title>Profils utilisateurs </title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<link rel="stylesheet" media="screen" type="text/css" href="styleprofil.css" title="style" />		
<script type="text/javascript" src="./javascript/httprequest.js"></script>
<script language="javascript" type="text/javascript" src="./javascript/divers2.js"></script>		
</head>
<body>
<form method="POST" action="profiluser.php" name="formulaire" onSubmit="return check();">
	<div id="client">
	<table CELLPADDING='0.5' COLS='1'>
	<caption>______Avion______</caption>
	<tr >
	<th> Carte de fidelité :</th>						
	<td> Nombre de cartes : <select name="plane" id="plane" value="0" onchange=carteavion();>					
	<?php 	for($j=0;$j<=10;$j++){ echo'<option>'.$j.'</option>'; } ?>
	</select> 
	<div id="arobase">				</div>
	</td>
	</tr>
	</table>
	</div>
</form>
</body>
</html>
0
Melooo Messages postés 1405 Date d'inscription vendredi 28 novembre 2008 Statut Membre Dernière intervention 18 mars 2013 84
18 mai 2011 à 17:28
Bon j'ai viré le getElementbyId et à la place j'ai utilisé du Jquery
et ca marche nickel sous internet explorer !!
je te donne le code :
<script>
$(document).ready(function() {
			alert($("#plane").val());
		$("#plane").change(function () {
			alert($("#plane").val());
			});
	});
</script>

N'hésites pas si tu comprends pas ;)
0
grabenouite01 Messages postés 19 Date d'inscription mardi 17 mai 2011 Statut Membre Dernière intervention 20 mai 2011
18 mai 2011 à 21:02
Il faut que je récup les librairies jquerry. je ferais ça demain et je te redirais mais j'ai pas eu trop l'occasion de coder en JQuerry ^^
0
grabenouite01 Messages postés 19 Date d'inscription mardi 17 mai 2011 Statut Membre Dernière intervention 20 mai 2011
19 mai 2011 à 11:21
Ça a marché maintenant faut que j'adapte. Mais si j'ai bien compris le principe, ce script récupère la valeur de value, dans l'élément qui a pour id plane et dès que la valeur change il affiche une boite de dialogue avec la nouvelle valeur.
C'est bien ça ?
0
Melooo Messages postés 1405 Date d'inscription vendredi 28 novembre 2008 Statut Membre Dernière intervention 18 mars 2013 84
19 mai 2011 à 11:22
Tout à fait !
0
grabenouite01 Messages postés 19 Date d'inscription mardi 17 mai 2011 Statut Membre Dernière intervention 20 mai 2011
19 mai 2011 à 11:33
Donc maintenant ce que je voudrais faire, c'est afficher le contenu d'une page php lorsque la valeur change dans une boite de dialogue (que je met dans le div arobase)
Ca donnerait qqchose comme ça :
var requete='./form_airfrance.php';
$(document).ready(function() {
			alert($("#plane").val());
		$("#plane").change(function () {
		$("#arobase").load(requete, function() {
						  $(this).dialog({
						     title:"ERREUR"})});
					$("#arobase").show();					
					return(false);
                                 });
			});
0
Melooo Messages postés 1405 Date d'inscription vendredi 28 novembre 2008 Statut Membre Dernière intervention 18 mars 2013 84
19 mai 2011 à 11:34
tu veux rediriger l'utilisateur lorsqu'il as choisi un chiffre dans la liste déroulante ?
0
grabenouite01 Messages postés 19 Date d'inscription mardi 17 mai 2011 Statut Membre Dernière intervention 20 mai 2011
19 mai 2011 à 11:40
C'est l'idée.
Au final je veux afficher plusieurs choses une fois qu'il a sélectionner un chiffre ds la liste.
Donc là il ne me reste qu'à récupérer la valeur et la renvoyer sous forme de get ou post avec le jquerry.
0
Melooo Messages postés 1405 Date d'inscription vendredi 28 novembre 2008 Statut Membre Dernière intervention 18 mars 2013 84
Modifié par Melooo le 19/05/2011 à 11:47
Mmmm d'accord,
bon pour cela avant tu avais utiliser du ajax pure, essayes maintenant d u'itliser de l'ajax via jquery en faisant :
$.ajax({ 
   type: "POST", 
   url: "lapagequetuveuxappeller.php", 
   data: "name"+$("#plane").val()", 
   success: function(msg){ 
     alert( "Data Saved: " + msg ); 
   } 
 }); 

Un truc du genre ;)
0
grabenouite01 Messages postés 19 Date d'inscription mardi 17 mai 2011 Statut Membre Dernière intervention 20 mai 2011
19 mai 2011 à 12:16
La partie
data: "name"+$("#plane").val()", 
   success: function(msg){ 
     alert( "Data Saved: " + msg );

je capte pas trop. Le data il est passé où du coup?

Et sr la page php, je récupère comme ça
$nb=$_POST[' '];

Mais je mets quoi comme valeur pour le post ? "name" de data ?
0
Melooo Messages postés 1405 Date d'inscription vendredi 28 novembre 2008 Statut Membre Dernière intervention 18 mars 2013 84
Modifié par Melooo le 19/05/2011 à 13:28
Le data en faite, ca correspond au valeur que tu veux faire passer sur l'autre page ;)
et oui tu récupères la valeur de ta liste déroulante comme ceci :
$nb=$_POST['name']; 
0
grabenouite01 Messages postés 19 Date d'inscription mardi 17 mai 2011 Statut Membre Dernière intervention 20 mai 2011
20 mai 2011 à 14:16
Finalement j'ai résolu mon problème d'origine avec un truc un peu biscornu au premier abord mais qui marche sur tous les nav :
onchange="cma_fonction(this.options[this.selectedIndex].value); "

Donc je passe en paramètre de ma fonction js ce que l'utilisateur a sélectionné dans la liste déroulante avec ce this.options[this.selectedIndex].value.
Sinon je vais garder le jQuery pour une histoire de validation de formulaire.

Donc voilà un p'tit résolu quand même, ça fera pas de mal ;)
0