Erreur : Undefined variable sur requete preparee [Résolu/Fermé]

Signaler
Messages postés
51
Date d'inscription
samedi 20 août 2016
Statut
Membre
Dernière intervention
14 octobre 2019
-
Messages postés
51
Date d'inscription
samedi 20 août 2016
Statut
Membre
Dernière intervention
14 octobre 2019
-
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

Messages postés
32054
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
11 avril 2021
3 391
Bonjour
Il est ou le code de connexion à ta bdd ?
Messages postés
51
Date d'inscription
samedi 20 août 2016
Statut
Membre
Dernière intervention
14 octobre 2019
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.
Messages postés
51
Date d'inscription
samedi 20 août 2016
Statut
Membre
Dernière intervention
14 octobre 2019
1
J'ai lu tous tes liens consacrés à la gestion des erreurs et les balises de code. Pour ce qui est des variables je ne sais pas du tout s'il faut les envoyer en GET ou POST car ce n'est pas indiqué dans le chapitre consacré au mysql .
Messages postés
51
Date d'inscription
samedi 20 août 2016
Statut
Membre
Dernière intervention
14 octobre 2019
1
D'une façon générale j'ai lu systématiquement tous les liens que tu m'as envoyés.
Messages postés
32054
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
11 avril 2021
3 391
Peux tu coller le code de ton formulaire html ????????? Ca fait 3 fois que je te le demande...
Messages postés
51
Date d'inscription
samedi 20 août 2016
Statut
Membre
Dernière intervention
14 octobre 2019
1
Ce n'est pas la peine d'écrire le mot "variables" en taille de police 18
Je t'envoie ci-dessous le code que j'ai trouvé dans le livre.

Code : PHP
<?php
try
{
$bdd =newPDO('mysql:host=localhost;dbname=test','root','');
}
catch (Exception $e)
{
die ('Erreur : '.$e-> getMessage());
}
// On ajoute une entrée dans la table jeux_video
$bdd ->exec('INSERT INTO jeux_video(nom, possesseur, console, prix,
nbre_joueurs_max, commentaires) VALUES(\'Battlefield 1942\',
\'Patrick\', \'PC\', 45, 50, \'2nde guerre mondiale\')');
echo 'Le jeu a bien été ajouté !'
;
?>
Que fait ce code ? Il ajoute une entrée dans la BDD pour le jeu « Battlefield 1942 », appartenant à « Patrick », qui fonctionne sur
« PC », qui coûte 45 euros, etc.
La présence de multiples apostrophes rend la requête un peu difficile à lire et à écrire à cause des antislashs
\
que l'on doit
rajouter devant. De plus, cette requête insère toujours les mêmes données. Comme on l'a vu dans le chapitre précédent, si on
veut rendre une partie de la requête variable, le plus rapide et le plus sûr est de faire appel aux requêtes préparées.
Partie 3 : Stocker des informations dans une base de données
162/309
www.siteduzero.com
Insertion de données variables grâce à une requête préparée
Si on choisit d'utiliser une requête préparée (ce que je vous recommande si vous souhaitez insérer des variables), le
fonctionnement est en fait exactement le même que dans le chapitre précédent :
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é !';
?>

C'est tout ce que j'ai trouvé dans le livre du siteduzero
Messages postés
51
Date d'inscription
samedi 20 août 2016
Statut
Membre
Dernière intervention
14 octobre 2019
1
Je n'ai pas trouvé le code du formulaire en html que tu m'as demandé dans le livre du siteduzero.
Messages postés
32054
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
11 avril 2021
3 391
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.





Cordialement, 
Jordane                                                                 
Messages postés
51
Date d'inscription
samedi 20 août 2016
Statut
Membre
Dernière intervention
14 octobre 2019
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
Messages postés
51
Date d'inscription
samedi 20 août 2016
Statut
Membre
Dernière intervention
14 octobre 2019
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.
Messages postés
32054
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
11 avril 2021
3 391
Messages postés
51
Date d'inscription
samedi 20 août 2016
Statut
Membre
Dernière intervention
14 octobre 2019
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.
Messages postés
51
Date d'inscription
samedi 20 août 2016
Statut
Membre
Dernière intervention
14 octobre 2019
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.
Messages postés
32054
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
11 avril 2021
3 391
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.


Messages postés
51
Date d'inscription
samedi 20 août 2016
Statut
Membre
Dernière intervention
14 octobre 2019
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
Messages postés
32054
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
11 avril 2021
3 391 >
Messages postés
51
Date d'inscription
samedi 20 août 2016
Statut
Membre
Dernière intervention
14 octobre 2019

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à.
Messages postés
51
Date d'inscription
samedi 20 août 2016
Statut
Membre
Dernière intervention
14 octobre 2019
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.
Messages postés
51
Date d'inscription
samedi 20 août 2016
Statut
Membre
Dernière intervention
14 octobre 2019
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.
Messages postés
51
Date d'inscription
samedi 20 août 2016
Statut
Membre
Dernière intervention
14 octobre 2019
1
Tous les liens que tu m'as envoyés aujourd'hui sur les variables, les comparaisons et les fonctions je les ai déjà étudiés depuis des mois dans l'ouvrage sur le PHP écrit par Mathieu Nebra et qui s'intitule Concevez-votre-site-web-avec-php-et-mysql.pdf. Nicolas
Messages postés
51
Date d'inscription
samedi 20 août 2016
Statut
Membre
Dernière intervention
14 octobre 2019
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();
?>