IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Balise Select , choix utilisateur et données issue de la Table [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre éprouvé Avatar de redoran
    Homme Profil pro
    Développeur-Amateur
    Inscrit en
    Juin 2010
    Messages
    1 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur-Amateur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Par défaut Balise Select , choix utilisateur et données issue de la Table
    Salam; j'ai une balise select qui récupère les données d'une BDD ; tout fonctionne bien.
    j'arrive pas a garder la valeur choisie par l'utilisateur après validation du formulaire , j'ai toujours le dernier enregistrement de la BDD.
    exemple:
    contenu de la balise: 2012,2011,2010,2009.
    valeur choisie : 2012.
    valeur affichée après validation du formulaire: 2009.
    normalemnt je doit avoir 2012.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    ..........
    <form method="post" action="<?php echo htmlentities ($_SERVER['PHP_SELF']); ?>">
    Année: <select name="an">
    	<?php
                    // début recuperation de la valeur choisie
    		if(isset($_POST['an']) && $_POST['an'] <>"")
    		{
    		$att = 'selected="selected"';
    		echo '<option value="'.$_POST['an'].'" '.$att.'>'.$_POST['an'].'</option>';
    		}	
    		// fin récupération de la valeur choisie 
     
                   // début de la liste BDD										
    		foreach ($an as $date)  {
    		// on affiche les informations de l'enregistrement en cours
    		$att = '';
    		if ( !empty($date['an'])) {
    		$att = ' selected="selected"';
    		}
    		echo '<option value="'.$date['an'].'" '.$att.'>'.$date['an'].'</option>';
     
    		}
    		?>
    		</select>
    		<input type="submit" name="validform" value="OK"/>
    		</form>

  2. #2
    Expert confirmé
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Par défaut
    Pour plus de clarté, tu devrais mettre tous tes contrôles et initialisations avant de commencer à afficher la page.

    Ensuite, pour marquer l'attribut selected, tu peux faire comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    <?php
     
    $i_annee = filter_input(INPUT_POST, 'an', FILTER_SANITIZE_NUMBER_INT);
    $a_span  = array(2009, 2012);
     
    // le reste de tes traitements PHP ici
     
    ?>
    <!-- du code html ici -->
    <select name="an">
        <? foreach (range($span[0], $span[1]) as $an): ?>
        <? if ($an === $i_annee): ?>
        <option value="<?=$an?>" selected="selected"><?=$an?></option>
        <? else: ?>
        <option value="<?=$an?>"><?=$an?></option>
        <? endif ?>
        <? endforeach ?>
    </select>
    Pour l'attribut action de <form> je rappelle que s'il n'est pas présent, l'url en cours est utilisée (ce qui revient à action="#")

  3. #3
    Membre éprouvé Avatar de redoran
    Homme Profil pro
    Développeur-Amateur
    Inscrit en
    Juin 2010
    Messages
    1 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur-Amateur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Par défaut
    Salam; merci d'avoir donnée suite a mon post.
    j'ai testé votre code mais j'ai rien d'affiché dans la balise.
    code complet:
    le traitement se fait dans la même page
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
    // requête d'extraction des années enregistrés dans la table
    $listan=$cbd->prepare('SELECT DISTINCT YEAR(datedec) AS an FROM `conteneur` ORDER BY datedec DESC ');
            try {
    		// On envois la requête
    		$listan->execute();
    		// On récupère en 1er toutes les données
    		$an = $listan->fetchAll(PDO::FETCH_ASSOC);
    		// libèré la connexion du serveur
    		$listan->closeCursor();	
    	      }
              catch( Exception $e ){
    	        echo 'Erreur d\'affichage : ', $e->getMessage();
    			  }
    				/*--------------------- fin recup*/
    ...........
    ...........
    // partie concernée par l'affichage
     
    <form method="post" action="<?php echo htmlentities ($_SERVER['PHP_SELF']); ?>">
     
    	<?php
    	$i_annee = filter_input(INPUT_POST, 'an', FILTER_SANITIZE_NUMBER_INT);
    	$span  = $an;  // $an 	tableau qui recupére les données de la requête d'extraction
    	?>
     
       Année: <select name="an">
     
    	          <? foreach (range($span[0], $span[1]) as $an): ?>  // là j'ai pas compris le fonctionnement 
    	          <? if ($an === $i_annee): ?>
    	          <option value="<?=$an?>" selected="selected"><?=$an?></option>
    	          <? else: ?>
    	          <option value="<?=$an?>"><?=$an?></option>
    	          <? endif ?>
    	          <? endforeach ?>
               </select>
    <input type="submit" name="validform" value="OK"/>
     </form>
    <? ....?> sa risque pas de généré des erreurs surtout s'il y'a du XML

  4. #4
    Expert confirmé
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Par défaut
    regarde le manuel de range, je l'ai utilisé pour l'exemple mais si tu as un tableau avec toutes les années dedans, un simple foreach dessus suffira.

    Autre recommandation: afin d'éviter de polluer le namespace global avec des tonnes de variables dont il faudra se rappeller (pour éviter de les écraser), je te recommande de découper tes blocs de traitements en fonctions, tu y gagnera beaucoup en clarté.

    Voici ce que ça donne avec ton besoin:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    <?php
     
    // initialisation ici
     
    function get_year_list ($order = "DESC") {
        global $cbd;
        try {
            $query = "SELECT DISTINCT YEAR(`datedec`) AS `year` FROM `conteneur` ORDER BY `datedec` $order";
            $stmt  = $cbd->query($query); // pas vraiment besoin de préparer
            $years = array();
     
            foreach ($stmt->fetchAll(PDO::FETCH_ASSOC) as $row) {
                $years[] = $row['year'];
            }
     
            $stmt->closeCursor(); // optionnel
     
            return $year;
        }
        catch (Exception($e)) {
            // tu devrais logguer au lieu d'afficher
            echo 'Erreur #' . $e->getCode(); // l'utilisateur n'a rien à faire des messages d'erreurs
            return array();
        }
    }
     
    $selected_an = filter_input(INPUT_POST, 'an', FILTER_SANITIZE_NUMBER_INT);
     
    // autres traitements ici
     
    ?>
     
    <!-- code HTML ici -->
     
    <div>
        <label for="input0">Ann&eacute;e</label>
        <select name="an" id="input0">
            <? foreach (get_year_list() as $an): ?>
            <? if ($an === $selected_an): ?>
            <option value="<?=$an?>" selected="selected"><?=$an?></option>
            <? else: ?>
            <option value="<?=$an?>"><?=$an?></option>
            <? endif ?>
            <? endforeach ?>
        </select>
    </div>
     
    <!-- code HTML ici -->
    <? ....?> sa risque pas de généré des erreurs surtout s'il y'a du XML
    Si, justement. Mais tu ne dois mettre la balise <?xml version="1.0" encoding="UTF-8" ?> que pour XHTML, si tu est en HTML 4 ou 5, tu n'en a pas besoin.
    Si tu es en XHTML, tu peux le faire comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <?php defined('XML_HEADER') || define('XML_HEADER', '<?xml version="1.0" encoding="UTF-8" ?>'); ?>
    <?=XML_HEADER?>
    <html ...>
    Personnellement, je trouve le short open tag vraiment trop pratique pour m'en passer uniquement pour cette raison, mais c'est mon avis.

  5. #5
    Membre éprouvé Avatar de redoran
    Homme Profil pro
    Développeur-Amateur
    Inscrit en
    Juin 2010
    Messages
    1 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur-Amateur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Par défaut
    Re ;
    Autre recommandation: afin d'éviter de polluer le namespace global avec des tonnes de variables dont il faudra se rappeler (pour éviter de les écraser), je te recommande de découper tes blocs de traitements en fonctions, tu y gagnera beaucoup en clarté.
    oui pour l'instant je maitrise pas bien les fonctions je me pencherai dessous plus tard.
    voila je me suis inspiré de ton code pour réalisé le mien et je suis arrivé a:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    // même requête
    ...........
    <form method="post" action="<?php echo htmlentities ($_SERVER['PHP_SELF']); ?>">
     
    	Année: <select name="an">
    		<?php				
    		$annee = filter_input(INPUT_POST, 'an', FILTER_SANITIZE_NUMBER_INT);
     
    		foreach ($an as $date)  {
    		if(isset($_POST['an']) && $annee===$date['an'] )
    		{
    	         echo '<option value="<?=$annee?>" selected="selected"><?=$annee?></option>';
    		}  				
    		else{
    		echo'<option value="'.$date['an'].'">'.$date['an'].'</option>';
     
    			}
    		}	
    	       ?>
     
    	        </select>
    		<input type="submit" name="validform" value="OK"/>
    </form>
    là j'ai pas le bon affichage c.a.d:
    avant de cliquer sur le bouton OK j'ai la liste bien affiché:
    2012,
    2011,
    2009
    une fois que je choisi 2012 et je valide j'ai :
    un blanc (vide),
    2011,
    2009

  6. #6
    Membre éprouvé Avatar de redoran
    Homme Profil pro
    Développeur-Amateur
    Inscrit en
    Juin 2010
    Messages
    1 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur-Amateur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Par défaut
    avec cette solution sa marche bien mais j'ai des doutes !!!!!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    // même requête
    ...........
    <form method="post" action="<?php echo htmlentities ($_SERVER['PHP_SELF']); ?>">
     
        Année: <select name="an">
                   <?php				
    		$annee = filter_input(INPUT_POST, 'an', FILTER_SANITIZE_NUMBER_INT);
     
    		foreach ($an as $date)  {
    			if(isset($_POST['an']) && $annee===$date['an'] ) // pour afficher la valeur choisie par l'utilisateur
    			{
    			     echo '<option value="'.$annee.'" selected="selected">'.$annee.'</option>';
    			}  				
    			else{
    			     echo'<option value="'.$date['an'].'">'.$date['an'].'</option>'; // sinon la liste de la table BDD
     
    			}
    			}	
    		?>
     
    		</select>
    	<input type="submit" name="validform" value="OK"/>
    </form>
    s'il y'a une amélioration du code je suis preneur.
    PS: est ce que on est obligé d'écrire année sous forme de Ann&eacute;e , parce que chez moi l'affichage année est normale.
    for="input0" ????? sa sert a quoi ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2003] Regroupement de données issues de plusieurs tables
    Par taz devil dans le forum VBA Access
    Réponses: 9
    Dernier message: 10/07/2015, 22h41
  2. [MySQL] Intercallage et affichage avec des données issues de plusieurs tables SQL
    Par vinceom92 dans le forum PHP & Base de données
    Réponses: 14
    Dernier message: 02/03/2014, 14h37
  3. [PHP 5.0] Recuperer de l'info d'une balise Select à choix unique
    Par SGoldstein dans le forum Langage
    Réponses: 4
    Dernier message: 26/01/2012, 20h02
  4. Lier, modifier et cohérence des données issues de deux tables
    Par lawappe dans le forum Bases de données
    Réponses: 33
    Dernier message: 20/03/2009, 17h11
  5. faire un menu contextuel pour données issue d'1 table
    Par electrosat03 dans le forum Access
    Réponses: 2
    Dernier message: 27/02/2006, 19h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo