[RESOLU] Erreur dans un requête sql avec concatenation

Eléphant du PHP | 65 Messages

12 déc. 2021, 21:14

Depuis toute la journée je suis bloqué sur ça, si quelqu'un peut m'aider, merci :)
L'erreur qui s'affiche: Erreur dans la requête SELECT C.id, C.nom_fr as C.nom FROM categories C ORDER BY C.nom_fr ASC

Ma table categories contient les colonnes suivantes: id, id_cateogriesp, nom_fr, nom_en, nom_es.
Est-ce à cause du fait que l'id n'est pas auto-incrémenté et qu'il soit lié à une autre table? Si non, où est l'erreur?
Ou est-ce à cause de l'interclassement?

Code : Tout sélectionner

function getSouscategories(){ global $bdd; $sql_lang = (!empty(($_SESSION['lang']) && in_array($_SESSION['lang'], ['fr','en','es']) ))? $_SESSION['lang'] : '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; } }
Page du formulaire:

Code : Tout sélectionner

$categories=getSouscategories(); <select name="categorie"> <?php foreach($categories as $C){ echo "<option value='".$C['id']."'>".$C['nom']."</option>"; } ?> </select>
Et la page fb.php qui se trouve dans le fichier langues:

Code : Tout sélectionner

<?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"); ?>

Mammouth du PHP | 2703 Messages

12 déc. 2021, 23:32

en exécutant la requête dans phpmyadmin, phpmyadmin dit quelle partie de la requête est incorrecte et met sur la voie pour enlever 2 caractères.

Eléphant du PHP | 65 Messages

13 déc. 2021, 01:45

en exécutant la requête dans phpmyadmin, phpmyadmin dit quelle partie de la requête est incorrecte et met sur la voie pour enlever 2 caractères.
Bonjour or1, merci pour ta réponse. Le problème c'estque ça n'affiche rien dans le formulaire l'erreur ayant disparu. Au niveau de la requête j'ai changé ainsi pour que ça marche:

Code : Tout sélectionner

function getSouscategories(){ global $bdd; $sql_lang = (!empty(($_SESSION['lang']) && in_array($_SESSION['lang'], ['fr','en','es']) ))? $_SESSION['lang'] : 'fr'; $sql="SELECT C.id as id, C.nom_".$sql_lang." as nom FROM categories C ORDER BY id 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; } }
Dans le isset:

Code : Tout sélectionner

if(isset($_POST['formannonce'])) { $id_categorie= isset($_GET['categorie'])? trim($_GET['categorie']) : null; //suite de code ....
Mais dans le formulaire rien ne s'affiche:

Code : Tout sélectionner

<?php $categories= getSouscategories(); foreach($categories as $C){ echo "<option value='".$C['id']."'>".$C['nom']."</option>"; } ?> </select>

Eléphant du PHP | 337 Messages

13 déc. 2021, 13:30

La requête est bizarre :

Code : Tout sélectionner

SELECT C.id as id, C.nom_".$sql_lang." as nom FROM categories C ORDER BY id ASC
Le "FROM categories C" est curieux. Si la table sélectionnée est juste la table "categories", alors ceci est suffisant :

Code : Tout sélectionner

SELECT id, nom_".$sql_lang." as nom FROM categories ORDER BY id ASC
En outre, ce sujet semble relié à celui-ci : php-debutant/topic282456.html
Ce dernier paraît être "résolu". Un petit "merci" au passage, ça fait toujours plaisir :mrgreen:

Eléphant du PHP | 65 Messages

13 déc. 2021, 14:47

La requête est bizarre :

Code : Tout sélectionner

SELECT C.id as id, C.nom_".$sql_lang." as nom FROM categories C ORDER BY id ASC
Le "FROM categories C" est curieux. Si la table sélectionnée est juste la table "categories", alors ceci est suffisant :

Code : Tout sélectionner

SELECT id, nom_".$sql_lang." as nom FROM categories ORDER BY id ASC
En outre, ce sujet semble relié à celui-ci : php-debutant/topic282456.html
Ce dernier paraît être "résolu". Un petit "merci" au passage, ça fait toujours plaisir :mrgreen:
Bonjour finipe,
Merci à toi aussi pour ton retour. En changeant la requête comme tu as indiqué, rien ne s'ajoute dans le formulaire. Quelle serait la raison? Pourtant il y a une boucle dans le select.
Il est bien relié au lien qe tu as transmis, résolu. Je n'avais pas vu la notification concernant la réponse. Merci :)

ynx
Mammouth du PHP | 586 Messages

13 déc. 2021, 15:43

Bonjour,

Un indice :
Est-ce qu'il ne manquerait pas une instruction à la fin de la fonction getSouscategories() pour retourner les résultats ?

Eléphant du PHP | 65 Messages

13 déc. 2021, 17:06

Bonjour,

Un indice :
Est-ce qu'il ne manquerait pas une instruction à la fin de la fonction getSouscategories() pour retourner les résultats ?
Bonjour ynx, je n'ai pas bien compris. Si tu veux dire isset, j'ai fait mais ça n'a pas marché.

Code : Tout sélectionner

<label for="categorieannonce"><?php echo $lang['ca'];?></label> <select name="categorie"> <?php $categories= getSouscategories(); if ( isset($_GET['categorie']) && !empty($_GET['categorie'])){ foreach($categories as $C){ echo "<option value='".$C['id']."'>".$C['nom']."</option>"; } }
Sinon, quelle serait l'autre instruction?

ynx
Mammouth du PHP | 586 Messages

13 déc. 2021, 18:42

Non ce n'est pas isset() l'instruction manquante.

Essaye d'afficher le contenu de la variable $categorie pour déboguer ton script :
$categories = getSouscategories();
var_dump($categories);

Quelle est la valeur de la variable $categories et pourquoi la fonction getSouscategories() retourne cette valeur ?

Si besoin d'un autre indice, un petit rappel sur les fonctions :
https://www.php.net/manual/fr/functions ... efined.php
https://www.php.net/manual/fr/functions ... values.php

Eléphant du PHP | 65 Messages

13 déc. 2021, 23:52

Non ce n'est pas isset() l'instruction manquante.

Essaye d'afficher le contenu de la variable $categorie pour déboguer ton script :
$categories = getSouscategories();
var_dump($categories);

Quelle est la valeur de la variable $categories et pourquoi la fonction getSouscategories() retourne cette valeur ?

Si besoin d'un autre indice, un petit rappel sur les fonctions :
https://www.php.net/manual/fr/functions ... efined.php
https://www.php.net/manual/fr/functions ... values.php
Ok, je vois. Il s'agissait d'un return que je n'ai pas mis dans ma fonction. Le code marche. Merci ynx :)