PHP : affichage données après clic dans liste

Résolu/Fermé
Signaler
Messages postés
155
Date d'inscription
dimanche 28 septembre 2008
Statut
Membre
Dernière intervention
28 mars 2010
-
 katr vin -
Bonjour,

Je débute en php et je m'entraine en faisant un site destiné à l'intranet pour gérer des congés.

J'utilise php 5 et MySql. Je maitrise les manipulations "basiques" comme lire, écrire, modifier, supprimer des données via un formualire php, mais je bute désespérement sur l'affichage de données sur une même page après avoir cliqué dans une liste déroulante. formulaire et script doivent être sur la même page de code.

Pour le moment j'aimerais éviter de passer par du java que je ne connais pas encore. Je sais que l'on peut le faire en php. J'ai tenté d'adapter des bouts de codes trouvé ça et là sur le net mais sans succés. J'ai consulté beaucoup de livres et fais des recherches avant de venir ici. Comme souvent la solution doit-être devant mes yeux mais ou ??
Merci à ceux qui m'aideront. :)
 
<select>
<?php
include("connection.inc.php");
//création et remplissage de la liste déroulante
	echo '<form method="POST" action="'$_SERVER['PHP_SELF']'">';	
$requete1 = ("SELECT nom FROM liste_agents ORDER BY nom ASC");
$resultat1 = mysql_query($requete1);
		
while($remplissage_dela_liste = mysql_fetch_array($resultat1))

 {
    echo "<option>".$remplissage_dela_liste["nom"]."</option>\n";
}


?>
   </select>
   
<?php
//Après sélection d'un nom, affichage des informations
			
if ($_POST['nom'])
{
$requete2 = ("SELECT * FROM liste_agents");
$resultat2 = mysql_query($requete2);
$comptage_enregistrement = mysql_num_rows($resultat2);
while($row = mysql_fetch_array($resultat2))
	echo '<'.$row["matricule"].'>';
}
echo '</form>';	
?>

14 réponses

Messages postés
155
Date d'inscription
dimanche 28 septembre 2008
Statut
Membre
Dernière intervention
28 mars 2010
16
"c quoi le pb exactement? "

Tout simplement, quand je clic sur un des choix de ma liste déroulante j'aimerais que ça affiche dans la même page les données de ce choix.
Ok pour les parenthéses. Merci
15
Si tu veux que ça affiche sur la même page, tu n'as pas le choix, tu es obligé de passer par du javascript pour raffraichir juste un morceau de la page. Car lorsque tu vas valider le formulaire, la page PHP va être exécuté sur le serveur, celui ci va générer le résultat en HTML et envoyer la page au client. Du coup toute la page sera regénée.
Si tu veux contourner ce probleme il faut que tu envois les valeurs de ton formulaire sur la même page que le formulaire. Voici un "algo" qui pourrait le faire :

1) formulaire php qui propose la sélection et qui se renvoi les donnée à lui même
2) S'il y a ququ chose dans les valeurs POST alors
{
3) Si les valeurs POST sont égale à ququ chose alors
{
/////......
}
4) Sinon
{
//////........
}
}
5) Sinon
{
//// Ne rien faire
}
5
Messages postés
1027
Date d'inscription
mercredi 23 janvier 2008
Statut
Membre
Dernière intervention
17 février 2017
138
c quoi le pb exactement?

"mais je bute désespérement sur l'affichage de données sur une même page après avoir cliqué dans une liste déroulante" ????

les parentheses avant les guillements dans les requettes c est du jamais vu
3
  • requêtes

Commentaire non pertinent...
0
Messages postés
155
Date d'inscription
dimanche 28 septembre 2008
Statut
Membre
Dernière intervention
28 mars 2010
16
Bonjour Alain et encore merci pour ton aide.

Effectivement ça fonctionne mieux avec ta correction, mais je ne compris ou mettre cette ligne echo "<option value=\"".$id."\">le nom affiche</option>";

Voici l'état actuelle de ma page :

<?php
if(isset($_POST['liste1'])){
//si la liste a été "postée" c'est à dire choix fait
$liste1=$_POST['liste1'];
}else{
$liste1=-1;
}
?>
<TABLE border=0 width=97% BGCOLOR=#FFFFFF>
<TR align=center>
<TD> Suppression d'un agent</TD>
</TR>
</TABLE>
<BR><BR>
Sélectionnez un agent :
<form name="form1" method="post" action="">
<select name="liste1" onchange=" form1.submit();">
<option value=-1>-- Choisissez -- </option> <!-- il faut cette ligne pour avoir obliagtoirement un changement -->
<?php

$connection = mysql_connect('localhost', 'root', '');
$base = mysql_select_db('gestion_conges');

$requete = "SELECT nom FROM liste_agents";
$execution_requete = mysql_query($requete);
while($total = mysql_fetch_array($execution_requete))

//Liste déroulante
{
echo "<option value=\"".$total["nom"]."\"";
if($liste1==$total['nom']) { echo "selected"; }//ça c'est pour garder la selection lors du réaffichage
echo ">".$total['nom']."</option>\n";

}

?>
</select>
</form>
<?php
if($liste1 != -1){ //si on a fait un choix
//on refait une requette avec une condition
$requete = "SELECT nom, matricule, vacation, equipe, id FROM liste_agents WHERE nom='".$liste1."'";
$execution_requete = mysql_query($requete);

// on affiche les valeurs correspondantes au nom selectionné, pas besoin de boucle while, on ne récupère qu'un seul enregistrement
$total = mysql_fetch_array($execution_requete);
//echo "Nom: ".$total['nom']."<br />Matricule: ".$total['matricule']."<br />Vacation: ".$total['vacation']."<br />Equipe: ".$total['equipe'];
}
?>

<br />
</div>
<div id="right_bas"></div>
<div id="right_haut"></div>
<div id="rightbk">
<br />

<TABLE border=0 width=97% bgcolor=#FFFFFF>
<TR align=center>
<TD> Informations</TD>
</TR>
</TABLE>

<form method="post" action="">
<TABLE BORDER="0">
<CAPTION> </CAPTION>
<TR>
<TH>Nom :</TH>
<TD><input type="text" name="nom" value="<?php echo $total['nom'] ?>" size="20" readonly></TD>
<TH></TH>
<TH></TH>
<TH> Matricule :</TH>
<TD><input type="text" name="matricule" value="<?php echo $total['matricule'] ?>" size="20" readonly></TD>
<TR></TR>
<TH>Vacation :</TH>
<TD><input type="text" name="vacation" value="<?php echo $total['vacation'] ?>" size="20" readonly></TD>
<TH></TH>
<TH></TH>
<TH>Equipe : </TH>
<TD><input type="text" name="equipe" value="<?php echo $total['equipe'] ?>" size="20" readonly></TD>
</TR>
</TABLE>
<br><br>
<input type="submit" name="supprimer" value="Supprimer">
<input type="hidden" name="id" value="<?php echo $total['id'] ?>">

<?php
$id = $_POST["id"];
$result = mysql_query("DELETE FROM liste_agents WHERE id='".$id."'");

if (!$result) {
echo "La suppression a échouée<br>";
} else {
echo "Agent supprimé !<br>";
}
?>
</form>
3
Messages postés
5358
Date d'inscription
dimanche 3 février 2008
Statut
Membre
Dernière intervention
13 février 2017
895
salut,

qqs retctifs


<?php
if(isset($_POST['liste1'])){
	//si la liste a été "postée" c'est à dire choix fait
	$liste1=$_POST['liste1'];
}else{
	$liste1=-1;
}
?>
<TABLE border=0 width=97% BGCOLOR=#FFFFFF>
<TR align="center">
<TD> Suppression d'un agent</TD>
</TR>
</TABLE>
<BR><BR>
Sélectionnez un agent :
<form name="form1" method="post" action="">
<select name="liste1" onchange=" form1.submit();">
<option value=-1>-- Choisissez -- </option> <!-- il faut cette ligne pour avoir obliagtoirement un changement -->
<?php

$connection = mysql_connect('localhost', 'root', '');
$base = mysql_select_db('gestion_conges');

$requete = "SELECT nom FROM liste_agents";
$execution_requete = mysql_query($requete);
while($total = mysql_fetch_array($execution_requete))

//Liste déroulante
{
echo "<option value=\"".$total["nom"]."\"";
if($liste1==$total['nom']) { echo "selected"; }//ça c'est pour garder la selection lors du réaffichage
echo ">".$total['nom']."</option>\n";

}

?>
</select>
</form>
<?php
if($liste1 != -1){ //si on a fait un choix
//on refait une requette avec une condition
$requete = "SELECT nom, matricule, vacation, equipe, id FROM liste_agents WHERE nom='".$liste1."'";
$execution_requete = mysql_query($requete);

// on affiche les valeurs correspondantes au nom selectionné, pas besoin de boucle while, on ne récupère qu'un seul enregistrement
$total = mysql_fetch_array($execution_requete);
//echo "Nom: ".$total['nom']."<br />Matricule: ".$total['matricule']."<br />Vacation: ".$total['vacation']."<br />Equipe: ".$total['equipe'];
// }  si on déplace cette accolade plus bas ça a l'avantage de na pas afficher la partie Informations tant que le choix n'a pas été fait dans la lsite1
?>

<br />
</div>
<div id="right_bas"></div>
<div id="right_haut"></div>
<div id="rightbk">
<br />

<TABLE border=0 width=97% bgcolor=#FFFFFF>
<TR align=center>
<TD> Informations</TD>
</TR>
</TABLE>

<form method="post" action="">
<TABLE BORDER="0">
<CAPTION> </CAPTION>
<TR>
<TH>Nom :</TH>
<TD><input type="text" name="nom" value="<?php echo $total['nom'] ?>" size="20" readonly></TD>
<TH></TH>
<TH></TH>
<TH> Matricule :</TH>
<TD><input type="text" name="matricule" value="<?php echo $total['matricule'] ?>" size="20" readonly></TD>
<TR></TR>
<TH>Vacation :</TH>
<TD><input type="text" name="vacation" value="<?php echo $total['vacation'] ?>" size="20" readonly></TD>
<TH></TH>
<TH></TH>
<TH>Equipe : </TH>
<TD><input type="text" name="equipe" value="<?php echo $total['equipe'] ?>" size="20" readonly></TD>
</TR>
</TABLE>
<br><br>
<input type="hidden" name="id" value="<?php echo $total['id'] ?>"> <!-- champ cache -->
<input type="submit" name="supprimer" value="Supprimer">
<input type="hidden" name="id" value="<?php echo $total['id'] ?>">
</form> <!-- la fin du form içi ! -->
<?php
} // accolade de fin de if liste postee


// si je comprend bien tu veux supprimer l'agent qui est affiché
//donc dans ce cas mets simplement un champ caché contenant l'id (voir plus haut)

if(isset($_POST['supprimer'])){
	//on ne fait ça que si bouton supprimer cliké
	$id = $_POST["id"];
	$result = mysql_query("DELETE FROM liste_agents WHERE id='".$id."' LIMIT 1");
	//on met limite 1 pour plus de sécurité si pb on supprime pas tout 

	if (!$result) {
		echo "La suppression a échouée<br>";
	} else {
		echo "Agent supprimé !<br>";
	}
}
?>


0
Bonjour je voudrais :
1 : remplir une liste déroulante avec PHP5 à partir d'une base de données,
2 : à partir de ces informations remplir une autre une liste déroulante par rapport à la valeur sélectionner.
Merci de votre aide vous pouvez me l'envoyer à ***@***
0
bonjour bruno,
Je voulais tout simplement savoir si apres la selection dans liste deroulante tout de suite apres ca va afficher le resultat sur le page.
En faite j'ai deja essaier sur un peut presque meme code mais ca n'a pas marcher sur la meme page.
Ok merci de me repondre. ; )
Katr vin
0
Messages postés
155
Date d'inscription
dimanche 28 septembre 2008
Statut
Membre
Dernière intervention
28 mars 2010
16
Merci beaucoup. Bonne soirée
2
Messages postés
1027
Date d'inscription
mercredi 23 janvier 2008
Statut
Membre
Dernière intervention
17 février 2017
138
le pb est la même page je ne sais pas trop ce que ca veut dire mais j'imagine que ca veut dire que la page n'est pas relue ( ca pourrait être une page relue - la même sans que l'utilisateur sans aperçoive)

CAR
le php crée une page html APRES avoir fait le code php DONC tu ne peux rien afficher uen fois le php fini
tu dois donc utiliser du javascript et là je ne sais pas trop
sinon tu peux aussi marquer comme :action=" $_SERVER['PHP_SELF']" comme tu as fait
1
Messages postés
155
Date d'inscription
dimanche 28 septembre 2008
Statut
Membre
Dernière intervention
28 mars 2010
16
Mieux vaut tard que jamais. Merci messieurs pour vos réponses, j'ai trouvé la fonction java permettant de faire réagir ma liste quand je clic : OnChange. Pour le moment je n'ai aucunes notions en java donc je viens vers vous une nouvelle fois.
Cette fois je vais tenter d'être plus clair que la première fois.

Ma liste déroulante est alimenté par un champ "nom" contenu dans ma table liste_agents de ma base mysql.
Quand je clic sur un nom figurant dans ma liste, j'affiche une nouvelle page pour le moment vide.
J'aimerais remplir cette page avec les informations en rapport avec le nom sélectionné dans la liste, c'est informations sont contenu dans la table liste_agents. Exemple : je clic sur serge, une page s'ouvre et affiche son matricule, sa vacation etc...
Pour le moment je ne sais pas si je dois refaire un bloc php à la suite de </form> et refaire une requete sql pour récupérer les info de liste_agents, ou bien s'il faut ajouter une fonction java. Je suis un peu perdu car je sais afficher des info. via un bouton sur un formulaire mais là je n'ai pas de bouton mais une liste. Je continu mes recherches et mon apprentissage en attendant une âme charitable :)

Voici mon code sur la 1er page selection.php
2eme page : affiche.php
(Evidèment mon but final est de n'avoir qu'une seule page pour sélectionner et afficher.)

<html>
Sélectionnez un agent :
<form name="form1" method="post" action="affiche.php">
<select name="liste1" onchange=" form1.submit()">
<?php

$connection = mysql_connect('localhost', 'root', '');
$base = mysql_select_db('gestion_conges');

$requete = 'SELECT nom, matricule, vacation, equipe FROM liste_agents';
$execution_requete = mysql_query($requete);
while($total = mysql_fetch_array($execution_requete))

//Liste déroulante

{
echo "<option>".$total["nom"]."</option>\n";
}

?>
</select>
</form>

</html>
1
Messages postés
5358
Date d'inscription
dimanche 3 février 2008
Statut
Membre
Dernière intervention
13 février 2017
895
Bonsoir,

quand tu parles de java je suppose que tu veux dire javascript ?

Si tu acceptes que ta page se recharge après la selection dans la liste pas besoin de javascript

une solution:

<html>
<head>
<head>
<body>
<?php
if(isset($_POST['liste1'])){
	//si la liste a été "postée" c ad choix fait
	$liste1=$_POST['liste1'];
}else{
	$liste1=-1;
}
?>
S&eacute;lectionnez un agent :
<form name="form1" method="post" action="affiche.php">
<select name="liste1" onchange=" form1.submit();">
	<option value=-1>-- Choisissez -- </option> <!--  il faut cette ligne pour avoir obliagtoirement un changement -->
<?php

$connection = mysql_connect('localhost', 'root', '');
$base = mysql_select_db('gestion_conges');

$requete = "SELECT nom FROM liste_agents";
$execution_requete = mysql_query($requete);
while($total = mysql_fetch_array($execution_requete))

//Liste déroulante

{
echo "<option value=\"".$total["nom"]."\"";
if($liste1==$total['nom']) { echo "selected"; }//ça c'est pour garder la selection lors du réaffichage 
echo ">".$total['nom']."</option>\n";
}

?>
</select>
</form>
<?php
if($liste1 != -1){ //si on a fait un choix
	//on refait une requette avec une condition
	$requete = "SELECT nom, matricule, vacation, equipe FROM liste_agents WHERE nom='".$liste1."'";
	$execution_requete = mysql_query($requete);

	// on affiche les valeurs correspondantes au nom selectionné, pas besoin de boucle while, il n'y en aura qu'un
	$total = mysql_fetch_array($execution_requete)
	echo "Nom: ".$total['nom']."<br />Matricule: ".$total['matricule']."<br />Vacation: ".$total['vacation']."<br />Equipe: ".$total['equipe'];
}


//fermeture connexion à mysql
mysql_close();

?>

<body>
</html>


sinon si tu ne veux absolument pas que ta page se recharge, tu dois utiliser de l'AJAX / javascript

le choix dans la liste 1 lance une fonction AJAX qui appelle un script php sur le serveur en lui passant la valeur du choix

ce script va lire les valeurs dans la BDD et renvoyer la résultat à Ajax, ce dernier va écrire la réonse dans la page

c'est plus fluide, mais un peu plus compliqué.

@lain
0
>
Messages postés
5358
Date d'inscription
dimanche 3 février 2008
Statut
Membre
Dernière intervention
13 février 2017

bonjour alain

je cherche en vain un exemple sur la méthode ajax que tu cites ci-dessous


"sinon si tu ne veux absolument pas que ta page se recharge, tu dois utiliser de l'AJAX / javascript

le choix dans la liste 1 lance une fonction AJAX qui appelle un script php sur le serveur en lui passant la valeur du choix

ce script va lire les valeurs dans la BDD et renvoyer la résultat à Ajax, ce dernier va écrire la réonse dans la page

c'est plus fluide, mais un peu plus compliqué."
0
Messages postés
436
Date d'inscription
mardi 29 avril 2008
Statut
Membre
Dernière intervention
20 novembre 2015
35 >
Messages postés
5358
Date d'inscription
dimanche 3 février 2008
Statut
Membre
Dernière intervention
13 février 2017

Bonjour,
J'ai adapté ce code à mon besoin et je me retrouve confronté à un petit problème.
En, J'utilise la liste déroulante pour lister "les villes" contenues dans ma table afin que lorsque le visiteur va cliquer sur une "ville", alors tous les événements située dans cette ville vont s'afficher.
En utilisant le code que tu propose, étant donné que j'ai plusieurs lignes dans ma table pour une même ville, dans la liste déroulante j'ai des doublons et lorsque je clique sur une ville, seule la 1ère ligne contenu dans la table s'affiche.
Peu-ton adapter ce code à mon besoin?
Merci d'avance...
0
@Rom190686 : Essaie avec un SELECT DISTINCT ?
0
Messages postés
155
Date d'inscription
dimanche 28 septembre 2008
Statut
Membre
Dernière intervention
28 mars 2010
16
Grand merci à toi Alain_42.
Je comprend mieux la logique.

Non cela ne dérange absolument pas que la page se recharge.

En revanche j'ai une erreur essayant ton code : Parse error: parse error, unexpected T_ECHO

sur cette ligne : echo "Nom: ".$total['nom']."<br />Matricule: ".$total['matricule']."<br />Vacation: ".$total

['vacation']."<br />Equipe: ".$total['equipe'];
1
Messages postés
5358
Date d'inscription
dimanche 3 février 2008
Statut
Membre
Dernière intervention
13 février 2017
895
en fait l'erreur est sur la ligne au dessus il manque le ;

$total = mysql_fetch_array($execution_requete);


le php ne comprend plus alors echo au milieu.

@lain
-1
Je viens d'utiliser cette liste déroulante qui fonctionne.
Comment faire pour régler la hauteur d'affichage de la liste.
Actuellement sur 21 enregistrements 18 s'affichent et les autres par l'ascenseur de droite.
J'aimerai pouvoir en afficher 21 et plus, sans cet ascenseur.
Merci
1
Messages postés
155
Date d'inscription
dimanche 28 septembre 2008
Statut
Membre
Dernière intervention
28 mars 2010
16
Merci beaucoup Alain, tout fonctionne bien. Je vais pouvoir prendre le temp d'étudier ton code pour le refaire les yeux fermé.

Bonne soirée

Bruno
0
Messages postés
59
Date d'inscription
jeudi 29 octobre 2009
Statut
Membre
Dernière intervention
5 avril 2014

Je sais que ce pb c'est résolu, mais j'ai le meme pb ,pr cela j'ai essayé d'exécuter ce code,pr moi il m'affiche pas ces informations lorsque je sélectionne une valeur de liste.
echo "Nom: ".$total['nom']."<br />Matricule: ".$total['matricule']."<br />Vacation: ".$total['vacation']."<br />Equipe: ".$total['equipe'];
et pr la formulaire je trouve action="affiche.php" est ce que cette page est définie auparavant.
merciii
0
Messages postés
155
Date d'inscription
dimanche 28 septembre 2008
Statut
Membre
Dernière intervention
28 mars 2010
16
T'es un chef Alain ! Tout fonctionne impec. Par contre c'est normal les 2 champs hidden :

<input type="hidden" name="id" value="<?php echo $total['id'] ?>"> <!-- champ cache -->
<input type="submit" name="supprimer" value="Supprimer">
<input type="hidden" name="id" value="<?php echo $total['id'] ?>">
-1
Messages postés
5358
Date d'inscription
dimanche 3 février 2008
Statut
Membre
Dernière intervention
13 février 2017
895
Non c'est pas normal les deux, j'ai du faire un copier coller de trop !

un seul suffit largement.
-1
un petit tuto qui peut vous aider
http://pausecafe.fdev-creation.com/jquery-ajax-rechargement-dune-partie-dune-page/
0
Messages postés
155
Date d'inscription
dimanche 28 septembre 2008
Statut
Membre
Dernière intervention
28 mars 2010
16
Bonsoir,

si je peux encore abuser de vos compétences....maintenant que mon code fonctionne je voudrais pouvoir supprimer un enregistrement quand il s'affiche via la liste déroulante, le problème c'est que je ne sais quelle variable choisir, pour le moment j'ai choisi id via un champ hidden id, mais je ne suis pas sur de mon choix. Merci

<?php
$id = $_POST["id"];
$result = mysql_query(DELETE FROM liste_agents WHERE id=$id);
-2
Messages postés
5358
Date d'inscription
dimanche 3 février 2008
Statut
Membre
Dernière intervention
13 février 2017
895
Bonsoir,

attention qqs modifs

<?php
$id = $_POST["id"];
$result = mysql_query("DELETE FROM liste_agents WHERE id='".$id."'");



tu ne peux pas mettre un champ caché lié à toutes les options d'une liste déroulante

mais ton code est bon à condition que tu mettes dans ta liste

echo "<option value=\"".$id."\">le nom affiche</option>";

car ce qui est envoyé c'est la value lorsqu'on choisi
-1