Fatal error

Résolu/Fermé
danielos77 Messages postés 108 Date d'inscription samedi 18 février 2006 Statut Membre Dernière intervention 16 janvier 2024 - Modifié le 17 mai 2020 à 07:02
yg_be Messages postés 22698 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 18 avril 2024 - 17 mai 2020 à 19:08
Bonjour,

La requête suivante :
<?php
  //activation de l'affichage des erreurs PHP
  error_reporting(E_ALL);
  ini_set('display_errors', TRUE);
  ini_set('display_startup_errors', TRUE);

  //on inclut le fichier de connexion à la bdd
  require_once "secure/cnxBdd.php";
  
  $reponse = $bdd->query('SELECT CoutHebergement FROM Stages_AEM WHERE NumStage=$ChoixStage');
   while ($donnees = $reponse->fetch())
   
  if(!empty($donnees)){
   echo $CoutHebergement.',00 € par personne pour la durée du stage.';
      }  
  
  $reponse->closeCursor(); // Termine le traitement de la requête
    
 ?>


me donne l'erreur suivante :

Fatal error: Uncaught PDOException: SQLSTATE[42S22]: Column not found: 1054 Unknown column '$ChoixStage' in 'where clause' in /home/public_html/AEM/Inscription.php:449 Stack trace: #0 /home/public_html/AEM/Inscription.php(449): PDO->query('SELECT CoutHebe...') #1 {main} thrown in /home/public_html/AEM/Inscription.php on line 449

Alors que dans ma table, il y a bien les colonnes NumStage et CoutHergement, que la variable $ChoixStage est bien là aussi (testée et affichée dans le formulaire avant).

Je ne vois pas où est le souci.

Lorsque je lance la requête dans phpMyadmin en remplaçant la variable par sa valeur, c'est bon, j'ai bien le résultat qui s'affiche et lorsque je remplace la variable par sa valeur dans le script, j'ai une erreur différente qui est :
Notice: Undefined variable: CoutHebergement in /home/public_html/AEM/Inscription.php on line 453

line 449 : $reponse = $bdd->query('SELECT CoutHebergement FROM Stages_AEM WHERE NumStage=$ChoixStage');
line 453 : echo $CoutHebergement.',00 € par personne pour la durée du stage.';

J'ai tenté de mettre des ` aux noms des colonnes et de la table mais sans plus de succès.

En mettant des " autour de la variable $ChoixStage, il n'y a plus l'erreur mais rien ne s'affiche non plus (je précise qu'il y a une valeur à afficher... lol)

Merci d'avance.
Daniel

Configuration: Windows / Firefox 76.0

4 réponses

yg_be Messages postés 22698 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 18 avril 2024 1 471
17 mai 2020 à 09:39
bonjour,
réflexe à avoir, dans ce cas-là:
$sql='SELECT CoutHebergement FROM Stages_AEM WHERE NumStage=$ChoixStage';
echo $sql;
1
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
Modifié le 17 mai 2020 à 10:13
ça te montre que ta requête n'est pas bonne....
Il faut, au choix, utiliser de la concaténation de string .... soit utiliser les bonnes "quotes".

Teste ce code et regarde ce que ça affiche... de là tu dois pouvoir trouver la cause de ton erreur
<?php

$aaa = "danielos";

echo 'bonjour $aaa';
echo "bonjour $aaa";
echo 'bonjour ' . $aaa;

1
danielos77 Messages postés 108 Date d'inscription samedi 18 février 2006 Statut Membre Dernière intervention 16 janvier 2024 2
17 mai 2020 à 09:50
Bonjour yg_be,
C'est bien mais à part m'afficher
SELECT CoutHebergement FROM Stages_AEM WHERE NumStage=$ChoixStage
sur ma page, ça m'avance à quoi ?
A moins que ce ne soit dans la base que je doive y mettre cette instruction et non pas dans le script de ma page ...
Et dans ce cas la variable $ChoixStage n'est pas connue et en la remplaçant par sa valeur, comme je l'ai dit dans ma question, la valeur CoutHebergement correspondant s'affiche bien.
Daniel
0
danielos77 Messages postés 108 Date d'inscription samedi 18 février 2006 Statut Membre Dernière intervention 16 janvier 2024 2
17 mai 2020 à 10:59
Merci Jordane45,
C'est vrai que cette histoire de "quotes" c'est un peu merd... Mais bon, c'est à moi de m'y fairer et de faire attention.
ça marche aussi avec l'instruction de yg_be.
avec des simples quotes j'obtiens ce que j'avais écrit :
SELECT CoutHebergement FROM Stages_AEM WHERE NumStage=$ChoixStage
et avec des doubles quotes j'ai la valeur de la variable $ChoixStage qui s'affiche !
Bon dimanche à vous 2
Daniel
0
yg_be Messages postés 22698 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 18 avril 2024 1 471
17 mai 2020 à 11:39
il est vrai aussi que ton comportement est un peu erratique.
parfois tu utilises
prepare
, parfois pas.
je suggère que tu prennes l'habitude de ne jamais mettre de nom de variable à l'intérieur des apostrophes, cela t'évitera ce genre de maladresse.
0
danielos77 Messages postés 108 Date d'inscription samedi 18 février 2006 Statut Membre Dernière intervention 16 janvier 2024 2 > yg_be Messages postés 22698 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 18 avril 2024
17 mai 2020 à 11:51
C'est noté.
Pour le côté erratique, c'est entièrement involontaire et dû à mon ignorance dans l'écriture de code. Je reconnais que je suis une bille en informatique mais je vais quand même tenter de progresser un peu grâce à des personnes généreuses comme vous.
Merci encore.
0
yg_be Messages postés 22698 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 18 avril 2024 1 471 > danielos77 Messages postés 108 Date d'inscription samedi 18 février 2006 Statut Membre Dernière intervention 16 janvier 2024
17 mai 2020 à 19:08
dans ce contexte, l'avantage principal de toujours utiliser la même technique, c'est d'utiliser une technique familière et connue, pour ne pas tomber dans de nouveaux pièges à chaque fois.
il est vrai que les requêtes préparées sont plus performantes lorsqu'elles sont souvent sollicitées, mais elles sont également beaucoup plus sécurisées, et elles facilitent l'écriture du code.

"de ne pas mettre ma variable entre quotes", c'est faire comme la troisième méthode que Jordane te montre en #3. je trouve que c'est plus clair, entr'autres parce que les autres langages de programmation ne permettent pas ce genre de raccourci.
par exemple:
$sql = "SELECT CoutHebergement FROM Stages_AEM WHERE NumStage='". $ChoixStage . "'";
$reponse = $bdd->query($sql);
0