Récupérer la valeur du bouton radio [Résolu]

Signaler
Messages postés
49
Date d'inscription
vendredi 6 janvier 2017
Statut
Membre
Dernière intervention
25 février 2020
-
Messages postés
28935
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
9 juillet 2020
-
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 !!

6 réponses

Messages postés
11504
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
9 juillet 2020
659
bonjour, cela se fait en utilisant l'attribut "checked" du bouton. as-tu essayé simplement
echo 'checked';
?
Messages postés
49
Date d'inscription
vendredi 6 janvier 2017
Statut
Membre
Dernière intervention
25 février 2020

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>
Messages postés
11504
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
9 juillet 2020
659
non, je n'avais pas lu les changements que tu as faits dans ta description.
Messages postés
11504
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
9 juillet 2020
659
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
.
Messages postés
28935
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
9 juillet 2020
2 607
<?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 !";
}
?>

Messages postés
49
Date d'inscription
vendredi 6 janvier 2017
Statut
Membre
Dernière intervention
25 février 2020

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
Messages postés
11504
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
9 juillet 2020
659 >
Messages postés
49
Date d'inscription
vendredi 6 janvier 2017
Statut
Membre
Dernière intervention
25 février 2020

il suffit alors de ne pas ajouter session_start(); dans la page index.php, un seul suffit.
Messages postés
49
Date d'inscription
vendredi 6 janvier 2017
Statut
Membre
Dernière intervention
25 février 2020
>
Messages postés
11504
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
9 juillet 2020

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>
Messages postés
28935
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
9 juillet 2020
2 607 >
Messages postés
49
Date d'inscription
vendredi 6 janvier 2017
Statut
Membre
Dernière intervention
25 février 2020

Il faut utiliser la variable $choix
Messages postés
11504
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
9 juillet 2020
659 >
Messages postés
49
Date d'inscription
vendredi 6 janvier 2017
Statut
Membre
Dernière intervention
25 février 2020

as-tu testé ma suggestion en #4?
Messages postés
49
Date d'inscription
vendredi 6 janvier 2017
Statut
Membre
Dernière intervention
25 février 2020

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
Messages postés
28935
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
9 juillet 2020
2 607
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.
Messages postés
49
Date d'inscription
vendredi 6 janvier 2017
Statut
Membre
Dernière intervention
25 février 2020
>
Messages postés
28935
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
9 juillet 2020

Le démarrage de la session est sur ma page index.php
Messages postés
49
Date d'inscription
vendredi 6 janvier 2017
Statut
Membre
Dernière intervention
25 février 2020

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
Messages postés
28935
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
9 juillet 2020
2 607
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.