Afficher le contenus d'un choix d'un menu déroulant

Eléphanteau du PHP | 16 Messages

12 août 2015, 19:57

Bonsoir,
J'ai crée un menu déroulant affichant les données de ma table.
J'aimerais mais je ne sais pas par où commencer et comment m'y prendre pour que quand je sélectionne un choix cela m'affiche le contenus des autres colonnes de la même table relatif au même choix.
Je m'explique :
Dans ma table ci dessous http://hpics.li/abf2671
Je veux afficher la colonne PSN dans un menu déroulant comme ceci http://hpics.li/e436a11
Ok très bien sa OK.
Maintenant si je clique sur PremierPSN en dessous je veux voir apparaître le contenus de : Objet1/Email1/MSG1
Si je clique du DeuxiemePSN idem, Objet2/Email2/MSG2

EDIT: pour le moment j'ai penser a cela :

Code : Tout sélectionner

<?php if ($_POST['PSN']) { $contenu = "SELECT (Email,Message) FROM PS_Database.dbo.Recrutement WHERE PSN='$row'"; $st = odbc_prepare($GLOBALS['dbConn'],$contenu); $odr = odbc_num_rows($st); while($rows = odbc_fetch_array($st)) echo '<'.$rows["Email"].'>'; } ?>
à la suite du menu.
Mais sa fonctionne pas, il me demande la valeur de PSN :
Undefined index: PSN in..
J'ai vu qu'il faudrait un JS pour rafraichir?
Merci
Apprenti PHP/VB.NET

ynx
Mammouth du PHP | 586 Messages

13 août 2015, 11:45

Salut,

Effectivement puisque PHP est exécuté coté serveur (pour le dire plus simplement, PHP est exécuté avant le chargement de la page), tu ne peux pas récupérer la valeur de $_POST['PSN'] au premier chargement.

Deux solutions pour récupérer la valeur sélectionnée par l'utilisateur : utiliser un formulaire ou utiliser ajax. La deuxième solution permet de ne pas recharger entièrement la page comme le fait la soumission d'un formulaire, mais dans les deux cas le principe est le même : envoyer une requête au serveur avec la valeur de la liste déroulante pour que PHP puisse l'utiliser.

Voici un exemple simple en utilisant un formulaire :
<?php
if (!empty($_POST['PSN'])) {
	// l'utilisateur a selectionné un PSN, on peut effectuer la deuxième requete
	echo 'PSN sélectionné : ' . htmlspecialchars($_POST['PSN']);
	
	// requete2 ...
} else {
	// permier chargement de la page, l'utilisateur n'a pas selectionné de PSN, on affiche la liste des PSN
	echo 'Aucun PSN selectionné';
	
	// requete1 ...
}
?>
<form method="post">
	<select name="PSN" onchange="this.form.submit()">
		<option value="valeur1">PSN1</option>
		<option value="valeur2">PSN2</option>
		<option value="valeur3">PSN3</option>
	</select>
</form>
Grâce à l'attribut onchange de la liste déroulante, on soumet le formulaire dès que l'utilisateur sélectionne une valeur.
Rien de spécial coté PHP, on retrouve le début de ce à quoi tu avais pensé.

Bon développement

Eléphanteau du PHP | 16 Messages

13 août 2015, 13:31

Les valeurs du menu déroulant proviennent uniquement si on les rajoutes à la main.. mon but est que le menu déroulant pioche tous les row d'une colonnes
et qu'en cliquant sur la row cela affiche le contenus des autres colonnes relatif à la même row :/
Apprenti PHP/VB.NET

ynx
Mammouth du PHP | 586 Messages

13 août 2015, 13:51

Dans mon exemple, la liste déroulante est créée à la main. Mais tu peux évidemment parcourir les résultats de ta requête avec une boucle pour construire cette liste.

Par exemple :
<?php
// on récupère la liste des PSN
$requete1 = "SELECT PSN FROM PS_Database.dbo.Recrutement";
$st = odbc_prepare($GLOBALS['dbConn'], $requete1);
$resultatRequete1  = odbc_execute($st);


if (!empty($_POST['PSN'])) {
	$requete2 = "SELECT * FROM PS_Database.dbo.Recrutement WHERE PSN = ?";
	$st2 = odbc_prepare($GLOBALS['dbConn'], $requete2);
	$resultatRequete2  = odbc_execute($st2, array($_POST['PSN']));
}
?>
<form method="post">
	<select name="PSN" onchange="this.form.submit()">
		<?php while($row = odbc_fetch_array($resultatRequete1)) : ?>
			<option value="<?php echo htmlspecialchars($row['PSN']); ?>"<?php echo (!empty($_POST['PSN']) && $row['PSN'] === $_POST['PSN']) ? ' selected' : ''; ?>><?php echo htmlspecialchars($row['PSN']); ?></option>
		<?php endwhile; ?>
	</select>
</form>

<?php 
if (!empty($_POST['PSN'])) {
	$row = odbc_fetch_array($resultatRequete2);
	
	echo 'Email : ' . htmlspecialchars($row['Email']) . '<br>';
	echo 'Objet : ' . htmlspecialchars($row['Objet']) . '<br>';
	echo 'Message : ' . htmlspecialchars($row['Message']) . '<br>';
} 
?>

Eléphanteau du PHP | 16 Messages

13 août 2015, 15:25

Ah oui j'étais loin de se que j'avais fait :x,
Mon menu affiche rien dedans, pourtant sa m'a l'air correcte dans la requêtes et $row :o
Apprenti PHP/VB.NET