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 :

Select et variable de session [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre éclairé
    Homme Profil pro
    sans
    Inscrit en
    Mai 2007
    Messages
    483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Mai 2007
    Messages : 483
    Par défaut Select et variable de session
    Bonjour,

    Travaillant avec plusieurs langues, je cherche à simplifier un code selon la valeur d'une variable de session qui contient la langue en question.
    Pour l'instant, j'utilise l'instruction SWITCH CASE et à chaque valeur, j'ai ça.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    	$select = "SELECT * FROM `plant` WHERE `manquante` LIKE '%polonais%' ORDER BY `polonais`";
    		$result =mysql_query($select,$link) or die ('Erreur :'.mysql_errno().mysql_error());
    		while ($rows=mysql_fetch_array($result))
    			{
    		$nomvernaculaire = ucfirst($rows['polonais']);
    		echo "$nomvernaculaire, ";
    			}
    Ca fonctionne mais je voudrais passer à ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    	$select = "SELECT * FROM `plant` WHERE `manquante` LIKE '%polonais%' ORDER BY `polonais`";
    		$result =mysql_query($select,$link) or die ('Erreur :'.mysql_errno().mysql_error());
    		while ($rows=mysql_fetch_array($result))
    			{
    		 $nomvernaculaire = ucfirst($rows['$_SESSION['$langue_util']]);
    		echo "$nomvernaculaire, ";
    			}
    et là, ça coince et je ne vois pas pourquoi. Pouvez-vous m'aider svp.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    		 $nomvernaculaire = ucfirst($rows[ $_SESSION['$langue_util'] ]);
    Cela dit, tu peux aussi directement choisir la langue désirée dans la requête SELECT.

    Si tu donnais un peu plus de code et d'explications (structure de la table, valeurs que peuvent prendre les variables...)...

  3. #3
    Membre éclairé
    Homme Profil pro
    sans
    Inscrit en
    Mai 2007
    Messages
    483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Mai 2007
    Messages : 483
    Par défaut Variable de session et select
    Bonjour jreaux62,

    Merci pour ton intervention.

    Je ne souhaite pas sélectionner la langue dans le select car celle-ci a déjà été définie précédemment dans un autre fichier. J'ai fait une vérification par un echo $_SESSION['langue_util'] et j'obtiens la bonne valeur, à savoir polonais.
    D'autre part, cette variable peut prendre un peu toutes les valeurs de langues possible.
    Je remarque avec un certain retard que tu voulais la structure de la table plant, la voila :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CREATE TABLE IF NOT EXISTS `plant` (
      `idPlant` smallint(6) NOT NULL AUTO_INCREMENT,
      `polonais` varchar(50) NOT NULL DEFAULT '',
      `manquante` varchar(60) NOT NULL,
      PRIMARY KEY (`idPlant`)
    );
    Avec ta proposition, j'obtiens toujours le même problème à savoir une suite de virgules ,,,,,,,,,,,,,,,,,,,,,,
    Une autre piste ?

  4. #4
    Invité
    Invité(e)
    Par défaut
    On n'a ni plus d'explications, ni plus de code....

    Montre-nous plus en détail comment tu t'y prends (tu parles d'une boucle...).
    Tu parles aussi de plusieurs langues, or on ne vois que "polonais" dans ta table...

    Bref, ta gestion de "langues" me parait plus que bancale...

    N.B. Quand je disais "choisir la langue désirée dans la requête SELECT", je voulais dire :
    sélectionner la TRADUCTION dans la "bonne langue" dans la requête SELECT, au lieu de faire un "SELECT *...." (sélection de tous les champs = aussi toutes les traductions)

  5. #5
    Membre éclairé
    Homme Profil pro
    sans
    Inscrit en
    Mai 2007
    Messages
    483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Mai 2007
    Messages : 483
    Par défaut variable de session et select
    Bonsoir,

    J'avais en effet simplifié mon code car je ne voyais pas l'utilité de développer l'instruction SWITCH que j'ai dit avoir utilisé. Le voici développé. Je souhaite en effet simplifier ce SWITCH en remplaçant la langue écrite en dur par le contenu de la variable de session. Je précise qu'en insérant un echo $_SESSION['langue_util'] s'affiche bien "polonais".

    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
     
    <?php
    	session_start();
    		SWITCH ($_SESSION['langue_util'])
    			{
     
    			case "anglais" :
                            $select = "SELECT * FROM `plant` WHERE `manquante` LIKE '%anglais%' ORDER BY `polonais`";
    		        $result =mysql_query($select,$link) or die ('Erreur :'.mysql_errno().mysql_error());
    		        while ($rows=mysql_fetch_array($result))
    			{
    		         $nomvernaculaire = ucfirst($rows['polonais']);
    		         echo "$nomvernaculaire, ";
    		         break;
                            }
     
    			case "allemand" :
                            $select = "SELECT * FROM `plant` WHERE `manquante` LIKE '%allemand%' ORDER BY `polonais`";
    		        $result =mysql_query($select,$link) or die ('Erreur :'.mysql_errno().mysql_error());
    		        while ($rows=mysql_fetch_array($result))
    			{
    		         $nomvernaculaire = ucfirst($rows['polonais']);
    		         echo "$nomvernaculaire, ";
    		         break;
                             }
     
    			case "allemand" :
                            $select = "SELECT * FROM `plant` WHERE `manquante` LIKE '%polonais%' ORDER BY `polonais`";
    		        $result =mysql_query($select,$link) or die ('Erreur :'.mysql_errno().mysql_error());
    		        while ($rows=mysql_fetch_array($result))
    			{
    		         $nomvernaculaire = ucfirst($rows['polonais']);
    		         echo "$nomvernaculaire, ";
    		         break;
    			}
                     }
    ?>
    Suis-je bien clair ?
    Merci pour votre aide.

  6. #6
    Invité
    Invité(e)
    Par défaut
    C'est bien ce que je pensais.
    Remplace le tout par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    	$select = "SELECT * FROM `plant` WHERE `manquante` LIKE '%".mysql_real_escape_string($_SESSION['langue_util'])."%' ORDER BY `polonais`";
    	$result = mysql_query($select,$link) or die ('Erreur :'.mysql_errno().mysql_error());
    	while ($rows=mysql_fetch_array($result))
    	{
    		$nomvernaculaire = ucfirst($rows['polonais']);
    		echo $nomvernaculaire . ", ";
    	}
    Remarques :

  7. #7
    Membre éclairé
    Homme Profil pro
    sans
    Inscrit en
    Mai 2007
    Messages
    483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Mai 2007
    Messages : 483
    Par défaut Variable de session et select
    Bonsoir à tous (toutes),

    C'est parfait Jreaux62, c'était bien ça et le code modifié devient pour information le suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    		$select = "SELECT * FROM `plant` WHERE `manquante` LIKE '%".mysql_real_escape_string($_SESSION['langue_util'])."%' ORDER BY `polonais`";
    		$result =mysql_query($select,$link) or die ('Erreur :'.mysql_errno().mysql_error());
    		while ($rows=mysql_fetch_array($result))
    			{
    				$nomvernaculaire = ucfirst($rows[ mysql_real_escape_string($_SESSION['langue_util']) ]);
    				echo "$nomvernaculaire, ";
    			}
    Il y a juste un tout petit hic avec les caractères spéciaux polonais qui apparaissent en 1er dans l'ordre alphabétique qui du coup est faussé car voici le début de ce qui apparaît avec ce echo:

    Śnieżyczka przebiśnieg, Świerk biały, Świerk kłujący, Świerk serbski, śledziennica skrętolistna, śnieżyca wiosenna, śnieguliczka biała, Żywiec cebulkowy, Ajuga genevensis

    Vous comprendrez bien que je préférerais voir à la place :
    Ajuga genevensis, Śnieżyczka przebiśnieg, Świerk biały, Świerk kłujący, Świerk serbski, śledziennica skrętolistna, śnieżyca wiosenna, śnieguliczka biała, Żywiec cebulkowy. Je pense que ceci est dû au fait que, dans ma table, la lettre Ś est remplacée par Ś mais il doit bien y avoir un moyen (que je ne connais pas).

    Avez-vous déjà été confronté à ce problème ?

  8. #8
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    				$nomvernaculaire = ucfirst($rows[ mysql_real_escape_string($_SESSION['langue_util']) ]);
    Non.
    mysql_real_escape_string() (merci de suivre le lien, et lire...) ne sert qu'à protéger les requêtes SQL.
    Inutile donc de l'utiliser pour l'affichage :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    				$nomvernaculaire = ucfirst($rows[ $_SESSION['langue_util'] ]);
    Concernant l'ordre alphabétique :
    • quel est l'encodage de ta table en BdD ?
    • as-tu un bout de table qu'on pourrait tester ?

  9. #9
    Membre éclairé
    Homme Profil pro
    sans
    Inscrit en
    Mai 2007
    Messages
    483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Mai 2007
    Messages : 483
    Par défaut
    Bonsoir à tous et merci encore à Jreaux62,

    Pour le bout de table, le voici, c'est effectivement un bout ;-)

    Code sql : 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
    CREATE TABLE IF NOT EXISTS `plant` (
      `idPlant` smallint(6) NOT NULL AUTO_INCREMENT,
      `polonais` varchar(50) NOT NULL DEFAULT '',
      `manquante` varchar(60) NOT NULL,
      PRIMARY KEY (`idPlant`)
    ) ENGINE=MyISAM ;
     
    INSERT INTO `plant` (`idPlant`, `polonais`, `manquante`) VALUES
    (1, 'Ajuga reptans', 'polonais'),
    (2, 'tojad mocny', 'polonais'),
    (3, 'tojad lisi typowy', ''),
    (4, 'żywiec gruczołowaty', 'polonais'),
    (5, 'mietlica rozłogowa', ''),
    (6, 'mietlica pospolita', ''),
    (7, 'rzepik pospolity', ''),
    (8, 'czosnek niedźwiedzi', ''),
    (10, 'kolcolist zachodni', ''),
    (12, 'jarząb mączny', ''),
    (13, 'jarząb szerokolistny', ''),
    (14, 'skrzyp zimowy', ''),
    (15, 'czosnaczek pospolity', ''),
    (16, 'świdośliwa jajowata', ''),
    (17, 'orlik pospolity', ''),

    Quant à l'encodage, c'est je pense "utf8_general_ci" en regardant sur PhpMyadmin dans interclassement; j'espère que c'est ça.

  10. #10
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Denis Placé Voir le message
    Quant à l'encodage, c'est je pense "utf8_general_ci"....
    Dans ce cas, il n'y a pas de raison d'avoir des caractères tels que ł dans les textes !!
    Ils ont sans doute été enregistrés avec htmlentities()... ce qui est une erreur.
    Essaie de corriger ça, en mettant les "vrais" caractères en BdD.

  11. #11
    Membre éclairé
    Homme Profil pro
    sans
    Inscrit en
    Mai 2007
    Messages
    483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Mai 2007
    Messages : 483
    Par défaut
    Bonjour,

    J'attendais en effet cette proposition mais je ne souhaite pas le faire car ça me pose des problèmes d'autres scripts utilisant cette table.
    Une autre idée ?

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

    Informations forums :
    Inscription : Décembre 2006
    Messages : 209
    Par défaut
    Bonsoir,

    je ne sais pas comment sort le résultat brut d'un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "<pre>".$nomvernaculaire. ", </pre>";
    ou d'un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print_r($nomvernaculaire);
    mais j'aurais suggéré un tri

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    while ($rows=mysql_fetch_array($result))
    {
        $nomvernaculaireS[] = ucfirst($rows[ mysql_real_escape_string($_SESSION['langue_util']) ]);                
    }
    asort($nomvernaculaireS);
    foreach ($nomvernaculaireS as $nomvernaculaire)
    {
        echo $nomvernaculaire.", ";
    }
    Parcontre je me trotte la tête avec ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $rows[ $_SESSION['langue_util'] ];
    Tu comptes ajouter des colonnes francais, chinois, ... à la table plant ?

  13. #13
    Membre éclairé
    Homme Profil pro
    sans
    Inscrit en
    Mai 2007
    Messages
    483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Mai 2007
    Messages : 483
    Par défaut
    Bonjour à tous,

    Merci à omdafer pour ton intervention.
    Je viens de tester mais .... pas de changement, malheureusement.

    Est-ce que je compte ajouter d'autres langues ? OUI. Après le polonais, je suis sur l'anglais et d'autres suivront, sans pour autant aller jusqu'au chinois ;-)

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

    Informations forums :
    Inscription : Décembre 2006
    Messages : 209
    Par défaut
    Ton problème viens de là :
    Même si ton navigateur affiche un ś qui est en réalité l'entité "&#347;" "&" sera toujours avant "a" et avant "ś".
    Donc, il faut d'abord convertir ces entités en caractère avant de trier. Puis, si besoin, reconvertir en entités pour l'affichage.

    Je te donnes déjà une autre piste :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    
    $nomvernaculaireS[] = ucfirst($rows[ html_entity_decode($_SESSION['langue_util'], ENT_NOQUOTES) ]);
    Il faudra sûrement regarder dans la documentation PHP pour adapter les options de html_entity_decode() avec le jeu de caractères nécessaire.

  15. #15
    Membre éclairé
    Homme Profil pro
    sans
    Inscrit en
    Mai 2007
    Messages
    483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Mai 2007
    Messages : 483
    Par défaut
    Bonjour,

    Je viens de tester ta proposition, omdafer mais ... ça ne fonctionne toujours pas.
    Je ne souhaite pas modifier ma base de données en remettant mes caractères en dur car cela m'entraine d'autres soucis et mon niveau en php fait que je crains l'effet "boule de neige".
    Je vais donc laisser tomber; merci quand même.

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

Discussions similaires

  1. [MySQL] Sauvegarde via variable de session lors d'un select.
    Par sdgarf dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 17/06/2008, 12h01
  2. Réponses: 9
    Dernier message: 27/05/2008, 13h44
  3. Réponses: 7
    Dernier message: 12/07/2006, 10h03
  4. Variable de session
    Par Sadneth dans le forum ASP
    Réponses: 6
    Dernier message: 14/11/2003, 11h12
  5. variable de session
    Par divableue dans le forum ASP
    Réponses: 2
    Dernier message: 23/10/2003, 16h04

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