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 :

Conserver la sélection après la soumission du formulaire


Sujet :

PHP & Base de données

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    avril 2007
    Messages
    675
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : avril 2007
    Messages : 675
    Points : 141
    Points
    141
    Par défaut Conserver la sélection après la soumission du formulaire
    Bonsoir à tous,

    Voilà, j'utilise dans un formulaire 1 Select et 1 Input de type="Submit" et j'aimerai que le choix dans la liste déroulante reste sélectionné après l'envoi du formulaire.

    Voici mon code qui liste les bases Mysql dans PhpAdmin :

    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
    <style type="text/css">
       .encadrer-un-contenu{ border:1px solid black; padding:2px4px; margin-left:13px; background-color: #DDEEFF; color:#FFF;}
    </style>	
    <?php
        $db_server = 'localhost'; 
        $db_user_login = 'root';  
        $db_user_pass = '';      
        $db_name = 'Base_1';
     
        $conn_base = mysqli_connect($db_server,$db_user_login, $db_user_pass, $db_name);
     
    	$req_base= "SHOW DATABASES WHERE not (`Database` LIKE '%schema%' or `Database` LIKE 'mysql%' or `Database` LIKE 'sys%')";
     
    	$result_base=$conn_base->query($req_base);
     
    	echo '<form name="form6" id="form6" action="#" method="post">'; 
    		echo "<label><Font color=orange>Selectionnez la base&emsp;</font></label>";
    		echo '<SELECT name=table Style="margin-left:7px ;width:151px ;height:22px">';
    			while ($ligne=mysqli_fetch_array($result_base)){
    				echo "<option value='".$ligne[0]."'>".$ligne[0]."</option>";
    			} 
    		echo "</SELECT>";	
    		echo '&emsp;<input name="envoi2" type="submit" value="Filtrer les tables" Style="width:150px; height:22px; margin-left:0px">';
     
    		@$text=$_POST['envoi2']; 
    		if(isset($_POST['envoi2'])){
    			$nombase=$text=$_POST['table']; 
    			echo '<span class="encadrer-un-contenu"><Font color=blue>Base sélectionnée : </font><Font color=orange><b>'.$nombase .'</b></font></span>';
    		}
    	echo '</form>';
    Un petit exemple (liste des bases) :
    Base_1
    Base_2
    Base_3

    Admettons que je sélectionne "Base_2" et que je soumets le formulaire. Je souhaiterai qu'après l'envoi, la sélection "Base_2" soit toujours sélectionnée et que ça ne revienne pas sur Base_1 mais que ça reste sur "Base_2".

    Voilà j'aimerai savoir si c'est faisable car je n’ai pas trouvé la solution malgré mes recherches sur internet et c’est pourquoi je fais appel à votre aide.

    D'avance merci,

  2. #2
    Membre émérite Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    mars 2008
    Messages
    1 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : mars 2008
    Messages : 1 647
    Points : 2 330
    Points
    2 330
    Par défaut
    Bonjour,

    Si ce changement ne doit être utilisé qu'au submit du formulaire, il suffit d'écrire :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    $db_name = (!empty($_POST['table'])) ? $_POST['table'] : 'Base_1';

    Ceci signifie que si $_POST['table'] existe et qu'il n'est pas vide, on va l'utiliser pour instancier $db_name (ceci est basé sur l'attribut name du <select>)
    En réalité, ce code est un trou de sécurité parce que ça veut dire qu'on peut interroger n'importe quelle base de données (attention aux noms des variables et attributs ;-) un fois c'est "db" une fois c'est "table").
    Il vraudrait alors mieux définir une liste de DB disponibles et s'assurer que la valeur correspond à ce qui est autorisé :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $allowed_bases = ["Base_1", "Base_2", "Base_3"];
    $db_name = (!empty($_POST['table']) && in_array($_POST['table'], $allowed_bases)) ? $_POST['table'] : 'Base_1';


    Si ce changement doit perdurer au-delà de la soumission du formulaire (après un changement de page par exemple); j'utiliserais alors les Sessions PHP
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    session_start(); // ATTENTION, cette instruction doit être unique et se trouver le plus en haut possible dans le code (donc la première ligne du premier fichier chargé pour bien faire)
     
    $allowed_bases = ["Base_1", "Base_2", "Base_3"];
    if (!empty($_POST['table']) && in_array($_POST['table'], $allowed_bases)) {
        $_SESSION['db_name'] = $_POST['table'];
    }
    $db_name = (!empty($_SESSION['db_name']) && in_array($_SESSION['db_name'], $allowed_bases)) ? $_SESSION['db_name'] : 'Base_1';

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    avril 2007
    Messages
    675
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : avril 2007
    Messages : 675
    Points : 141
    Points
    141
    Par défaut
    Bonjour darkstar123456 et merci pour votre réponse,

    Base-1, Base-2, Base_3 ce sont des noms pour mon exemple.

    En fait mon code liste toutes les bases MySQL crées dans phpMyAdmin de WampServer, dans ce cas comment appliquer votre solution.

    Petite précision la variable « $nombase » doit être générée pour être utilisée dans une autre phase.

    @+

  4. #4
    Membre émérite Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    mars 2008
    Messages
    1 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : mars 2008
    Messages : 1 647
    Points : 2 330
    Points
    2 330
    Par défaut
    Bonjour,

    Si vous n'avez pas de question plus précise, je ne peux rien dire de plus, j'ai déjà répondu à tout en utilisant le code à disposition.
    Tout ce que vous avez à faire est de changer le nom des bases de données
    Et si vous ne souhaitez pas le principe de sécurité, utilisez simplement mon premier exemple (sans le in_array())

    Enfin, la variable $db_name est totalement inutile.
    En effet, c'est exactement la valeur de $db_name (sauf si le formulaire n'a pas été envoyé, elle n'a aucune valeur définie ce qui n'est pas terrible)

    Code php : 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
    <style type = "text/css">
        .encadrer-un-contenu{ border:1px solid black;
                              padding:2px4px;
                              margin-left:13px;
                              background-color: #DDEEFF; color:#FFF;}
    </style>
    <?php
    $db_server = 'localhost';
    $db_user_login = 'root';
    $db_user_pass = '';
    $db_name = (!empty($_POST['table'])) ? $_POST['table'] : 'Base_1';
     
    $conn_base = mysqli_connect($db_server, $db_user_login, $db_user_pass, $db_name);
     
    $req_base = "SHOW DATABASES WHERE not (`Database` LIKE '%schema%' or `Database` LIKE 'mysql%' or `Database` LIKE 'sys%')";
     
    $result_base = $conn_base->query($req_base);
     
    echo '<form name="form6" id="form6" action="#" method="post">';
    echo "<label><Font color=orange>Selectionnez la base&emsp;</font></label>";
    echo '<SELECT name=table Style="margin-left:7px ;width:151px ;height:22px">';
    while ($ligne = mysqli_fetch_array($result_base)) {
        echo "<option value='" . $ligne[0] . "'>" . $ligne[0] . "</option>";
    }
    echo "</SELECT>";
    echo '&emsp;<input name="envoi2" type="submit" value="Filtrer les tables" Style="width:150px; height:22px; margin-left:0px">';
     
    echo '<span class="encadrer-un-contenu"><Font color=blue>Base sélectionnée : </font><Font color=orange><b>' . $db_name . '</b></font></span>';
    echo '</form>';

Discussions similaires

  1. Réponses: 4
    Dernier message: 11/02/2014, 21h51
  2. Conserver plusieurs checkbox après une soumission
    Par babylone7 dans le forum Langage
    Réponses: 2
    Dernier message: 29/12/2010, 17h55
  3. [AC-2007] conserver une valeur après la fermeture du formulaire la contenant
    Par glougloup dans le forum VBA Access
    Réponses: 4
    Dernier message: 24/06/2010, 16h58
  4. Réponses: 3
    Dernier message: 15/02/2010, 09h34
  5. Réponses: 12
    Dernier message: 15/07/2009, 12h51

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