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 :

liste choix multiple : pb ré-affichage d'une option avec apostrophe


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    161
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 161
    Par défaut liste choix multiple : pb ré-affichage d'une option avec apostrophe
    salutatous,

    j'ai réalisé une liste à choix multiples sur le modèle fait par julp ici http://julp.developpez.com/php/formulaires/#L5.2

    Tout fonctionne à merveille SAUF une des options de ma liste, que voici :
    "Europe de l'Est / Russie"

    Cette option ne se ré-affiche pas comme ayant été sélectionnée, contrairement à toutes mes autres options !

    j'ai essayé de mettre un anti-slash devant l'apostrophe mais ça ne fonctionne pas non plus

    voici mon code :

    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
    <?php
     
    // options définies dans un tableau (plus facile à coder et à maintenir)
    $choix = array(
        "Aucune expérience internationale",
        "Amérique du Nord",
        "Amérique latine / Caraïbes",
        "Union européenne",
        "Europe de l'Est / Russie",
        "Moyen Orient",
        "Afrique du Nord",
        "Afrique francophone / Madagascar",
        "Afrique anglophone / lusophone",
        "Asie du Sud-Est / Chine",
        "Asie centrale",
        "Océanie"
    );
     
    // fonction permettant le ré-affichage des options sélectionnées par le candidat
    function selection($option) {
        for ($i = 0, $comptabilisation = count($_POST['experience_internationale_choix']); $i < $comptabilisation; $i++) {
            if ($_POST['experience_internationale_choix'][$i] == $option) {
                return TRUE;
            }
        }
        return FALSE;
    }
     
    ?>
     
    <form method="POST">
     
    <select name="experience_internationale_choix[]" size="12" style="background-color:#FFFFFF" multiple>
    	<?php
    	foreach ($choix as $valeur) {
    		if (isset($_POST['experience_internationale_choix']) && selection($valeur)) {
    			echo '<option selected>' . $valeur . '</option>';
    		} else {
    			echo '<option>' . $valeur . '</option>';
    		}
    	}
    	?>
    </select>
     
    <input type="submit" value="OK"/>
     
    </form>
    Merci d'avance pour votre aide
    Nico

  2. #2
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    Je ne sais pas si ça peut aider, mais j'ai une remarque à faire : tes champs option n'ont pas d'attributs "value". ..
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if (isset($_POST['experience_internationale_choix']) && selection($valeur)) {
    			echo '<option selected value=". $valeur .">' . $valeur . '</option>';
    		} else {
    			echo '<option value=". $valeur .">' . $valeur . '</option>';
    		}
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  3. #3
    Membre Expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Par défaut
    Bonjour,

    Est-ce que tu n'aurais pas les magic quotes d'activées ?
    Commences par regarder ce que contient $_POST['experience_internationale_choix'] quand tu choisis "Europe de l'Est / Russie" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    echo <pre>;
    echo var_dump($_POST['experience_internationale_choix']);
    echo </pre>;
    Par ailleurs, je te propose deux modifications de ton code :
    - passer en paramètre un code et non un libellé (évites le type de problème que tu rencontres) ;
    - utiliser in_array() dans ta fonction selection.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    161
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 161
    Par défaut
    Merci Celira, j'ai corrigé pour l'attribut "value"

    Eusebe,
    $_POST['experience_internationale_choix'] contient :

    array(1) {
    [0]=>
    string(25) "Europe de l\'Est / Russie"
    }

  5. #5
    Membre Expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Par défaut
    C'est donc bien un problème de magic quotes activés (ajout d'antislashs devant certains caractères spéciaux).

    Il faut utiliser la fonction stripslashes pour les retirer...

    Le mieux étant à mon avis d'utiliser des codes et pas des libellés...

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    161
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 161
    Par défaut
    ch'suis légèrement larguer avec ces magic-quotes !
    dans mon code, où dois-je placer stripslashes() ?

    car j'ai essayé sur $_POST['experience_internationale_choix'], sur $choix, sur $valeur...

    ça marche pas !!!

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    161
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 161
    Par défaut J'AI TROUVÉ !
    enfin ça fonctionne... grâce à la fonction suivante qui est à mettre en tout début de 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
    // Fonction qui supprime l'effet des magic quotes
    function stripslashes_r($var) {
    	// Si la variable passée en argument est un array, on appelle la fonction stripslashes_r dessus
        if(is_array($var)) {
    		return array_map('stripslashes_r', $var);
     
    	// Sinon, un simple stripslashes suffit
    	} else {
    		return stripslashes($var);
    	}
    }
     
    // Si les magic quotes sont activés, on les désactive grâce à la fonction
    if(get_magic_quotes_gpc()) {
       $_GET = stripslashes_r($_GET);
       $_POST = stripslashes_r($_POST);
       $_COOKIE = stripslashes_r($_COOKIE);
    }

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

Discussions similaires

  1. Réponses: 10
    Dernier message: 20/09/2019, 22h36
  2. Récuperer une liste à choix multiple
    Par madjidri dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 10/02/2009, 11h30
  3. Test sur une liste à choix multiple
    Par kaninama dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 20/05/2008, 18h03
  4. Réponses: 4
    Dernier message: 01/10/2006, 15h37
  5. Réponses: 1
    Dernier message: 12/07/2006, 09h51

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