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

Langage PHP Discussion :

Soucis sur un selected='selected' capricieux


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Inscrit en
    Septembre 2010
    Messages
    128
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 128
    Points : 51
    Points
    51
    Par défaut Soucis sur un selected='selected' capricieux
    Bonjour,

    Je suis confronté à un soucis concernant la récupération d'un "selected" après envoie par "header location".

    Soit le rewriting suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule  ^tout/([^/]+)/?$  page1.php?a=$1 [QSA]
    Le code de page1.php
    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
        <?php
        //L'information contient des lettres minuscules et/ou des tirets
        if(isset($_GET['a']) && !empty($_GET['a']))
        {
        //J'utilise une fonction qui récupère le numéro id
           $categorie = fonction_id($_GET['a']);
        //Le formulaire est envoyé   
        if(isset($_POST["envoyer"])){
           $teste1 = $_POST["titi"];
           if($teste1==0){
              echo 'Faites un choix dans titi';
           }
           else{
              $url= ''.$teste1.'/';
              header('Location: http://www.example.com/tout/'.$url);
              exit();
           }
     
        }   
        ?>
        <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
           "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
        <html xmlns="http://www.w3.org/1999/xhtml" lang="fr">
     
        <body>
     
        <form name="toto" action="<?php echo 'http://'.$_SERVER["SERVER_NAME"].''.$_SERVER["REQUEST_URI"].'';?>" method="post">
            <select name="titi" onchange="javascript:submit(this)">
               <option value="0">Choisissez</option>
               <option value="1" <?php if($teste1==1){echo "selected='selected'";}?>>a</option>
               <option value="2" <?php if($teste1==2){echo "selected='selected'";}?>>b</option>
               <option value="3" <?php if($teste1==3){echo "selected='selected'";}?>>c</option>
            </select>
          <input name="envoyer" value="envoyer" type="submit"/>
        </form>
     
        </body>
        </html>
        <?php
        //on ferme isset($_GET['a']
        }
        ?>
    Dans le code actuel, si la page se recharge dut à l'action du "onchange", mon "selected" fonctionne. Si je valide, je perd ma sélection et c'est normal.
    J'ai donc modifié les "selected" de cette façon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
        ....
        <option value="1"
        <?php
        if($teste1==1){
            echo "selected='selected'";
        }
        else if($teste1==$categorie){
            echo "selected='selected'";
        }
        ?>>a</option>
        ....
    Dans cette configuration, si je sélectionne les options dans l'ordre croissant (a, b, c) en validant à chaque fois, je garde ma sélection.
    Par contre, si je sélectionne l'option (c), que je valide et que je veuille re sélectionner soit l'option (a ou b), mon "selected" reste coincé sur l'option (c).

    En gros, je ne peux jamais remonter dans la liste ... Pourquoi ??

    Merci

  2. #2
    Membre régulier
    Inscrit en
    Avril 2010
    Messages
    66
    Détails du profil
    Informations personnelles :
    Âge : 33

    Informations forums :
    Inscription : Avril 2010
    Messages : 66
    Points : 70
    Points
    70
    Par défaut
    Bonjour,

    Je n'arrive pas trop à voir le problème non plus mais essayez de débugger avec des 'echo $teste1' après avoir bloqué (c) pour voir si le problème vient de l'envoi de la valeur ou après (lors des 'if(...)').

    Et au passage, pour :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
        ....
        <option value="1"
        <?php
        if($teste1==1){
            echo "selected='selected'";
        }
        else if($teste1==$categorie){
            echo "selected='selected'";
        }
        ?>>a</option>
        ....
    Vous pouvez réduire en écrivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
        ....
        <option value="1"
        <?php
        if($teste1 == 1 OR $teste1== $categorie){
            echo "selected='selected'";
        }
        ?>>a</option>
        ....

  3. #3
    Membre du Club
    Inscrit en
    Septembre 2010
    Messages
    128
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 128
    Points : 51
    Points
    51
    Par défaut
    Merci de votre réponse Hoder.

    Je viens de résoudre mon problème en vérifiant au préalable l'existence de $_POST["titi"] et là ça fonctionne .

    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
        ....
        <option value="1"
        <?php
        if(isset($_POST["titi"])){
            if($teste1==1){
                echo "selected='selected'";
            }
        }
        else{
            if($teste1==$categorie){
                echo "selected='selected'";
            }
        }
        ?>>a</option>
        ....
    Du coup et même si cela fonctionne, je me demande si ma méthode est correcte ..?

  4. #4
    Membre régulier
    Inscrit en
    Avril 2010
    Messages
    66
    Détails du profil
    Informations personnelles :
    Âge : 33

    Informations forums :
    Inscription : Avril 2010
    Messages : 66
    Points : 70
    Points
    70
    Par défaut
    Content que le problème soit règlé
    Sinon pour la méthode et bien, comme je l'ai dis plus haut, vous pouvez réduire en mettant juste un 'OR' et/ou sinon pour la vérification de l'existence de $_POST['titi'], vous devriez le placer plus tôt.
    Ainsi, vous auriez :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    //Le formulaire est envoyé   
        if(isset($_POST["envoyer"]) OR isset($_POST["titi"])){
           $teste1 = $_POST["titi"];
           if($teste1==0){
              echo 'Faites un choix dans titi';
           }
           else{
              $url= ''.$teste1.'/';
              header('Location: http://www.example.com/tout/'.$url);
              exit();
           }
    Bonne journée

  5. #5
    Membre du Club
    Inscrit en
    Septembre 2010
    Messages
    128
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 128
    Points : 51
    Points
    51
    Par défaut
    Ok et merci pour les infos

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

Discussions similaires

  1. [ASP] utilisation de <select selected=selected >
    Par richard_sraing dans le forum ASP
    Réponses: 10
    Dernier message: 26/04/2010, 15h52
  2. transformation sur une requete SELECT
    Par juniorAl dans le forum Langage SQL
    Réponses: 8
    Dernier message: 08/04/2005, 18h12
  3. lock conflict sur une req select
    Par veronique dans le forum Connexion aux bases de données
    Réponses: 6
    Dernier message: 02/02/2005, 09h12
  4. Trie sur une requette SELECT
    Par Yali dans le forum Langage SQL
    Réponses: 6
    Dernier message: 13/08/2004, 09h56
  5. Optimisations mysql sur les requêtes SELECT: index
    Par leo'z dans le forum Débuter
    Réponses: 2
    Dernier message: 29/11/2003, 13h23

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