Liste déroulante avec selected [Résolu]

Messages postés
22
Date d'inscription
samedi 13 janvier 2018
Dernière intervention
14 janvier 2018
-
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

5 réponses

Messages postés
23537
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
7 décembre 2018
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
Messages postés
22
Date d'inscription
samedi 13 janvier 2018
Dernière intervention
14 janvier 2018
0
Merci
Merci de votre promptitude. je vais apporter les corrections. et je reviens vers vous.
samk28
Messages postés
22
Date d'inscription
samedi 13 janvier 2018
Dernière intervention
14 janvier 2018
-
$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
Messages postés
23537
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
7 décembre 2018
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
Messages postés
22
Date d'inscription
samedi 13 janvier 2018
Dernière intervention
14 janvier 2018
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
Messages postés
22
Date d'inscription
samedi 13 janvier 2018
Dernière intervention
14 janvier 2018
-
ok merci. je vais m'y mettre.
samk28
Messages postés
22
Date d'inscription
samedi 13 janvier 2018
Dernière intervention
14 janvier 2018
-
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
Messages postés
22
Date d'inscription
samedi 13 janvier 2018
Dernière intervention
14 janvier 2018
-
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
Messages postés
23537
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
7 décembre 2018
-
Tu as laissé $result['txtprovenance']. Dans les value de tes options
Au lieux d'utiliser l'id
samk28
Messages postés
22
Date d'inscription
samedi 13 janvier 2018
Dernière intervention
14 janvier 2018
-
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
Messages postés
23537
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
7 décembre 2018
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
Messages postés
22
Date d'inscription
samedi 13 janvier 2018
Dernière intervention
14 janvier 2018
-
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
Messages postés
22
Date d'inscription
samedi 13 janvier 2018
Dernière intervention
14 janvier 2018
-
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
Messages postés
23537
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
7 décembre 2018
-
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
Messages postés
22
Date d'inscription
samedi 13 janvier 2018
Dernière intervention
14 janvier 2018
-
Merci j'ai déjà corrigé ça. je suis à bout....
samk28
Messages postés
22
Date d'inscription
samedi 13 janvier 2018
Dernière intervention
14 janvier 2018
-
ç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.