Liste déroulante avec selected [Résolu]

samk28 22 Messages postés samedi 13 janvier 2018Date d'inscription 14 janvier 2018 Dernière intervention - 13 janv. 2018 à 14:26 - Dernière réponse : samk28 22 Messages postés samedi 13 janvier 2018Date d'inscription 14 janvier 2018 Dernière intervention
- 14 janv. 2018 à 17:30
Bonjour
Je suis sur un projet. mais depuis 2 jours je suis buté sur une difficulté.
je voulais afficher des données de ma table sur mon formulaire pour pourvoir faire une mise à jour. Mais la valeur qui s'affiche dans ma liste déroulante ne correspond pas à celle que j'ai dans la table. la liste m'affiche la dernière valeur de la liste déroulante quelque soit l'enregistrement que je doit modifier.

mon code;
 $sqlpr = "SELECT* FROM direction" ;
 $requetepr= mysql_query( $sqldir, $cnx ) ;

<th class="input-group-addon">Provenance</th>
  <td><select name="txtprovenance" id="txtprovenance" class="input-sm" required placeholder="provenance" >
                     <?php if( $_GET['idsondage'] == $result->idsondage)){?>
           <?php while( $resultpr = mysql_fetch_object( $requetepr  ) ) { ?>
                            <option value="<?php echo $result->txtprovenance;?>"
                            <?php  echo "selected"; ?> > <?php echo $resultpr->txtprovenance; ?>
                        </option>
                    <?php } ?>
                </select></td></tr>

Quand j'utilise $_POST['idsondage'] à la place de $_POST['idsondage'] pour le teste je recoit le message undefined indexe.
idsondage et l'identifiant de l'enregistrement à mettre à jour.
$sql = "SELECT *
            FROM sondage, direction
                WHERE idsondage = '".$_GET['idsondage']."'
$result=mysql_fetch_object( $requete  )


EDIT : Ajout des balises de code (la coloration syntaxique).

Explications disponibles ici :ICI

Merci d'y penser dans tes prochains messages.
Jordane45


SVP je sollicite votre aide pour solutionner ce probléme.
Afficher la suite 

Votre réponse

33 réponses

jordane45 22941 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 22 octobre 2018 Dernière intervention - Modifié par jordane45 le 13/01/2018 à 15:01
0
Merci
Bonjour,

1 - Attention, l'extension mysql était obsolète en PHP 5.5.0, et a été supprimée en PHP 7.0.0.
http://www.commentcamarche.net/faq/43261-php-l-extension-mysql-est-obsolete#top

À la place, tu peux (<gras DOIS </gras> ) utiliser l'extension MySQLi ou l'extension PDO_MySQL
http://www.commentcamarche.net/faq/44117-connexion-a-une-base-avec-pdo-mysqli

Si tu choisis PDO, pense à activer la gestion des erreurs : http://www.commentcamarche.net/faq/46512-pdo-gerer-les-erreurs


Avant de continuer.. je t'invite vivement à
1 - Modifier ta connexion à ta bdd (voir mon premier point ci-dessus)
2 - Lire ceci : http://www.commentcamarche.net/faq/48399-php-gestion-des-erreurs-debogage-et-ecriture-du-code

Ensuite... reviens nous voir avec ton code corrigé pour qu'on t'aide à avancer si les soucis persistent.






Cordialement, 
Jordane                                                                 
Commenter la réponse de jordane45
samk28 22 Messages postés samedi 13 janvier 2018Date d'inscription 14 janvier 2018 Dernière intervention - 13 janv. 2018 à 14:49
0
Merci
Merci de votre promptitude. je vais apporter les corrections. et je reviens vers vous.
samk28 22 Messages postés samedi 13 janvier 2018Date d'inscription 14 janvier 2018 Dernière intervention - 13 janv. 2018 à 18:02
$sqlpr = "SELECT*
FROM provenance, sondage WHERE idsondage = '".$id."'
" ;
$requetepr = mysqli_query( $bdd,$sqlpr) ;

<td><select name="txtprovenance" id="txtprovenance" class="input-sm" required placeholder="provenance" >
<?php if( $_GET['idsondage'] == $result['idsondage']){?>
<?php while( $resultpr = mysqli_fetch_array( $requetepr ) ) { ?>
<option value="<?php echo $resultpr['txtprovenance'];?>"
<?php echo "selected"; ?> > <?php echo ($resultpr['txtprovenance']); ?>
</option>
<?php
}
}
?>
</select></td></tr>

Tout d'abord merci pour votre contribution. j'ai corrigé le code mais le résultat est le même. la dernière valeur de ma liste s'affiche par défaut.

Au passage je suis débutant c'est mon tout premier programme en php.

Merci d'avance pour votre aide.
Commenter la réponse de samk28
jordane45 22941 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 22 octobre 2018 Dernière intervention - 13 janv. 2018 à 18:19
0
Merci
1- Pour poster du code sur le forum.. merci d'utiliser la coloration syntaxique (les balises de code).
Explications disponibles ici : http://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code

2 - Evite de fermer/ouvrir des balises php un peu partout. Préfère l'écriture de tout en PHP éventuellement.

3 - Il faut que tu mettes le SELECTED que sur la valeur qui t'interesse

Par exemple :
<?php

$sqlpr = "SELECT*
FROM provenance, sondage WHERE idsondage = '".$id."'
" ;
$requetepr = mysqli_query( $bdd,$sqlpr) ;
echo '<td>
        <select name="txtprovenance" id="txtprovenance" class="input-sm" required placeholder="provenance" >';
          if( $_GET['idsondage'] == $result['idsondage']){
            while( $resultpr = mysqli_fetch_array( $requetepr ) ) { 
              $selected = (condition) ? ' selected="selected" ' : '';
              echo '<option value="'. $resultpr['txtprovenance'].'" '.$selected.'>'; 
              echo $resultpr['txtprovenance']);
              echo '</option>';

            }
          }
echo '</select>';
?>

Dans le code ci-dessus... il faut que tu indiques la "condition" dans la ligne :
 $selected = (condition) ? ' selected="selected" ' : '';

par exemple... si tu utilises un formulaire avec du POST :
 $selected = ($resultpr['txtprovenance'] == $_POST['txtprovenance']) ? ' selected="selected" ' : '';
Commenter la réponse de jordane45
samk28 22 Messages postés samedi 13 janvier 2018Date d'inscription 14 janvier 2018 Dernière intervention - Modifié par samk28 le 13/01/2018 à 18:40
0
Merci
Merci encore. je vais tester.
mais condition c'est:
if( $_GET['idsondage'] == $result['idsondage'])

mais me génere ça n'affiche rien. la liste est vide sans éléments
samk28 22 Messages postés samedi 13 janvier 2018Date d'inscription 14 janvier 2018 Dernière intervention - 13 janv. 2018 à 20:28
ok merci. je vais m'y mettre.
samk28 22 Messages postés samedi 13 janvier 2018Date d'inscription 14 janvier 2018 Dernière intervention - 14 janv. 2018 à 12:09
Bonjour à tous
voila mon code simplifié:
<?php
$hote='localhost';
$utilisateur='root';
$mdp='';
$nombdd='labocom';
$bdd=mysqli_connect($hote,$utilisateur,$mdp,$nombdd);

//exécution de la requête:
$sql = "SELECT * FROM sondage, provenance ";
$requete=mysqli_query($bdd,$sql ) ;
$result = mysqli_fetch_array( $requete);
$id = $_GET["idsondage"] ;

?>
<!DOCTYPE html>
<html>
<head>
<meta charset="iso-8859-15" />
<!--[if lt IE 9]><script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script><![endif]-->
<title> Analyses du labo </title>

<link href="../bootstrap/css/bootstrap.min.css" rel="stylesheet">
<link rel="stylesheet" href="../Styles/style1.css" />



</head>
<body >
<form name="frm_s_modif_global" action="frm_s_modif_global.php" method="POST" >
<input type="hidden" name="idsondage" value="<?php echo($id) ;?>">
<div style="margin-top:5px;">
<table border="0" style="width: 30%;display:block;" >


<tr>
<th class="input-group-addon">Date recep.</th>
<td><input type="date" name="sdaterecep" id="sdaterecep" class="input-sm" value="<?php echo($result['sdaterecep']) ;?>"></td>
</tr>


<tr>
<th class="input-group-addon">Heure recep</th>
<td><input type="time" name="sheurerecep" class="input-sm" value="<?php echo($result['sheurerecep']) ;?>"></td>
</tr>

<tr>
<?php

echo '<tr>
<th class="input-group-addon">Provenance </th>
<td> <select name="txtprovenance" id="txtprovenance" class="input-sm" required placeholder="provenance" >';

while( $result = mysqli_fetch_array( $requete ) ) {
if (isset($_POST['txtprovenance'])){$selected = ($result['txtprovenance'] == $_POST['txtprovenance']) ? ' selected="selected" ' : '';
echo '<option value="'. $result['txtprovenance'].'" '.$selected.'>';
echo ($result['txtprovenance']);
echo '</option>';

}
}
echo '</select></td></tr>';
?>
<tr>

<td colspan="2"><input type="submit" class="btn btn-primary form-btn" name="edit" value="Modifier" ></td>
</tr>
</table>
</form>
<?php

?>


</body>
</html>
samk28 22 Messages postés samedi 13 janvier 2018Date d'inscription 14 janvier 2018 Dernière intervention - 14 janv. 2018 à 12:13
le problème au niveau de la liste déroulante qui n'affiche l’élément correspond à id sélectionné.

Merci d'avance pour votre inestimable contribution.
jordane45 22941 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 22 octobre 2018 Dernière intervention - 14 janv. 2018 à 12:16
Tu as laissé $result['txtprovenance']. Dans les value de tes options
Au lieux d'utiliser l'id
samk28 22 Messages postés samedi 13 janvier 2018Date d'inscription 14 janvier 2018 Dernière intervention - 14 janv. 2018 à 12:27
Merci. je n'ai pas bien saisie l'explication.
Je crois le problème se trouve au niveau de la condition. la variable $_POST['txtprovenence'] est indéfinie du coup le test est faux et aucune valeur sélectionnée ou affichée dans la liste. je ne sais pas comment faire.
Commenter la réponse de samk28
jordane45 22941 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 22 octobre 2018 Dernière intervention - 14 janv. 2018 à 12:39
0
Merci
<?php
  
  //activation des erreurs PHP
  error_reporting(E_ALL);
  ini_set('display_errors', TRUE);
  ini_set('display_startup_errors', TRUE);
    
  //connexion à la bdd => on a mis son code dans un fichier à part qu'il suffit d'inclure dans ta page comme ceci :
  require_once "cnxbdd.php";
   
 
  //récupération PROPRE des variables AVANT de les utiliser
   $id  = !empty($_GET["idsondage"]) ? $_GET["idsondage"] : NULL ;
   $txtprovenance = !empty($_POST['txtprovenance']) ? $_POST['txtprovenance'] : NULL;
    
	//exécution de la requête:
    $sql = "SELECT * FROM sondage, provenance "; //Erreur ici ! tu as deux tables... tu devrais donc avec une JOINTURE... 
    $requete=mysqli_query($bdd,$sql ) ;
	
?>
<!DOCTYPE html>
<html>
  <head>
    <meta charset="iso-8859-15" />
    <!--[if lt IE 9]><script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script><![endif]-->
    <title> Analyses du labo </title>
    <link href="../bootstrap/css/bootstrap.min.css" rel="stylesheet">
    <link rel="stylesheet" href="../Styles/style1.css" />
  </head>
  <body >
    <form name="frm_s_modif_global" action="frm_s_modif_global.php" method="POST" >
      <input type="hidden" name="idsondage" value="<?php echo($id) ;?>">
      <div style="margin-top:5px;">
      <table border="0" style="width: 30%;display:block;" > 
        <tr>
          <th class="input-group-addon">Date recep.</th>
          <td><input type="date" name="sdaterecep"  id="sdaterecep"  class="input-sm" value="<?php echo($result['sdaterecep']) ;?>"></td>
        </tr>
        <tr>
          <th class="input-group-addon">Heure recep</th>
          <td><input type="time" name="sheurerecep" class="input-sm" value="<?php echo($result['sheurerecep']) ;?>"></td>
        </tr>
        <tr>
          <?php
            echo '<tr>
                    <th class="input-group-addon">Provenance </th>
                    <td> 
                      <select name="txtprovenance" id="txtprovenance" class="input-sm" required placeholder="provenance" >';
                        while( $result = mysqli_fetch_array( $requete ) ) { 
                          $selected = ($result['txtprovenance'] == $txtprovenance) ? ' selected="selected" ' : '';
                          echo '<option value="'. $result['txtprovenance'].'" '.$selected.'>'; 
                          echo ($result['txtprovenance']);
                          echo '</option>'; 
                        }
                  echo '</select>
                    </td>
                  </tr>';
          ?>
        <tr>	 
          <td colspan="2"><input type="submit" class="btn btn-primary form-btn" name="edit" value="Modifier" ></td>
        </tr>	
      </table>
    </form>
  </body>
</html>

samk28 22 Messages postés samedi 13 janvier 2018Date d'inscription 14 janvier 2018 Dernière intervention - 14 janv. 2018 à 15:51
le print_r n'affiche aucune valeur même null malheurement.
et la valeur affichée de la liste reste bloquée au premier.
samk28 22 Messages postés samedi 13 janvier 2018Date d'inscription 14 janvier 2018 Dernière intervention - 14 janv. 2018 à 15:54
je crois la condition ci-dessou ne peut donner
 $txtprovenance = !empty($_POST['txtprovenance']) ? $_POST['txtprovenance'] : NULL;


mais celle est adaptée mais sans resultat aussi

$txtprovenance = !empty($_POST['idsondage']) ? $_POST['idsondage'] : NULL;
jordane45 22941 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 22 octobre 2018 Dernière intervention - 14 janv. 2018 à 17:16
Si le print ne donne rien même après que tu aies SUBMIT ton formulaire... c'est qu'il y a un souci dans celui-ci.

En copiant/collant ton code.. j'ai oublié de remettre la ligne
$result = mysqli_fetch_array( $requete);

Regarde si ça ne serait pas ça.
samk28 22 Messages postés samedi 13 janvier 2018Date d'inscription 14 janvier 2018 Dernière intervention - 14 janv. 2018 à 17:19
Merci j'ai déjà corrigé ça. je suis à bout....
samk28 22 Messages postés samedi 13 janvier 2018Date d'inscription 14 janvier 2018 Dernière intervention - 14 janv. 2018 à 17:30
ça y j'ai réussi voici le code.
Un grand merci Mr Jordan, j'ai beaucoup appris. encore merci.
c'est la condition qui causai problème. j'ai crée une 2eme requête pour la liste et fait la comparaison (voir) condition. Vous êtes génial merci.

 <?php
echo '<tr>
<th class="input-group-addon">Provenance </th>
<td>
<select name="txtprovenance" id="txtprovenance" class="input-sm" required placeholder="provenance" >';
while( $resultpr = mysqli_fetch_array( $requetepr ) ) {
$selected = ($resultpr['txtprovenance'] == $result['txtprovenance']) ? ' selected="selected" ' : '';
echo '<option value="'. $result['txtprovenance'].'" '.$selected.'>';
echo ($resultpr['txtprovenance']);
echo '</option>';
}
echo '</select>
</td>
</tr>';
echo $selected;
?>
Commenter la réponse de jordane45

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.