Récupérer la valeur du bouton radio

Résolu/Fermé
philip51 Messages postés 49 Date d'inscription vendredi 6 janvier 2017 Statut Membre Dernière intervention 25 février 2020 - Modifié le 20 déc. 2019 à 17:34
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 - 22 déc. 2019 à 18:02
Bonjour

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 !!
A voir également:

6 réponses

yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
20 déc. 2019 à 17:32
bonjour, cela se fait en utilisant l'attribut "checked" du bouton. as-tu essayé simplement
echo 'checked';
?
0
philip51 Messages postés 49 Date d'inscription vendredi 6 janvier 2017 Statut Membre Dernière intervention 25 février 2020
20 déc. 2019 à 17:40
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>
0
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
20 déc. 2019 à 18:53
non, je n'avais pas lu les changements que tu as faits dans ta description.
0
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
20 déc. 2019 à 18:56
pour mémoriser ce genre d'information, je suggère d'utiliser les sessions.
cela se fait en ajoutant
session_start();
tout au début du code php (la ligne avant
include
).
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, ajoute
else {
    if( isset($_SESSION['choix']) ){
         $choix=;
    }
}

ensuite, dans les lignes 48 à 50, remplace
$_POST["choix"]
par
$choix
.
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
20 déc. 2019 à 19:07
<?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 !";
}
?>

0
philip51 Messages postés 49 Date d'inscription vendredi 6 janvier 2017 Statut Membre Dernière intervention 25 février 2020
20 déc. 2019 à 19:42
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
0
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476 > philip51 Messages postés 49 Date d'inscription vendredi 6 janvier 2017 Statut Membre Dernière intervention 25 février 2020
20 déc. 2019 à 20:14
il suffit alors de ne pas ajouter session_start(); dans la page index.php, un seul suffit.
0
philip51 Messages postés 49 Date d'inscription vendredi 6 janvier 2017 Statut Membre Dernière intervention 25 février 2020 > yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024
20 déc. 2019 à 20:26
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>
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650 > philip51 Messages postés 49 Date d'inscription vendredi 6 janvier 2017 Statut Membre Dernière intervention 25 février 2020
20 déc. 2019 à 20:54
Il faut utiliser la variable $choix
0
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476 > philip51 Messages postés 49 Date d'inscription vendredi 6 janvier 2017 Statut Membre Dernière intervention 25 février 2020
20 déc. 2019 à 21:29
as-tu testé ma suggestion en #4?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
philip51 Messages postés 49 Date d'inscription vendredi 6 janvier 2017 Statut Membre Dernière intervention 25 février 2020
Modifié le 22 déc. 2019 à 16:30
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
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
22 déc. 2019 à 16:37
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.
0
philip51 Messages postés 49 Date d'inscription vendredi 6 janvier 2017 Statut Membre Dernière intervention 25 février 2020 > jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024
22 déc. 2019 à 17:06
Le démarrage de la session est sur ma page index.php
0
philip51 Messages postés 49 Date d'inscription vendredi 6 janvier 2017 Statut Membre Dernière intervention 25 février 2020
Modifié le 22 déc. 2019 à 17:20
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 61
if ((isset($_POST['envoyer'])) AND (!empty($_SESSION['choix']))){

pour
if (!empty($_SESSION['choix'])){

et ça marche comme ça
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
22 déc. 2019 à 18:02
Il faut les effacer...
et modifier le code que je t'ai donné par ceci
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;
 }
 
 // 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.
0