Page 1 sur 1

Valeur $_POST d'un select mis à jour automatiquement

Posté : 25 déc. 2009, 04:01
par nagstef
Bonjour !!

J'utilise les 'listes liées' (chap IV) de ce site :
http://siddh.developpez.com/articles/ajax/

Je souhaiterai savoir comment récupérer la valeur de $_POST['livre'] lorsque je valide le formulaire ?

En vous remerciant !!

Stephane.

Re: Valeur $_POST d'un select mis à jour automatiquement

Posté : 25 déc. 2009, 16:06
par Ryle
Tout dépend de ce que tu veux faire... Tu peux envoyer les données de ton formulaire vers une nouvelle page ou continuer en ajax pour charger des informations sur la page courrante...

Pour le premier cas, il te faut compléter le formulaire (balise <form>) pour spécifier où doivent être envoyées les données validées, et ajouter un bouton pour le soumettre (ou déclencher la soumission par la sélection du livre, avec un onchange). Tu pourras ensuite traiter ces données comme celles de n'importe quel formulaire (avec $_POST ou $_GET).

Pour continuer en ajax, il te suffit d'ajouter un attribut onchange dans le select qui permet de choisir le livre et d'appeler les fonctions que tu souhaites en javascript :)

Re: Valeur $_POST d'un select mis à jour automatiquement

Posté : 25 déc. 2009, 17:28
par nagstef
Merci bien, mais pourtant, je n'y arrive pas .. je file mon code, si quelqu'un a la possibilité d'y jeter un coup d'oeil !!

Fichier php
<?php
session_start();
?>
<html>
	<head>
		<title>Tutoriel Ajax (XHTML + JavaScript + XML)</title>
		<script type='text/javascript'>
			function getXhr(){
                                var xhr = null; 
				if(window.XMLHttpRequest) // Firefox et autres
				   xhr = new XMLHttpRequest(); 
				else if(window.ActiveXObject){ // Internet Explorer 
				   try {
			                xhr = new ActiveXObject("Msxml2.XMLHTTP");
			            } catch (e) {
			                xhr = new ActiveXObject("Microsoft.XMLHTTP");
			            }
				}
				else { // XMLHttpRequest non supporté par le navigateur 
				   alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest..."); 
				   xhr = false; 
				} 
                                return xhr;
			}
			
			/**
			* Méthode qui sera appelée sur le click du bouton
			*/
			function go(){
				var xhr = getXhr();
				// On défini ce qu'on va faire quand on aura la réponse
				xhr.onreadystatechange = function(){
					// On ne fait quelque chose que si on a tout reçu et que le serveur est ok
					if(xhr.readyState == 4 && xhr.status == 200){
						leselect = xhr.responseText;
						// On se sert de innerHTML pour rajouter les options a la liste
						document.getElementById('symptome').innerHTML = leselect;
					}
				}

				// Ici on va voir comment faire du post
				xhr.open("POST","directeur/symptomes.php",true);
				// ne pas oublier ça pour le post
				xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
				// ne pas oublier de poster les arguments
				// ici, l'id de l'auteur
				sel = document.getElementById('famille_bobo');
				idfamille_bobo = sel.options[sel.selectedIndex].value;
				xhr.send("famille_bobo="+idfamille_bobo);
			}
			function go_soin(){
				var xhr = getXhr();
				// On défini ce qu'on va faire quand on aura la réponse
				xhr.onreadystatechange = function(){
					// On ne fait quelque chose que si on a tout reçu et que le serveur est ok
					if(xhr.readyState == 4 && xhr.status == 200){
						leselect = xhr.responseText;
						// On se sert de innerHTML pour rajouter les options a la liste
						document.getElementById('soinss').innerHTML = leselect;
					}
				}

				// Ici on va voir comment faire du post
				xhr.open("POST","directeur/symptomes_soins.php",true);
				// ne pas oublier ça pour le post
				xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
				// ne pas oublier de poster les arguments
				// ici, l'id de l'auteur
				sel = document.getElementById('famille_bobo');
				idfamille_bobo = sel.options[sel.selectedIndex].value;
				xhr.send("famille_bobo="+idfamille_bobo);
			}
		</script>
	</head>

	<body>
<form name="infirmerie" method="post"> // la méthode avec la valeur '&action=sauvegarde' passée en url ne fonctionnant pas (je ne sais pas pourquoi)

<?php
if ($_POST['sauvegarde']=='on') // j'utilise donc un subterfuge pour procéder à la sauvegarde lorsque la page est rechargée
{
echo $_POST['famille_bobo']; // Cette valeur est bien retournée !!
echo $_POST['soins']; // Ici, je souhaite donc récupérer cette valeur 
exit();
}
?>

<table width="100%" border="0">
<tr>
	<td width="15%" ><label><div align='right'>Type de Symptôme</div></label></td>
	<td width="25%" ><select style="width: 200px" class='inputbox' name='famille_bobo' id='famille_bobo' onchange='go();go_soin()'> 
		<option value='-1'>Aucun</option>
		<option value='blessure'>blessure</option>
		<option value='maux'>maux</option>
	</select></td>
</tr>
<tr>
	<td><label><div align='right'>Symptômes</div></label></td>
	<td><div id='symptome' style='display:inline'>
	<select style='width: 200px' class='inputbox' name='symptome'>
	<option value='-1'>Aucun type selectionné</option>
		</select>
	</div></td>
</tr>
<tr>
	<td><label><div align='right'>Liste des soins</div></label></td>
	<td colspan="3"><div id='soinss' style='display:inline'>
	<select style='width: 100%' class='inputbox' name='soins'>
	<option value='-1'>Aucun soin selectionné</option>
		</select>
	</div></td>
</tr>
</table>
<div align='right'><input type="checkbox" name="sauvegarde" checked="checked" style="visibility:hidden"/><input type='submit' class='button' name='Submit' value="Valider"></div>
		</form>
	</body>
</html>
fichier symptomes.php appelé par la fonction go()
<?php
session_start();
	require("../confs/conf.php");
	mysql_connect($sql_serveur_client, $sql_user_client, $sql_passwd_client); // Connexion à MySQL
	mysql_select_db($sql_bdd_client); // Sélection de la base
	 
	echo "<select style='width: 200px' class='inputbox' name='symptome'><option value='0'>Selectionner un symptome</option>";
	if(isset($_POST["famille_bobo"])){
		$res = mysql_query("SELECT id,symptome_bobo FROM utilisateur_".$_SESSION['id']."_infirmerie WHERE famille_bobo='".$_POST['famille_bobo']."' ORDER BY symptome_bobo");
		while($row = mysql_fetch_assoc($res)){
			echo "<option value='".$row["id"]."'>".$row["symptome_bobo"]."</option>";
		}
	}
	echo "</select>";
	mysql_close();
?>
fichier symptomes.php appelé par la fonction go_soins()
<?php
session_start();
	require("../confs/conf.php");
	mysql_connect($sql_serveur_client, $sql_user_client, $sql_passwd_client); // Connexion à MySQL
	mysql_select_db($sql_bdd_client); // Sélection de la base
	 
		echo "<select style='width: 100%' class='inputbox' name='soins'><option value='0'>Selectionner un soin possible</option>";
	if(isset($_POST["famille_bobo"])){
		$res = mysql_query("SELECT id,type_soin_bobo FROM utilisateur_".$_SESSION['id']."_infirmerie WHERE famille_bobo='".$_POST['famille_bobo']."' ORDER BY type_soin_bobo");
		while($row = mysql_fetch_assoc($res)){
			echo "<option value='".$row["id"]."'>".$row["type_soin_bobo"]."</option>";
		}
	}
	echo "</select>";
	mysql_close();
?>
Au niveau du code, j'ai bien sur enlevé les parties qui n'ont aucun impact sur ma demande, donc, s'il manque ICI des balises '<td>' ou autres, c'est un oubli ICI !! :)

Merci de votre aide !!

Stef

Re: Valeur $_POST d'un select mis à jour automatiquement

Posté : 26 déc. 2009, 17:02
par Ryle
Concernant ton subterfuge, tu peux tout à fait ajouter l'attribut action="?sauvegarde=oui" à ta balise form. Mais contrairement aux éléments du formulaire, cette information est envoyée en GET et il faudra donc tester $_GET['sauvegarde'] ...

Concernant ton problème en revanche tout semble correct... Ajoutes un print_r($_POST) pour vérifier les valeurs qui sont transmises lorsque tu soumets ton formulaire. C'est pas normal que le select précédent et la case à cocher suivante y soient et pas celui des soins...