Rechercher : dans
Par :

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

Dernière réponse le 22 jun 2009 à 12:03:47 bruno3591, le 28 sep 2008 à 20:15:28 
 Signaler ce message aux modérateurs

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>';	
?>
Configuration: Windows Vista, Ubuntu 8.06
Internet Explorer 7.0, firefox 3, Google Chrome.

Meilleures réponses pour « PHP : affichage données après clic dans liste » dans :
[PHP] Lister le contenu d'un répertoire VoirGrâce à PHP, il est possible d'afficher le contenu d'un répertoire et de ses sous-répertoires. Voici ci-dessous une fonction permettant de parcourir récursivement les répertoires et sous-répertoires et d'en afficher les fichiers : function...
[Webmaster] Afficher facilement le code php/xhtml de vos pages VoirSi vous voulez proposer a vos visiteurs de voir la source de vos fichiers (PHP ou HTML), il y a plusieurs solutions. En php Afficher le code php Afficher le code html En html Informations Voir aussi En php Afficher le code php La...
[PHP] Comment afficher l'adresse IP d'un visiteur ? VoirPour afficher l'adresse IP d'un visiteur sur votre site, insérez ce code dans la zone où vous voulez qu'elle s'affiche.
PHP - Affichage de texte sur le navigateur VoirLe but de PHP est de permettre la création de pages web dynamiques, ainsi son but premier est de pouvoir envoyer des données au navigateur. Les trois fonctions standards PHP fournit 3 fonctions permettant d'envoyer du texte au navigateur. Ces...
PHP - Récupération de données VoirPHP rend très simple la récupération de données envoyées par l'intermédiaire de formulaires HTML. Création d'un formulaire Grâce à la balise FORM du langage HTML, il est très simple de créer des formulaires comprenant : des champs de saisie des...
PHP - Bases de données VoirPhp permet un interfaçage très simple avec un grand nombre de bases de données. Lorsqu'une base de données n'est pas directement supportée par Php, il est possible d'utiliser un driver ODBC, pilote standard pour communiquer avec les bases de...

1

dindoun, le 28 sep 2008 à 21:38:42
  • +1

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

Répondre à dindoun

2

bruno3591, le 28 sep 2008 à 22:22:11

"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

Répondre à bruno3591

3

dindoun, le 29 sep 2008 à 09:19:29

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

Répondre à dindoun

4

DAG, le 29 sep 2008 à 10:13:26

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
}

Répondre à DAG

5

bruno3591, le 1 oct 2008 à 20:27:35

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>

Répondre à bruno3591

6

Alain_42, le 1 oct 2008 à 21:14:33
  • +2

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

Répondre à Alain_42

17

 pgrcsn, le 22 jun 2009 à 12:03:47

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é."

Répondre à pgrcsn

7

bruno3591, le 1 oct 2008 à 21:25:58

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'];

Répondre à bruno3591

8

Alain_42, le 1 oct 2008 à 21:36:27

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

Répondre à Alain_42

9

bruno3591, le 1 oct 2008 à 22:20:17

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

Répondre à bruno3591

10

bruno3591, le 3 oct 2008 à 19:56:34

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);

Répondre à bruno3591

11

Alain_42, le 3 oct 2008 à 20:28:25

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

Répondre à Alain_42

12

bruno3591, le 4 oct 2008 à 09:47:36

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>

Répondre à bruno3591

13

Alain_42, le 4 oct 2008 à 12:07:28
  • +2

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>";
	}
}
?>


Répondre à Alain_42

14

bruno3591, le 4 oct 2008 à 21:14:07

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'] ?>">

Répondre à bruno3591

15

Alain_42, le 4 oct 2008 à 21:38:16

Non c'est pas normal les deux, j'ai du faire un copier coller de trop !

un seul suffit largement.

Répondre à Alain_42

16

bruno3591, le 4 oct 2008 à 21:42:16

Merci beaucoup. Bonne soirée

Répondre à bruno3591