Erreur : Undefined variable sur requete preparee

Résolu
NICOLAS3377 Messages postés 52 Date d'inscription   Statut Membre Dernière intervention   -  
NICOLAS3377 Messages postés 52 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour

En mettant la requête ce-dessous j'ai le message d'erreur suivant :

<?php
$req = $bdd->prepare ('INSERT INTO jeux_video(nom, possesseur,
console, prix, nbre_joueurs_max, commentaires) VALUES(:nom,
:possesseur, :console, :prix, :nbre_joueurs_max, :commentaires)');
$req->execute(array(
'nom' =>$nom,
'possesseur' =>$possesseur,
'console' =>$console,
'prix' =>$prix,
'nbre_joueurs_max'=>$nbre_joueurs_max,
'commentaires'=> $commentaires
));
echo 'Le jeu a bien été ajouté !';
?>
Ensuite j'ai le message d'erreur ce-dessous :

! ) SCREAM: Error suppression ignored for
( ! ) Notice: Undefined variable: bdd in C:\wamp\www\ASTUCESVBAEXCEL\requetepreparee_ajoutenregistrement.php on line 2

Merci d'avance pour votre aide

Nicolas

6 réponses

  1. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
     
    Bonjour
    Il est ou le code de connexion à ta bdd ?
    0
  2. NICOLAS3377 Messages postés 52 Date d'inscription   Statut Membre Dernière intervention   1
     
    Bonsoir. Je te ré envoies le code qui affiche , en plus de la requête , les erreurs en php et la connexion à la BDD:
    :

    <?php

    //---------------------------------------------------------//
    //affichage des erreurs PHP
    //---------------------------------------------------------//
    error_reporting(E_ALL);
    ini_set('display_errors', TRUE);
    ini_set('display_startup_errors', TRUE);

    //---------------------------------------------------------//
    //connexion à la BDD ET activation des erreurs PDO
    //---------------------------------------------------------//
    try{
    $bdd =new PDO('mysql:host=localhost;dbname=test; charset=utf8', 'root', '');
    // Activation des erreurs PDO
    $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    // mode de fetch par défaut : FETCH_ASSOC / FETCH_OBJ / FETCH_BOTH
    $bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
    } catch(PDOException $e) {
    die('Erreur : ' . $e->getMessage());
    }

    $req = $bdd->prepare ('INSERT INTO jeux_video(nom, possesseur,
    console, prix, nbre_joueurs_max, commentaires) VALUES(:nom,
    :possesseur, :console, :prix, :nbre_joueurs_max, :commentaires)');
    $req->execute(array(
    'nom' =>$nom,
    'possesseur' =>$possesseur,
    'console' =>$console,
    'prix' =>$prix,
    'nbre_joueurs_max'=>$nbre_joueurs_max,
    'commentaires'=> $commentaires
    ));
    echo 'Le jeu a bien été ajouté !';
    ?>

    Réponse: j'ai plein de messages d'erreur dont je t'envoie le détail

    Notice: Undefined variable: nom in C:\wamp\www\ASTUCESVBAEXCEL\requetepreparee_ajoutenregistrement.php on line 28
    Call Stack
    # Time Memory Function Location
    1 0.0005 251624 {main}( ) ..\requetepreparee_ajoutenregistrement.php:0

    ( ! ) Notice: Undefined variable: possesseur in C:\wamp\www\ASTUCESVBAEXCEL\requetepreparee_ajoutenregistrement.php on line 29
    Call Stack
    # Time Memory Function Location
    1 0.0005 251624 {main}( ) ..\requetepreparee_ajoutenregistrement.php:0

    ( ! ) Notice: Undefined variable: console in C:\wamp\www\ASTUCESVBAEXCEL\requetepreparee_ajoutenregistrement.php on line 30
    Call Stack
    # Time Memory Function Location
    1 0.0005 251624 {main}( ) ..\requetepreparee_ajoutenregistrement.php:0

    ( ! ) Notice: Undefined variable: prix in C:\wamp\www\ASTUCESVBAEXCEL\requetepreparee_ajoutenregistrement.php on line 31
    Call Stack
    # Time Memory Function Location
    1 0.0005 251624 {main}( ) ..\requetepreparee_ajoutenregistrement.php:0

    ( ! ) Notice: Undefined variable: nbre_joueurs_max in C:\wamp\www\ASTUCESVBAEXCEL\requetepreparee_ajoutenregistrement.php on line 32
    Call Stack
    # Time Memory Function Location
    1 0.0005 251624 {main}( ) ..\requetepreparee_ajoutenregistrement.php:0

    ( ! ) Notice: Undefined variable: commentaires in C:\wamp\www\ASTUCESVBAEXCEL\requetepreparee_ajoutenregistrement.php on line 34
    Call Stack
    # Time Memory Function Location
    1 0.0005 251624 {main}( ) ..\requetepreparee_ajoutenregistrement.php:0

    ( ! ) Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'nom' cannot be null' in C:\wamp\www\ASTUCESVBAEXCEL\requetepreparee_ajoutenregistrement.php on line 34
    ( ! ) PDOException: SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'nom' cannot be null in C:\wamp\www\ASTUCESVBAEXCEL\requetepreparee_ajoutenregistrement.php on line 34
    Call Stack
    # Time Memory Function Location
    1 0.0005 251624 {main}( ) ..\requetepreparee_ajoutenregistrement.php:0
    2 0.0455 262384 PDOStatement->execute( ) ..\requetepreparee_ajoutenregistrement.php:34

    Merci pour ton aide.
    0
    1. NICOLAS3377 Messages postés 52 Date d'inscription   Statut Membre Dernière intervention   1
       
      bonjour Jordan45

      J'ai réécrit le code avec le test des variables. J'ai le code suivant :
      <?php

      //---------------------------------------------------------//
      //affichage des erreurs PHP
      //---------------------------------------------------------//
      error_reporting(E_ALL);
      ini_set('display_errors', TRUE);
      ini_set('display_startup_errors', TRUE);


      //---------------------------------------------------------//
      //connexion à la BDD ET activation des erreurs PDO
      //---------------------------------------------------------//
      try{
      $bdd =new PDO('mysql:host=localhost;dbname=test; charset=utf8', 'root', '');
      // Activation des erreurs PDO
      $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
      // mode de fetch par défaut : FETCH_ASSOC / FETCH_OBJ / FETCH_BOTH
      $bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
      } catch(PDOException $e) {
      die('Erreur : ' . $e->getMessage());
      }

      $req = $bdd->prepare ('INSERT INTO jeux_video(nom, possesseur,
      console, prix, nbre_joueurs_max, commentaires) VALUES(:nom,
      :possesseur, :console, :prix, :nbre_joueurs_max, :commentaires)');
      $req->execute(array(
      'nom' =>$nom,
      'possesseur' =>$possesseur,
      'console' =>$console,
      'prix' =>$prix,
      'nbre_joueurs_max'=>$nbre_joueurs_max,
      'commentaires'=> $commentaires
      ));
      echo 'Le jeu a bien été ajouté !';

      //---------------------------------------------------------//
      // Récupération PROPRE des variables AVANT de les utiliser
      //---------------------------------------------------------//
      $nom = !empty($_GET['nom']) ? $_GET['nom'] : NULL;
      $possesseur = !empty($_GET['possesseur']) ? $_GET['possesseur'] : NULL;
      $console = !empty($_GET['console']) ? $_GET['console'] : NULL;
      $prix = !empty($_GET['prix']) ? $_GET['prix'] : NULL;
      $nbre_joueurs_max = !empty($_GET['nbre_joueurs_max']) ? $_GET['nbre_joueurs_max'] : NULL;
      $commentaires = !empty($_GET['commentaires']) ? $_GET['commentaires'] : NULL;
      ?>

      J'exécute le code et j'ai les messages d'erreur suivants :


      ( ! ) Notice: Undefined variable: nom in C:\wamp\www\ASTUCESVBAEXCEL\requetepreparee_ajoutenregistrement.php on line 28
      Call Stack
      # Time Memory Function Location
      1 0.0006 257512 {main}( ) ..\requetepreparee_ajoutenregistrement.php:0

      ( ! ) Notice: Undefined variable: possesseur in C:\wamp\www\ASTUCESVBAEXCEL\requetepreparee_ajoutenregistrement.php on line 29
      Call Stack
      # Time Memory Function Location
      1 0.0006 257512 {main}( ) ..\requetepreparee_ajoutenregistrement.php:0

      ( ! ) Notice: Undefined variable: console in C:\wamp\www\ASTUCESVBAEXCEL\requetepreparee_ajoutenregistrement.php on line 30
      Call Stack
      # Time Memory Function Location
      1 0.0006 257512 {main}( ) ..\requetepreparee_ajoutenregistrement.php:0

      ( ! ) Notice: Undefined variable: prix in C:\wamp\www\ASTUCESVBAEXCEL\requetepreparee_ajoutenregistrement.php on line 31
      Call Stack
      # Time Memory Function Location
      1 0.0006 257512 {main}( ) ..\requetepreparee_ajoutenregistrement.php:0

      ( ! ) Notice: Undefined variable: nbre_joueurs_max in C:\wamp\www\ASTUCESVBAEXCEL\requetepreparee_ajoutenregistrement.php on line 32
      Call Stack
      # Time Memory Function Location
      1 0.0006 257512 {main}( ) ..\requetepreparee_ajoutenregistrement.php:0

      ( ! ) Notice: Undefined variable: commentaires in C:\wamp\www\ASTUCESVBAEXCEL\requetepreparee_ajoutenregistrement.php on line 34
      Call Stack
      # Time Memory Function Location
      1 0.0006 257512 {main}( ) ..\requetepreparee_ajoutenregistrement.php:0

      ( ! ) Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'nom' cannot be null' in C:\wamp\www\ASTUCESVBAEXCEL\requetepreparee_ajoutenregistrement.php on line 34
      ( ! ) PDOException: SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'nom' cannot be null in C:\wamp\www\ASTUCESVBAEXCEL\requetepreparee_ajoutenregistrement.php on line 34
      Call Stack
      # Time Memory Function Location
      1 0.0006 257512 {main}( ) ..\requetepreparee_ajoutenregistrement.php:0
      2 0.0140 268248 PDOStatement->execute( ) ..\requetepreparee_ajoutenregistrement.php:34

      Merci pour ton aide
      0
    2. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
       
      AVANT de les utiliser .....ça veut dire AVANT !
      0
    3. NICOLAS3377 Messages postés 52 Date d'inscription   Statut Membre Dernière intervention   1
       
      J'ai déclaré les variables avant comme tu viens de me le dire. Ça donne ceci.

      <?php

      //---------------------------------------------------------//
      //affichage des erreurs PHP
      //---------------------------------------------------------//
      error_reporting(E_ALL);
      ini_set('display_errors', TRUE);
      ini_set('display_startup_errors', TRUE);


      //---------------------------------------------------------//
      //connexion à la BDD ET activation des erreurs PDO
      //---------------------------------------------------------//
      try{
      $bdd =new PDO('mysql:host=localhost;dbname=test; charset=utf8', 'root', '');
      // Activation des erreurs PDO
      $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
      // mode de fetch par défaut : FETCH_ASSOC / FETCH_OBJ / FETCH_BOTH
      $bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
      } catch(PDOException $e) {
      die('Erreur : ' . $e->getMessage());
      }

      //---------------------------------------------------------//
      // Récupération PROPRE des variables AVANT de les utiliser
      //---------------------------------------------------------//
      $nom = !empty($_GET['nom']) ? $_GET['nom'] : NULL;
      $possesseur = !empty($_GET['possesseur']) ? $_GET['possesseur'] : NULL;
      $console = !empty($_GET['console']) ? $_GET['console'] : NULL;
      $prix = !empty($_GET['prix']) ? $_GET['prix'] : NULL;
      $nbre_joueurs_max = !empty($_GET['nbre_joueurs_max']) ? $_GET['nbre_joueurs_max'] : NULL;
      $commentaires = !empty($_GET['commentaires']) ? $_GET['commentaires'] : NULL;



      $req = $bdd->prepare ('INSERT INTO jeux_video(nom, possesseur,
      console, prix, nbre_joueurs_max, commentaires) VALUES(:nom,
      :possesseur, :console, :prix, :nbre_joueurs_max, :commentaires)');
      $req->execute(array(
      'nom' =>$nom,
      'possesseur' =>$possesseur,
      'console' =>$console,
      'prix' =>$prix,
      'nbre_joueurs_max'=>$nbre_joueurs_max,
      'commentaires'=> $commentaires
      ));
      echo 'Le jeu a bien été ajouté !';


      ?>
      Comme message d'erreur j'ai :

      ( ! ) Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'nom' cannot be null' in C:\wamp\www\ASTUCESVBAEXCEL\requetepreparee_ajoutenregistrement.php on line 46
      ( ! ) PDOException: SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'nom' cannot be null in C:\wamp\www\ASTUCESVBAEXCEL\requetepreparee_ajoutenregistrement.php on line 46
      Call Stack
      # Time Memory Function Location
      1 0.0006 256520 {main}( ) ..\requetepreparee_ajoutenregistrement.php:0
      2 0.0021 267912 PDOStatement->execute( ) ..\requetepreparee_ajoutenregistrement.php:46

      Qu'est ce qui ne va pas ?
      0
    4. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
       
      Tes variables viennent d'où ?
      Un formulaire ? En POST ou en GET ?
      0
  3. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
     
    Je vais encore écrire un truc en gros.... puisque ça fait 4 fois que je te le dis mais que tu ne l'as visiblement toujours pas vu (ou du moins pas mis en pratique)
    Donc :

    utiliser les BALISES DE CODE pour poster ton code
    Explications disponibles ici : https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code

    cette fois c'est bon ??? tu as compris comment on poste du code sur le forum ??
    par ce que bon.. je vais avoir du mal à te l'écrire plus gros.

    Bref...

    Ensuite....
    Copier/coller du code au pif sans comprendre ne sert à rien.

    Le code que tu viens de nous donner devrait fonctionner
    $bdd ->exec('INSERT INTO jeux_video(nom, possesseur, console, prix,
    nbre_joueurs_max, commentaires) VALUES(\'Battlefield 1942\',
    \'Patrick\', \'PC\', 45, 50, \'2nde guerre mondiale\')'); 
    

    puisqu'il y a des valeurs à la place des variables...
    Contrairement au code que tu nous avais donné au préalable :
    $req = $bdd->prepare ('INSERT INTO jeux_video(nom, possesseur,
    console, prix, nbre_joueurs_max, commentaires) VALUES(:nom,
    :possesseur, :console, :prix, :nbre_joueurs_max, :commentaires)');
    $req->execute(array(
    'nom' =>$nom,
    'possesseur' =>$possesseur,
    'console' =>$console,
    'prix' =>$prix,
    'nbre_joueurs_max'=>$nbre_joueurs_max,
    ':commentaires'=> $commentaires
    )); 
    

    qui lui contient des variables... mais qui n'ont aucune valeur (puisque tu ne les as pas renseigné et qu'elle ne provienne pas d'un formulaire....

    Si tu remplaces CHAQUE variable par une valeur...ça fonctionnera
    par exemple :
    $nom = 'TEST';
    $possesseur ='Bidule';
    $console = 'PS4';
    $prix = '140';
    $nbre_joueurs_max = 1;
    $commentaires = "cette fois il y a des valeurs dans les variables";
    
    $sql = 'INSERT INTO jeux_video(nom, possesseur,
    console, prix, nbre_joueurs_max, commentaires) VALUES(:nom,
    :possesseur, :console, :prix, :nbre_joueurs_max, :commentaires)';
    
    $datas = array(
    ':nom' =>$nom,
    ':possesseur' =>$possesseur,
    ':console' =>$console,
    ':prix' =>$prix,
    ':nbre_joueurs_max'=>$nbre_joueurs_max,
    'commentaires'=> $commentaires
    );
    
    // c'est comme ça qu'on fait correctement une requête en PDO
    // dans un bloc TRY CATCH (tu dois le savoir puisque tu as lu les liens que je t'ai donné....)
    // et bien entendu.. tu auras activé la gestion des erreurs PDO lors de la connexion à la bdd (ça aussi c'est dans les liens que je t'ai donné )
    try{
       $req = $bdd->prepare ($sql);
       $req->execute($datas); 
    }catch(Exception $e){
      echo " Erreur :" . $e->getMessage();
    }
    
    


    EDIT : Je viens de voir que je t'avais déjà expliqué comment poster du code sur le forum dans ta précédente question (au moins 3 fois déjà....)
    Tu comprends vite à ce que je vois (ou pas....)
    Il serait bien que tu te mettes à appliquer les consignes qui te sont données....... le forum a des règles... les respecter est un minimum si l'on souhaite profiter de l'aide des personnes qui prennent sur leur temps personnel pour te répondre.....
    J'espère sincèrement que c'est le dernier rappel que je te fait à ce sujet
    Merci.

    0
    1. NICOLAS3377 Messages postés 52 Date d'inscription   Statut Membre Dernière intervention   1
       
      Je ne peux que me répéter en te disant que j'ai lu tous tes liens jusqu'à présent. Au passage merci beaucoup pour ton aide. Il faut un certain temps pour intégrer le langage PHP. Par ailleurs je ne fait pas du copier coller, j'essaie vraiment de comprendre comment on écrit du code PHP correctement. Nicolas
      0
  4. NICOLAS3377 Messages postés 52 Date d'inscription   Statut Membre Dernière intervention   1
     
    Je t'envoie une correction de la fin du message précédent où les noms de variables se terminent par , (une virgule).

    Code : PHP
    <?php
    $req =$bdd->prepare(
    'INSERT INTO jeux_video(nom, possesseur,
    console, prix, nbre_joueurs_max, commentaires) VALUES(:nom,
    :possesseur, :console, :prix, :nbre_joueurs_max, :commentaires)');
    $req->execute(array(
    'nom' =>$nom,
    'possesseur'=>$possesseur,
    'console'=>$console,
    'prix'=>$prix,
    'nbre_joueurs_max'=>$nbre_joueurs_max,
    'commentaires'=>$commentaires));
    echo 'Le jeu a bien été ajouté !';
    ?>

    Voilà. J'espère avoir été explicite.
    0
    1. NICOLAS3377 Messages postés 52 Date d'inscription   Statut Membre Dernière intervention   1
       
      J'ai également compris que les balises de code s'insèrent directement à partir de ce site et non à partir d'un éditeur de code comme notepad. Comme quoi tout finit par s'arranger.
      0
    2. NICOLAS3377 Messages postés 52 Date d'inscription   Statut Membre Dernière intervention   1
       
      Dans l'éditeur de code notepad+ il n'y a pas d'indentation de code. Par contre sur le site commentcamarche.net il y a un système d'indentation de code ce que je n'avais pas compris au début.
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
     
    Si tu veux apprendre le PHP... commence par le B.a.ba ...

    A savoir :

    Les variables :
    https://www.php.net/manual/fr/language.types.php
    http://php.net/manual/fr/language.variables.basics.php
    https://www.php.net/manual/fr/reserved.variables.get.php
    https://www.php.net/manual/fr/reserved.variables.post.php

    Les comparaisons
    https://www.php.net/manual/fr/language.operators.comparison.php
    https://www.php.net/manual/fr/language.control-structures.php

    Les fonctions
    https://www.php.net/manual/fr/language.functions.php

    Une fois que tu auras ces quelques notions... tu devrais comprendre un peu mieux ce que tu écris.

    0
    1. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
       
      PS: n'oublie pas de mettre le sujet en RESOLU.
      merci.
      0
    2. NICOLAS3377 Messages postés 52 Date d'inscription   Statut Membre Dernière intervention   1
       
      Bonsoir. Cela fait quelques mois que j’apprends le langage PHP. Je comprend parfaitement ce que j'écris contrairement à ce que tu viens de me dire. Cordialement. Nicolas
      0
    3. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830 > NICOLAS3377 Messages postés 52 Date d'inscription   Statut Membre Dernière intervention  
       
      bien sûr que non... sinon tu ne serais pas venu demander de l'aide pour ce souci.....
      Comprendre (approximativement disons... ) les lignes une par une est un début et n'est pas trop compliqué.... mais comprendre un ensemble de lignes de code, lignes qui vont, une fois réunies, devenir le "programme" .. là c'est autre chose.

      Mais bon... Il faut apprendre et persévérer .. on est tous passé par là.
      0
    4. NICOLAS3377 Messages postés 52 Date d'inscription   Statut Membre Dernière intervention   1
       
      Si je vais sur ce forum c'est pour demander de l'aide parce que je n'ai jamais prétendu maitriser le langage PHP. Si cela t'embête de dépanner les utilisateurs de ce site il faut arrêter de faire de la modération sur ce site. Je suis quelqu'un d'assidu. Je pense qu'à force de travail et de ténacité j'arriverai à utiliser sans problème le langage PHP.
      0
    5. NICOLAS3377 Messages postés 52 Date d'inscription   Statut Membre Dernière intervention   1
       
      Tous les liens que tu viens de m'envoyer aujourd'hui sur les variables, les comparaisons et les fonctions je les ai déjà étudiés depuis des mois. PHP ne s'apprivoise pas aussi facilement.
      0
  7. NICOLAS3377 Messages postés 52 Date d'inscription   Statut Membre Dernière intervention   1
     
    Bonjour,

    Le code ci-dessous exécute en php une requête sql avec alias mais je reçois le message d'erreur suivant
    ( ! ) Parse error: syntax error, unexpected '.' in C:\wamp\www\ASTUCESVBAEXCEL\requete_alias.php on line 16. Merci pour votre aide.

    <?php
    try
    {
        $bdd = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'root', '');
    }
    catch(Exception $e)
    
    {
            die('Erreur : '.$e->getMessage());
    
    }
    
    $reponse =$bdd->query('SELECT UPPER(nom) AS nom_maj,possesseur,console,prix FROM jeux_video');
    while ($donnees=$reponse->fetch())
    {
    echo $donnees['nom_maj']. . $donnees['possesseur']. . $donnees['console']. . $donnees['prix']'<br />';
    }
    $reponse ->closeCursor();
    ?>
    
    0