rss
FormulairePlus
Rechercher : dans
Par : Pertinence Date Nom d'utilisateur
Statut : Résolu

PHP - formulaire - recup valeur champ

Posté par jeremie64, le mardi 17 juillet 2007 à 10:11:01
bonjour,
j'ai un pb avec PHP.
Dans une formulaire j'ai un champ liste déroulante résultat d'une requete . J'ai un deuxieme champ liste déroulante dont le contenu va dépendre du choix effectué dans le premier champ.
Comme nt récupérer la valeur du premier champ (sans envoyer le formulaire au serveur par submit)
merci bien
Configuration: Windows XP
Internet Explorer 6.0
Répondre à jeremie64  Signaler ce message aux modérateurs Aller au dernier message

1


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
bbar, le mardi 17 juillet 2007 à 11:10:36
salut, il faut que tu utilises le javascript, avec la directive onChange="..." dans la balise du premier champ. Tu peux faire appel à une fonction javascript qui va choisir le contenu de ton deuxième champ en fonction du premier
Répondre à bbar

2


  • 1
    Ce message vous semble utile, votez !
  • Ce message ne vous semble pas utile, votez !
  • Signaler ce message aux modérateurs
jeremie64, le mardi 17 juillet 2007 à 11:29:26
merci pour ta réponse mais :
je vois comment acceder au champ avec Javascript par contre j'utilise une requete SQL pour faire la 2eme liste comment y integrer la valeur que le recupere avec le javascript. Il faudrait que je stocke la valeur récupérée avec le Javascript dans une variable qui pourrait etre utilisée dans mon code PHP mais je ne sais pas comment???

merci
Répondre à jeremie64

3


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Alain42, le mardi 17 juillet 2007 à 14:49:12
Deux solutions:

1- tu acceptes que ta page se recharge, alors tu n'utilises pas javascript, mais dans la liste 1 tu mets onChange=Submit(). Dans <form tu mets action="ta_page_php.php"

Dans ta_page_php tu vérifie que $_POST['nom_liste1']!="" et tu réintéroges ta BD et charges alors ta deuxième liste.

Pour que la valeur sélectionnée de ta première liste subsistes, tu dois mettre dans tous les
<option value="valeur1" <?php if ($_POST['nom_liste1']=="valeur1"){echo "selected";}?> >Valeur1</option>

2- si tu ne veux pas que ta page se recharge, alors tu utilises Javascript et AJAX qui va appeler un autre script PHP qui lira la bd et chargera la liste 2 en fct du choix liste 1
Fais une recherche sur Google "Listes liées Ajax" ou si besoin j'ai un bout de code
Répondre à Alain42

4


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Alain42, le mardi 17 juillet 2007 à 14:55:12
Dans un moment de bonté je te mets le code de la solution 2(trois fichiers):

config.php
<?php
$host="localhost";
$Login="xxxxxx";
$Pass="xxxxxxx";
$DB="test";
$Table="etudiants";
$champ_niv="niveau";
$champ_etud="etudiants";
?>


listes_liees.php
<html>
<head>
<!--  Script de listes deroulantes liees  avec appel  par AJAX, (evite le rechargement de la page) -->
<script language="Javascript"type="text/JavaScript&qu­ot;>
// Requette AJAX
function makeRequest(url,id_niveau,id_ecrire){
	var http_request = false;
		//créer une instance (un objet) de la classe désirée fonctionnant sur plusieurs navigateurs
        if (window.XMLHttpRequest) { // Mozilla, Safari,...
            http_request = new XMLHttpRequest();
            if (http_request.overrideMimeType) {
                http_request.overrideMimeType('text/xml');//un appel de fonction supplémentaire pour écraser l'en-tête envoyé par le serveur, juste au cas où il ne s'agit pas de text/xml, pour certaines versions de navigateurs Mozilla
            }
        } else if (window.ActiveXObject) { // IE
            try {
                http_request = new ActiveXObject("Msxml2.XMLHTTP");
            } catch (e) {
                try {
                    http_request = new ActiveXObject("Microsoft.XMLHTTP");
                } catch (e) {}
            }
        }

        if (!http_request) {
            alert('Abandon :( Impossible de créer une instance XMLHTTP');
            return false;
        }
        http_request.onreadystatechange = function() { traitementReponse(http_request,id_ecrire); } //affectation fonction appelée qd on recevra la reponse
		// lancement de la requete
		http_request.open('POST', url, true);
		//changer le type MIME de la requête pour envoyer des données avec la méthode POST ,  !!!! cette ligne doit etre absolument apres http_request.open('POST'....
		http_request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
		obj=document.getElementById(id_niveau);
		data="val_sel="+obj.value;
        http_request.send(data);
}

function traitementReponse(http_request,id_ecrire) {
	var affich="";
	if (http_request.readyState == 4) {
		if (http_request.status == 200) {
					// cas avec reponse de PHP en mode texte:
			//chargement des elements reçus dans la liste
			var affich_list=http_request.responseText;
				obj = document.getElementById(id_ecrire); 
                obj.innerHTML = affich_list;
		} 
		else {
                alert('Un problème est survenu avec la requête.');
        }
    }
}
</script>
</head>
<?php
include ("config.php");
// Connexion a la base de donnees  
	$AccesBase = mysql_connect($host,$Login,$Pass);
	mysql_select_db($DB,$AccesBase);
	$QuestionBase = "SELECT DISTINCT $champ_niv FROM $Table  ORDER BY $champ_niv ASC " ;
	$result_recherche=mysql_db_query($DB, $QuestionBase) or die (mysql_error());
	$nombre_enr=mysql_num_rows($result_recherche);
?>
<body>
<form name="test1" method="post" action="liste_liees.php"  >
	<div id="id_list1">Niveau:<br>
		<select name="niv1" id="id_niv1" onChange="makeRequest('rep_PhpAjax.php','id_niv1','id_l­ist2')">
			<option>-- Choisissez --</option>
<?php
			while ($row=mysql_fetch_assoc($result_recherche)){
?>
					<option value="<?php echo $row[$champ_niv]?>"><?php echo $row[$champ_niv]?></option> 
<?php
			}
?>
		</select> 
		<br><br>
	</div>
	
	
	<div id="id_list2">
	<!-- ici sera charge la reponse mode texte de PHP à la request AJAX -->
	</div>
</form>
</body>
</html>


RepPhpAjax.php
<?php
// script PHP interrogation Base de donnees pour reponse a la requette AJAX
include ("config.php");

// Connexion a la base de donnees  
	$AccesBase = mysql_connect($host,$Login,$Pass);
	mysql_select_db($DB,$AccesBase);
	$QuestionBase = "SELECT * FROM $Table  WHERE ".$champ_niv."='".$_POST[val_sel]."' ORDER BY ".$champ_etud." ASC " ;
	$result_recherche=mysql_db_query($DB, $QuestionBase) or die (mysql_error());
// construction de la liste deroulante
$aff=="";
$aff=$aff."Etudiants:<br>
		<select name='niv1' id='cont_list2' >
		<option>-- Choisissez --</option>";
		while ($row=mysql_fetch_assoc($result_recherche)){
			$aff.="<option value=\"$row[$champ_etud]\">$row[$champ_etud]&l­t;/option>"; 
		}
	$aff=$aff."</select><br><br>";
// envoi reponse Php a Ajax	
	echo $aff;
?>
Répondre à Alain42

5


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
 jeremie64, le mercredi 18 juillet 2007 à 10:08:54
merci c'est OK je vais tenter avec Ajax
Répondre à jeremie64
Logiciels pertinents trouvés dans les téléchargements
Télécharger PHP Edit 0.6PHP Edit - PHPEdit est un environnement de développement intégré (IDE) sous Windows pour le langage PHP. Il offre un grand nombre de...Catégorie: PHP
Licence: Freeware/gratuit
Télécharger PSPad 4.5.2PSPad - PSPad est un excellent éditeur de texte. Il est utile pour travailler sur du simple texte, mais aussi sur du HTML, CSS,...Catégorie: Développement
Licence: Freeware/gratuit
Télécharger PC Inspector File Recovery 4.0PC Inspector File Recovery - Tout comme SoftPerfect File Recovery ou HandyRecovery , ce logiciel est capable de récupérer des fichiers effacés, mais...Catégorie: Sauvegarde
Licence: Freeware/gratuit
Télécharger Restoration 2.5.14Restoration - Restoration est un outil gratuit, en anglais seulement, permettant de récupérer les données effacées, même après avoir vidé...Catégorie: Sauvegarde
Licence: Freeware/gratuit
Plus de logiciels gratuits sur « PHP formulaire recup valeur champ »