Récupérer la valeur du bouton radio
Résolu
philip51
Messages postés
50
Statut
Membre
-
jordane45 Messages postés 30426 Date d'inscription Statut Modérateur Dernière intervention -
jordane45 Messages postés 30426 Date d'inscription Statut Modérateur Dernière intervention -



Dans cette page j'ai 3 boutons radio qui me servent à sélectionner dans la bdd l'affichage à faire. Cette partie fonctionne correctement.
dans le tableau affiché, je récupère l'id sélectionné. cette partie fonctionne aussi correctement.
Mon soucis est que les boutons radio se remettent à blanc quand la page se recharge alors que je voudrais conserver et afficher celui qui a été sélectionné.
ci-dessous tout le code de ma page
<?php
include("connect.php");
$nom = '';
$prenom = isset($_GET['prenom']) ? $_GET['prenom'] : "";
$id = isset($_GET['id']) ? $_GET['id'] : "";
$nombre = '';
$message = '';
if (isset($_POST['choix'])){
if ($_POST['choix'] == 'A'){
$choix = 'A';
}
else if ($_POST['choix'] == 'F'){
$choix = 'F';
}
else if ($_POST['choix'] == 'T'){
$choix = 'T';
}
else {
$choix = 'T';
}
}
if ((isset($_POST['envoyer'])) AND (!empty($_POST['choix']))){
if ($choix == 'A'){
$req = $cnx->query("SELECT COUNT(*) AS nb FROM membres WHERE nationalite = 'Allemande'");
}
else if ($choix == 'F') {
$req = $cnx->query("SELECT COUNT(*) AS nb FROM membres WHERE nationalite = 'Française'");
}
else {
$req = $cnx->query("SELECT COUNT(*) AS nb FROM membres ");
}
$req->execute();
$data = $req->fetch();
$nombre = $data['nb'];
}
else {
$message = "Merci de choisir un affichage !";
}
?>
<div style="text-align:center;margin-left:auto;margin-right:auto;background-color:#7FDD4C;width:85%;box-shadow:0.7em 0.7em 0.7em #3A9D23;">
<p>
<FORM name="research" ACTION = "index.php?page=comodmember" METHOD="POST">';
<br />Pour modifier les données d'un membre, cliquez sur son nom<br />
<p style="text-align:left;"> Sélectionner la liste des membres à afficher :<br />
<input type="radio" name="choix" Value="T" <?php if(isset($_POST["choix"])) { if ($_POST["choix"] == "T"){ echo 'checked = "checked"';}} ?>style="margin-left:5em;">Tous *
<span style="margin-left:2em;"><input type="radio" name="choix" Value="A" <?php if(isset($_POST["choix"])) { if ($_POST["choix"] == "A"){ echo 'checked = "checked"';}} ?>>Allemand.e.s</span>
<span style="margin-left:2em;"><input type="radio" name="choix" Value="F" <?php if(isset($_POST["choix"])) { if ($_POST["choix"] == "F"){ echo 'checked = "checked"';}} ?>>Français.e.s</span>
<span style="margin-left:2em;"><input type="submit" name="envoyer" Value="Afficher" style="cursor:pointer;"></span>
<br/>
<span style="font-size:0.8em;"> * Affichage par défaut</span></p>
<?php
if ((isset($_POST['envoyer'])) AND (!empty($_POST['choix']))){
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);
//préparation de la requête et des variables
if ($choix == 'A') {
$sql = "SELECT * FROM membres WHERE nationalite = 'Allemande' ORDER BY nom, prenom";
}
else if ($choix == 'F') {
$sql = "SELECT * FROM membres WHERE nationalite = 'Française' ORDER BY nom, prenom";
}
else {
$sql = "SELECT * FROM membres ORDER BY nom, prenom";
}
try {
$requete = $cnx->prepare($sql);
$requete->execute();
$arr_membres = $requete->fetchAll();// on stocke le resultat de la requete dans un array
}
catch(Exception $e){
// en cas d'erreur dans la requete:
echo " Erreur ! ".$e->getMessage();
}
if(!empty($arr_membres)){ // on s'assure que la variable n'est pas vide
echo '<table border=1 style="text-align:left;width:100%;">';
echo '<tr style="text-align:center;"><td style="width:15em;">NOM</td><td style="width:8em;">PRENOM</td><td style="width:8em;">TELEPHONE</td><td style="width:20em;">ADRESSE INTERNET</td></TR>';
foreach($arr_membres as $M){ // on boucle dessus à l'aide d'un foreach
echo '<tr>';
?>
<td><a href="index.php?page=comodmember&id=<?php echo $M['id'];?>&prenom=<?php echo $M['prenom'];?>"><?php echo $M['nom'];?></a></td>
<td><?php echo $M['prenom'];?></td>
<td><?php echo $M['telephone'];?></td><td><?php echo $M['mail'];?></td></tr>
<?php
}
echo '</table>';
}
}
?>
</p>
<?php
echo $message; echo '<br />';
if (empty($message)){
echo 'Nombre total de membres : '. $nombre .'<br />';
}
?><br />
</FORM>
</div>
<?php
if (!empty($id)){
echo '<div style="">';
echo $id .' '.$prenom;
}
echo '</div>';
?>
je joins 3 copies d'écran
sur la 1ère copie c'est l'écran en ayant cliqué sur le bouton radio " Français "
sur la 2 è copie c'est l'écran après avoir cliqué sur "afficher"
sur la 3 è copie c'est l'écran après avoir cliqué sur le nom dans le tableau. Je récupère l'id et le nom mais le bouton radio "Français" n'est plus validé donc le tableau ne s'affiche plus !!
6 réponses
-
yg_be Messages postés 23437 Date d'inscription Statut Contributeur Dernière intervention Ambassadeur 1 588
bonjour, cela se fait en utilisant l'attribut "checked" du bouton. as-tu essayé simplementecho 'checked';
? -
Bonjour,
Merci pour la réponse.
sur la ligne du lien ?<td><a href="index.php?page=comodmember&id=<?php echo $M['id'];?>&prenom=<?php echo $M['prenom'];?>"><?php echo $M['nom'];?></a></td>
-
yg_be Messages postés 23437 Date d'inscription Statut Contributeur Dernière intervention Ambassadeur 1 588
pour mémoriser ce genre d'information, je suggère d'utiliser les sessions.
cela se fait en ajoutantsession_start();
tout au début du code php (la ligne avantinclude
).
ensuite, tu peux ajouter une ligne$_SESSION['choix']=$choix;
après la ligne 20 (entre les deux lignes avec l'accolade fermante)
après la ligne 21, celle avec la seconde accolade fermante, ajouteelse { if( isset($_SESSION['choix']) ){ $choix=; } }
ensuite, dans les lignes 48 à 50, remplace$_POST["choix"]
par$choix
. -
<?php session_start(); require_once "connect.php"; $sessionChoix = !empty($_SESSION['choix']) ? $_SESSION['choix'] : NULL; //prendre la valeur de session si remplie $choix = !empty($_POST['choix']) ? $_POST['choix'] : $sessionChoix; // prendra la valeur de post si elle est remplie, sinon celle de session $_SESSION['choix'] = $choix; $prenom = !empty($_GET['prenom']) ? $_GET['prenom'] : ""; $id = !empty($_GET['id']) ? $_GET['id'] : ""; $nombre = ''; $message = ''; $nom=''; if (isset($_POST['envoyer']) && $choix){ $strWhere = ""; switch($choix){ case "A": $strWhere = "WHERE nationalite = 'Allemande'"; break; case "F": $strWhere = "WHERE nationalite = 'Française'"; break; default: //aucun choix! break; } $sql = "SELECT COUNT(*) AS nb FROM membres " . $strWhere; try{ $req = $cnx->query($sql); $data = $req->fetch(); $nombre = $data['nb']; }catch(Exception $e){ echo "Erreur : " . $e->getMessage(); } } else { $message = "Merci de choisir un affichage !"; } ?>
-
Bonjour Jordane45,
merci pour la réponse.
il y a un soucis avec session_start(); car je l'ai déjà dans sur la page index.php
certaines pages doivent être réservées aux membres<?php session_start(); // déconnexion du site if (isset($_GET['deconnexion'])){ unset($_SESSION['utilisateur']); unset($_SESSION['id_utilisateur']); session_destroy(); }
la session est ignorée sur la page et génère un message d'erreur- je l'ai enlevé mais ça ne change rien. et pourtant si je fais un $_SESSION['choix']; la valeur est bien récupérée mais le tableau ne s'affiche pas.
Est ce que je n'ai pas un problème de code sur les boutons radios ? ou est ce que je dois tester la valeur de $_SESSION['choix'] ?<input type="radio" name="choix" Value="T" <?php if(isset($_POST["choix"])) { if ($_POST["choix"] == "T"){ echo 'checked = "checked"';}} ?>style="margin-left:5em;">Tous * <span style="margin-left:2em;"><input type="radio" name="choix" Value="A" <?php if(isset($_POST["choix"])) { if ($_POST["choix"] == "A"){ echo 'checked = "checked"';}} ?>>Allemand.e.s</span> <span style="margin-left:2em;"><input type="radio" name="choix" Value="F" <?php if(isset($_POST["choix"])) { if ($_POST["choix"] == "F"){ echo 'checked = "checked"';}} ?>>Français.e.s</span> <span style="margin-left:2em;"><input type="submit" name="envoyer" Value="Afficher" style="cursor:pointer;"></span> - as-tu testé ma suggestion en #4?
-
-
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
je reviens sur mon soucis d'affichage.
je ne comprends pas la ligne 4 !!$sessionChoix = !empty($_SESSION['choix']) ? $_SESSION['choix'] : NULL;
$sessionchoix n'est jamais appelé dans le code
lorsque je clique sur "envoyer" je récupère bien les valeurs lignes 8 et 9
j'ai changé les lignes 53 et 54 pour voir la réaction : rien ne change!! toujours pas d'affichage de la liste.
j'ai aussi changé la ligne 61. pas de changement
la ligne 50 est elle correcte ?
<?php require_once "connect.php"; $sessionChoix = !empty($_SESSION['choix']) ? $_SESSION['choix'] : NULL; //prendre la valeur de session si remplie $choix = !empty($_POST['choix']) ? $_POST['choix'] : $sessionChoix; // prendra la valeur de post si elle est remplie, sinon celle de session $_SESSION['choix'] = $choix; echo $_SESSION['choix']; echo $choix; $prenom = !empty($_GET['prenom']) ? $_GET['prenom'] : ""; $id = !empty($_GET['id']) ? $_GET['id'] : ""; $nombre = ''; $message = ''; $nom=''; if (isset($_POST['envoyer']) && $choix){ $strWhere = ""; switch($choix){ case "A": $strWhere = "WHERE nationalite = 'Allemande'"; break; case "F": $strWhere = "WHERE nationalite = 'Française'"; break; default: //aucun choix! break; } $sql = "SELECT COUNT(*) AS nb FROM membres " . $strWhere; try{ $req = $cnx->query($sql); $data = $req->fetch(); $nombre = $data['nb']; }catch(Exception $e){ echo "Erreur : " . $e->getMessage(); } } else { $message = "Merci de choisir un affichage !"; } ?> <link rel="stylesheet" type="text/css" href="css/style_connexion.css" /> <div style="text-align:center;margin-left:auto;margin-right:auto;background-color:#7FDD4C;width:85%;box-shadow:0.7em 0.7em 0.7em #3A9D23;"> <p> <FORM name="research" ACTION = "index.php?page=comodmember" METHOD="POST"> <br />Pour modifier les données d'un membre, cliquez sur son nom<br /> <p style="text-align:left;"> Sélectionner la liste des membres à afficher :<br /> <input type="radio" name="choix" Value="T" <?php if($_SESSION["choix"] == "T"){ echo 'checked = "checked"';} ?>style="margin-left:5em;">Tous * <span style="margin-left:2em;"><input type="radio" name="choix" Value="A" <?php if ($choix == "A"){ echo 'checked = "checked"';} ?>>Allemand.e.s</span> <span style="margin-left:2em;"><input type="radio" name="choix" Value="F" <?php if(isset($_POST["choix"])) { if ($_POST["choix"] == "F"){ echo 'checked = "checked"';}} ?>>Français.e.s</span> <span style="margin-left:2em;"><input type="submit" name="envoyer" Value="Afficher" style="cursor:pointer;"></span> <br/> <span style="font-size:0.8em;"> * Affichage par défaut</span></p> <?php // if ((isset($_POST['envoyer'])) AND (!empty($_POST['choix']))){ if ((isset($_POST['envoyer'])) AND (!empty($_SESSION['choix']))){ error_reporting(E_ALL); ini_set('display_errors', TRUE); ini_set('display_startup_errors', TRUE); //préparation de la requête et des variables if ($choix == 'A') { $sql = "SELECT * FROM membres WHERE nationalite = 'Allemande' ORDER BY nom, prenom"; } else if ($choix == 'F') { $sql = "SELECT * FROM membres WHERE nationalite = 'Française' ORDER BY nom, prenom"; } else { $sql = "SELECT * FROM membres ORDER BY nom, prenom"; } try { $requete = $cnx->prepare($sql); $requete->execute(); $arr_membres = $requete->fetchAll();// on stocke le resultat de la requete dans un array } catch(Exception $e){ // en cas d'erreur dans la requete: echo " Erreur ! ".$e->getMessage(); } if(!empty($arr_membres)){ // on s'assure que la variable n'est pas vide echo '<table border=1 style="text-align:left;width:100%;">'; echo '<tr style="text-align:center;"><td style="width:15em;">NOM</td><td style="width:8em;">PRENOM</td><td style="width:8em;">TELEPHONE</td><td style="width:20em;">ADRESSE INTERNET</td></TR>'; foreach($arr_membres as $M){ // on boucle dessus à l'aide d'un foreach echo '<tr>'; ?> <td><a href="index.php?page=comodmember&id=<?php echo $M['id'];?>&prenom=<?php echo $M['prenom'];?>"><?php echo $M['nom'];?></a></td> <td><?php echo $M['prenom'];?></td> <td><?php echo $M['telephone'];?></td><td><?php echo $M['mail'];?></td></tr> <?php } echo '</table>'; } } ?> </p> <?php echo $message; echo '<br />'; if (empty($message)){ echo 'Nombre total de membres : '. $nombre .'<br />'; } ?><br /> </FORM> </div>
Merci d'avance-
je ne comprends pas la ligne 4 !!
La Ligne est écrit via l'écriture TERNAIRE
C'est comme une IF
ca revient à écrire :if(!empty($_SESSION['choix'])){ $sessionChoix = $_SESSION['choix']; }else{ $sessionChoix = NULL; }
$sessionchoix n'est jamais appelé dans le code
Si ! Dans la ligne juste en dessous
$choix = !empty($_POST['choix']) ? $_POST['choix'] : $sessionChoix; // prendra la valeur de post si elle est remplie, sinon celle de session
Par contre... je ne vois pas le démarrage de tes sessions....
Il se trouve dans ton fichier connect.php ?
De plus, tout le code qui se trouve entre tes lignes 60 et 83 sont à supprimer de ton code.... car, si tu regardes bien, c'est déjà traité dans le code que je t'ai donné.
Pour finir,
fais donc des print_r des variable POST et SESSION et montre nous ce que ça donne.
-
-
Bonjour,
j'ai fait un print de $_SESSION['choix'] et je récupère bien la valeur cliquée
si je supprime les lignes 60 à 83 je vais avoir un souci car la requête n'est pas la même. la première sert à compter l'autre sert à afficher.
Les nuits portant conseil j'ai trouvé la solution avec votre aide
j'ai changé la ligne 61if ((isset($_POST['envoyer'])) AND (!empty($_SESSION['choix']))){
pourif (!empty($_SESSION['choix'])){
et ça marche comme ça-
Il faut les effacer...
et modifier le code que je t'ai donné par ceciif (isset($_POST['envoyer']) && $choix){ $strWhere = ""; switch($choix){ case "A": $strWhere = "WHERE nationalite = 'Allemande'"; break; case "F": $strWhere = "WHERE nationalite = 'Française'"; break; default: //aucun choix! break; } // Pour le nombre $sql = "SELECT COUNT(*) AS nb FROM membres " . $strWhere; try{ $req = $cnx->query($sql); $data = $req->fetch(); $nombre = $data['nb']; }catch(Exception $e){ echo "Erreur : " . $e->getMessage(); } // pour les données $sql = "SELECT * nb FROM membres " . $strWhere; try{ $req = $cnx->query($sql); $arr_membres = $req->fetchAll(); }catch(Exception $e){ echo "Erreur : " . $e->getMessage(); }
Pourquoi ? .. car on place le maximum de code PHP ... EN DEHORS du code html ( de préférence au début du fichier).
C'est plus simple à maintenir.
Et puis.. ça évite la répétition dans ton code code.
-