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 :

Requête sql avec un CASE ou IF


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2021
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2021
    Messages : 81
    Par défaut Requête sql avec un CASE ou IF
    Bonjour, quelqu'un peut m'aider à mettre une condition pour les langues dans ma requête, merci
    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
    function getSouscategories(){
    global $bdd;
    $sql="SELECT C.id ,
    case $_SESSION['lang']
    when 'FR' then C.nom_FR
    when 'EN' then C.nom_EN
    when 'ES' then C.nom_ES
    end as C.nom
    , case $_SESSION['lang']
    when 'FR' then DESC_C.nom_FR
    when 'EN' then DESC_C.nom_EN
    when 'ES' then DESC_C.nom_ES
    end as DESC_C.nom
    FROM categories C ";
    try{
    $req = $bdd->prepare($sql);
    $req->execute();
    $res = $req->fetchAll(PDO::FETCH_ASSOC);
    }catch(Exception $e){
    echo "Erreur dans la requête " . $sql;
    $res = false;
    }
    return $res;
    }

    Le but est que $C.nom soit égale à toutes les autres en terme de langues selon celle choisie depuis le début
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    $categories=getSouscategories();
    <select name="categorie">
    <?php
    foreach($categories as $C){
    echo "<option value='".$C['id']."'>".$C['nom']."</option>";
    }
    ?>
    </select>

  2. #2
    Inactif  
    Homme Profil pro
    Webmaster
    Inscrit en
    Juin 2021
    Messages
    645
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juin 2021
    Messages : 645
    Par défaut
    Bonjour,

    il y a peut-être plus simple, non ?

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $sql="SELECT 
    	C.id ,
    	C.nom_".$_SESSION['lang']." as C.nom,
    	DESC_C.nom_".$_SESSION['lang']." as DESC_C.nom
    FROM categories C ";
    Ou mieux:
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $sql_lang = ( !empty(($_SESSION['lang']) && in_array($_SESSION['lang'], ['FR','EN','ES']) )? $_SESSION['lang'] : 'FR'; // on s'assure que la langue est correcte
    $sql="SELECT 
    	C.id ,
    	C.nom_".$sql_lang." as C.nom,
    	DESC_C.nom_".$sql_lang." as DESC_C.nom
    FROM categories C ";
    ou :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql_lang = ( !empty(($_SESSION['lang']) && in_array(mb_strtoupper($_SESSION['lang'], 'UTF-8'), ['FR','EN','ES']) )? mb_strtoupper($_SESSION['lang'], 'UTF-8') : 'FR'; // on s'assure que la langue est correcte

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2021
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2021
    Messages : 81
    Par défaut Requête sql pour un site multilingues
    Bonjour jreaux62, merci pour ta réponse. J'ai opté pour la seconde option car elle m'est nécessaire dans d'autres requêtes. Néanmoins ayant essayé les 3 options, j'obtiens l'erreur suivante: Erreur dans la requête SELECT C.id , C.nom_FR as C.nom, DESC_C.nom_FR as DESC_C.nom FROM categories C
    Est-ce à cause des intitulés de la table catégories. Ses champs sont les suivants: id, id_categoriep, nom_FR, nom_EN, nom_ES. Ou à cause de leur interclassement, qui est en latin swedish?
    Ou est-ce à cause du fichier langues? Voici la page fb.php qui se trouve dans le fichier langues:
    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
    <?php
    if(!isset($_SESSION))
    {
        session_start();
    }
        if(!isset($_SESSION['lang']))
        $_SESSION['lang']="fr";
        elseif (isset($_GET['lang'])&& $_SESSION['lang'] != $_GET['lang'] && !empty($_GET['lang'])){
            if($_GET['lang']=="fr")
            $_SESSION['lang']="fr";
     
            elseif($_GET['lang']=="en")
            $_SESSION['lang']="en";
     
            elseif ($_GET['lang']=="es")
            $_SESSION['lang']= 'es';
        }
     
    require_once ($_SESSION['lang'] . ".php");
    ?>
    En gros voilà ce que j'ai fait:
    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
    function getSouscategories(){
      global $bdd;
     
    $sql_lang =(!empty($_SESSION['lang']) && in_array($_SESSION['lang'], ['FR','EN','ES']) )? $_SESSION['lang'] : 'FR'; // on s'assure que la langue est correcte
    $sql="SELECT 
    	C.id ,
    	C.nom_".$sql_lang." as C.nom,
    	DESC_C.nom_".$sql_lang." as DESC_C.nom
    FROM categories C ";
     
       try{
          $req = $bdd->prepare($sql);
          $req->execute();
          $res =  $req->fetchAll(PDO::FETCH_ASSOC);
     
     
        }catch(Exception $e){
            echo "Erreur dans la requête " . $sql;
            $res = false;
        }
      return $res;
    }
     
     
     
    if(isset($_POST['formannonce'])) {
     
    $id_categorie= isset($_GET['categorie'])? trim($_GET['categorie']) : null;
    //une autre suite de code qui concerne d'autres fonctions.
    Et dans la page des formulaires en incluant le dossiers des langues, et la page des fonctions. :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $categories=getSouscategories();
     
     
                 <?php
     
        foreach($categories as $C){
          echo "<option value='".$C['id']."'>".$C['nom']."</option>";
        }
      ?>
    </select>

  4. #4
    Inactif  
    Homme Profil pro
    Webmaster
    Inscrit en
    Juin 2021
    Messages
    645
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juin 2021
    Messages : 645
    Par défaut
    Bonjour,

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    	DESC_C.nom_".$sql_lang." as DESC_C.nom

    c'est surtout parce que, sur cette ligne, tu as mis un ALIAS de TABLE "DESC_C" qui ne correspond à rien dans ta requête
    (je n'ai fait que recopier à partir de ton code, en supposant qu'il n'était pas complet)

    Vu qu'elle semble inutile, il faut la supprimer :

    ATTENTION !

    Dans ton fichier de langue, les langues sont en MINUSCULE !

    Il faut donc les mettre en MAJUSCULE (car en MAJUSCULE dans la Bdd) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $sql_lang = ( !empty(($_SESSION['lang']) && in_array(mb_strtoupper($_SESSION['lang'], 'UTF-8'), ['FR','EN','ES']) )? mb_strtoupper($_SESSION['lang'], 'UTF-8') : 'FR'; // on s'assure que la langue est correcte + en MAJUSCULE
    $sql="SELECT 
    	C.id ,
    	C.nom_".$sql_lang." as C.nom
    FROM categories C 
    ORDER BY C.nom_".$sql_lang." ASC
    ";

  5. #5
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2021
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2021
    Messages : 81
    Par défaut requête sql pour un site multilingues
    Je n'ai pas bien saisi, veux-tu dire qu'il faut modifier la page fb.php dans le dossier langues? Ou faut-il remplacer cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql_lang = ( !empty(($_SESSION['lang']) && in_array(mb_strtoupper($_SESSION['lang'], 'UTF-8'), ['FR','EN','ES']) )? mb_strtoupper($_SESSION['lang'], 'UTF-8') : 'FR'; // on s'assure que la langue est correcte
    par tout ce qui se trouve dans fb.php? Je pense qu'il y a une parenthèse de plus, j'ai donc modifié pour que ça affiche la page du formulaire, et j'ai la même erreur:

    J'ai mis les langues en majuscule comme tu l'as sugéré, mais j'ai toujours la même erreur: Erreur dans la requête SELECT C.id , C.nom_FR as C.nom FROM categories C ORDER BY C.nom_FR ASC

    page des fonctions:
    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
    function getSouscategories(){
      global $bdd;
     
      $sql_lang = ( !empty(($_SESSION['lang']) && in_array(mb_strtoupper($_SESSION['lang'], 'UTF-8'), ['FR','EN','ES']) ))? mb_strtoupper($_SESSION['lang'], 'UTF-8') : 'FR'; 
     
    $sql="SELECT 
    	C.id ,
    	C.nom_".$sql_lang." as C.nom
    FROM categories C 
    ORDER BY C.nom_".$sql_lang." ASC
    ";
       try{
          $req = $bdd->prepare($sql);
          $req->execute();
          $res =  $req->fetchAll(PDO::FETCH_ASSOC);
     
     
        }catch(Exception $e){
            echo "Erreur dans la requête " . $sql;
            $res = false;
        }
      return $res;
    }
    page fb.php se trouvant dans le dossier langues:
    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
    <?php
    if(!isset($_SESSION))
    {
        session_start();
    }
        if(!isset($_SESSION['lang']))
        $_SESSION['lang']="FR";
        elseif (isset($_GET['lang'])&& $_SESSION['lang'] != $_GET['lang'] && !empty($_GET['lang'])){
            if($_GET['lang']=="FR")
            $_SESSION['lang']="FR";
     
            elseif($_GET['lang']=="EN")
            $_SESSION['lang']="EN";
     
            elseif ($_GET['lang']=="ES")
            $_SESSION['lang']= 'ES';
        }
     
     
    require_once ($_SESSION['lang'] . ".php");
    ?>

  6. #6
    Inactif  
    Homme Profil pro
    Webmaster
    Inscrit en
    Juin 2021
    Messages
    645
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juin 2021
    Messages : 645
    Par défaut
    POSE-TOI 2 minutes, RESPIRE... et souffle...
    Ne fais pas n'importe quoi sans comprendre.

    1- La première chose à savoir : "fr", "Fr", "fR", "FR", ce n'est pas la même chose !

    • En général, sur le serveur et en Bdd, les données sont SENSIBLES A LA CASSE (majuscule / minuscule)
    • En local (WAMP,...), ce n'est pas forcément le cas


    2- choisir entre "fr" et "FR" : à TOI de savoir : c'est TON choix !

    • En général, on préfèrera TOUT ÉCRIRE EN MINUSCULES.
    • par conséquent, il faut que tu modifies les noms des colonnes en BDD pour remplacer les _FR,_EN,_ES en _fr,_en,_es.

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

Discussions similaires

  1. Perte de données dans requête SQL avec SUM CASE WHEN
    Par dauwev62 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 29/05/2020, 16h38
  2. Réponses: 2
    Dernier message: 16/05/2012, 09h48
  3. Problème de requête SQL avec instruction TRANSFORM
    Par Nosper dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 21/06/2005, 16h15
  4. requête SQL avec paramètre en vb avec base de donnée SQL srv
    Par dialydany dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 01/02/2005, 10h33
  5. PB requète SQL avec Interbase
    Par missllyss dans le forum InterBase
    Réponses: 2
    Dernier message: 15/07/2003, 11h37

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