Création
d'entreprise
Posez votre question Signaler

PHP - formulaire - recup valeur champ [Résolu]

jeremie64 3Messages postés 17 juillet 2007Date d'inscription - Dernière réponse le 13 sept. 2011 à 10:52
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
Lire la suite 

PHP - formulaire - recup valeur champ »

20 réponses
Réponse
+7
moins plus
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
jeremie64- 17 juil. 2007 à 11:29
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
Alain42 - 17 juil. 2007 à 14:49
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
nounou85 - 11 juin 2011 à 13:28
je viens d'essayer ta premiere methode mais elle marche pas sur ma liste deroulante!!!
il m'affiche le message suivant:
Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in /var/www/vhosts/monsite.fr/httpdocs/espace_franchise/admin/articleajout.php on line 195

sachant que à la ligne 195 j'ai l code suivant:
<option value= "<?php echo $row_Liste1['type_article'];?>" <?php if ($_POST['type_article']==" $row_Liste1['type_article']"){echo "selected";}?> ><?php echo $row_Liste1['type_article'];?> </option>
stp dis moi c'est koi la source exacte de ce prob!!! merci
Ajouter un commentaire
Réponse
+3
moins plus
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">
// 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_list2')">
			<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]</option>"; 
		}
	$aff=$aff."</select><br><br>";
// envoi reponse Php a Ajax	
	echo $aff;
?>
kahina21042mop - 6 avril 2009 à 11:53
bonjour a tous
dans le cadre de mon projet j'ai un formulaire, le probleme est simple
heuu enfin il n'est pas simple étant donner ke je n'arrive pas...:-)

moi le seul souci c ke j'ai créee une table dans ma BBD(Mysql) et je rajoute des champs dynamique du coup pour récuperer la valeur de mes champs et les inserer j'ai pas de nom préci a donner pour la requette $requete = "INSERT INTO `etudiant` (uid, nom, le les champs dy namique)VALUES ('$uid','$nom', 'les champs dynamique')"; étant donner k'il est variable

PS: mes champs sont inserer des checkbox dynamique

franchement si vous arrivé a me dépanner , alors la respect . paske la je ne sai plus koi faire je suis coincé et tous les garçon de la classe ont éssayé rien a faire....bref
merci bcp d'avance
2mop - 8 avril 2009 à 05:29
bjr,

Il faudrait que tu sois plus précis : genre donner ton formulaire...

Si non vu ton pb je pense qu'il faut que tu passes par un truc genre DO WHILE qui recupère tes champs, genre dans un tableau et après tu ecrire (printf, echo ...) ta requète

voilà une piste

2mop
JLD - 27 avril 2010 à 10:42
Merci pour ce partage :)
Ajouter un commentaire
Réponse
+2
moins plus
Salut
Je cherchais ce code et quand je l'ai trouvé je n'ai pas hésiter a le saisir dans une et page pour le tester.cependant lors de la saisie il y a un truc que je ne comprend pas dans repPhpAjax.php la requete suivante
$QuestionBase = "SELECT * FROM $Table WHERE ".$champ_niv."='".$_POST[val_sel]."' ORDER BY ".$champ_etud." ASC " ;
je voudrais savoir l'index "val_sel" signifie quoi ? je ne l'ai vu nul part dans le code apart ce endroit.
Merci
Ajouter un commentaire
Réponse
+2
moins plus
j'ai revu et corrigé le code de la solution 2(trois fichiers):
voici le bon code sur trois fichiers avec la table inchangée:

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">
// 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('RepPhpAjax.php','id_niv1','id_list2')">
<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]</option>";
}

$aff=$aff."</select>

<br><br>";

// envoi reponse Php a Ajax
echo $aff;
?>
athome- 15 sept. 2010 à 15:15
je tente de me servir de ton script
mais je n'arrive pas à insérer la valeur de la 2eme liste déroulante !
alors que la première s'enregistre bien dans ma base
j'ai l'impression qu'elle se perd dans la fonction java???
si tu peux donner un coup de main ;)
merci
Ajouter un commentaire
Réponse
+1
moins plus
Salut
EXCUSEZ moi je l'ai trouver je n'avais pas bien lu auparavant mais a force de chercher je l'ai trouver je vous prie de m'excusez.
Merci
Ajouter un commentaire
Réponse
+1
moins plus
Salut
Je suis très heureux de trouver cet forum. J'ai le même probleme que bodry24 sauf que moi j'ai encore trouvé "val_sel" dans le js de liste_liees.php .Je veux modifier le code pour qu'il fasse ce que je veux mais je ne sais pas ce qu'est cet val_sel alors expliquer le moi svp.Merci
john
PROGYS - 29 déc. 2009 à 12:33
A mon humble avis 'val_sel' correspond a la valeur retourne via <option valeu = '...'>patati </option>
Sinon c'est trop cool ce source ! et commente en plus !
Dailleurs je vais l'integrer dans mon site de vente !
www.poureve.biz
Ajouter un commentaire
Réponse
+1
moins plus
Bonjour a tous,

J'ai récupérer ce petit script sur ce même forum hier, je l'ai un peu modifie mais j'ai toujours le même message d'erreur.
"Erreur de syntaxe prés de 'test' a la ligne 1"

Jusqu'a la ligne 67 du fichier liste_liees.php tout va bien il me semble

Je vous met les fichiers:

config.php

<?php
$host="localhost";
$Login="root";
$Pass="";
$DB="test";
$Table="etudiants";
$champ_niv="niveau";
$champ_etud="etudiants";
?>



liste_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">
// 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.');
				alert('There was a problem with the request.(Code: ' + http_request.status + ')');
        }
    }
}
</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_query($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('repPhpAjax.php','id_niv1','id_list2')">
			<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_query($DB) 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]</option>"; 
		}
	$aff=$aff."</select><br><br>";
// envoi reponse Php a Ajax	
	echo $aff;
?>




Si qqun voit la boulette je suis preneur :D
Merci d'avance
Ajouter un commentaire
Réponse
+1
moins plus
Bonjour,
Si je comprend bien tu ne veux pas charger la page ni soumettre le formulaire. Si c'est bien ça je te conseille de passer par Ajax. Tu utilise js c-a-d tu ajout l'événement onchange() a la première liste et cet événement appel une fonction qui réalise ajax pour charger ta deuxième liste.
Bonne journée

La réussite est au bout de l'effort.
Ajouter un commentaire
Réponse
+0
moins plus
bonjour j'ai testé le code de serigne wil , ça fonctionne sauf que il met cette erreur php

" Deprecated: mysql_db_query() [function.mysql-db-query]: This function is deprecated; use mysql_query() instead in RepPhpAjax.php on line 16 "

quant je remplace par mysql_query() ça ne fonctionne plus du tout avec cette erreur

"Warning: mysql_query() expects parameter 2 to be resource, string given in RepPhpAjax.php on line 16"

si vous avez une solution pour que ça marche sans message d'erreur ça serait cool
Ajouter un commentaire
Ce document intitulé « PHP - formulaire - recup valeur champ » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?