Probleme d'insertion (fonction d'ajout)
Résolu
SigProjet
Messages postés
21
Date d'inscription
Statut
Membre
Dernière intervention
-
SigProjet -
SigProjet -
A voir également:
- Probleme d'insertion (fonction d'ajout)
- Fonction si et - Guide
- Insertion sommaire word - Guide
- Touche insertion clavier - Guide
- Insertion filigrane word - Guide
- Insertion liste déroulante excel - Guide
3 réponses
Bonjour,
Fait une fois :
Puis la requête qui s'affiche dans le navigateur exécute là dans ton phpmyadmin et dis moi l'erreur retournée.
Fait une fois :
//écriture de la requête d'insertion $requete = "INSERT INTO joueur VALUES (NOT NULL,'".$id."','".$nom."','".$prenom."','".$adresse."','".$datenaiss."','".$classe."','".$cotisation."')"; exit($requete);
Puis la requête qui s'affiche dans le navigateur exécute là dans ton phpmyadmin et dis moi l'erreur retournée.
Salut,
Plusieurs choses à dire. La première, pour faciliter la lecture sur le forum, il serait souhaitable que tu utilises les balises de code pour afficher ton code. Dans ce cas présent ce n'est pas encore trop grave vu la taille du code que tu montres, mais c'est une bonne habitude à prendre ;)
Ensuite, le fait de récupérer tes variables directement dans ta variable globale $_POST n'est pas une bonne chose, c'est un risque de sécurité et une source d'erreur. Ca n'est pas vraiment le point le plus crucial pour faire fonctionner ton code, mais ce n'est pas parce que ton code fonctionne qu'il ne peut pas contenir d'erreurs. Encore une fois, c'est plus une bonne habitude à prendre pour la suite.
Tu utilises la fonction php mysql_query qui est dépréciée, et qui a disparu dans les versions récentes de PHP, il ne faut donc plus l'utiliser. Je te conseille de te référer régulièrement à la documentation officielle de PHP : https://www.php.net/manual/fr/function.mysql-query.php
Dans cette page, tu trouveras des informations très utiles, et il y a même une partie de la réponse, à savoir :
(je rappelle encore une fois, que la fonction mysql_query ne doit plus être utilisée, utilise plutôt mysqli_query, mais le code reste valable)
Ce qu'il faut retenir, c'est qu'une fonction renvoie souvent un résultat, et il faut tester ce résultat. Avec ce code, s'il y a un problème dans l'exécution de ta requête, la source de l'erreur sera indiquée.
Un réflexe à avoir, c'est de tester tes requêtes dans phpmyadmin. Juste après la création de ta chaine $requete, tu peux l'afficher, pour l'exécuter dans phpmyadmin, comme ceci par exemple :
(la fonction var_dump est très pratique pour le débuguer ton code)
Parfois, le simple fait d'afficher ta requête construite fera que l'erreur va te sauter aux yeux.
Plusieurs choses à dire. La première, pour faciliter la lecture sur le forum, il serait souhaitable que tu utilises les balises de code pour afficher ton code. Dans ce cas présent ce n'est pas encore trop grave vu la taille du code que tu montres, mais c'est une bonne habitude à prendre ;)
Ensuite, le fait de récupérer tes variables directement dans ta variable globale $_POST n'est pas une bonne chose, c'est un risque de sécurité et une source d'erreur. Ca n'est pas vraiment le point le plus crucial pour faire fonctionner ton code, mais ce n'est pas parce que ton code fonctionne qu'il ne peut pas contenir d'erreurs. Encore une fois, c'est plus une bonne habitude à prendre pour la suite.
Tu utilises la fonction php mysql_query qui est dépréciée, et qui a disparu dans les versions récentes de PHP, il ne faut donc plus l'utiliser. Je te conseille de te référer régulièrement à la documentation officielle de PHP : https://www.php.net/manual/fr/function.mysql-query.php
Dans cette page, tu trouveras des informations très utiles, et il y a même une partie de la réponse, à savoir :
$result = mysql_query('SELECT * WHERE 1=1'); if (!$result) { die('Requête invalide : ' . mysql_error()); }
(je rappelle encore une fois, que la fonction mysql_query ne doit plus être utilisée, utilise plutôt mysqli_query, mais le code reste valable)
Ce qu'il faut retenir, c'est qu'une fonction renvoie souvent un résultat, et il faut tester ce résultat. Avec ce code, s'il y a un problème dans l'exécution de ta requête, la source de l'erreur sera indiquée.
Un réflexe à avoir, c'est de tester tes requêtes dans phpmyadmin. Juste après la création de ta chaine $requete, tu peux l'afficher, pour l'exécuter dans phpmyadmin, comme ceci par exemple :
var_dump($requete);exit;
(la fonction var_dump est très pratique pour le débuguer ton code)
Parfois, le simple fait d'afficher ta requête construite fera que l'erreur va te sauter aux yeux.
Bonjour,
Ne peut pas marcher ...
La bonne requête serait :
Pour ce qui est de la requête d'insertion ...
le "NOT NULL" est faux !
A la limite :
Le mieux serait même d'indiquer les champs pour lesquels tu veux insérer les données ...
un truc du genre:
SELECT * WHERE 1=1'
Ne peut pas marcher ...
La bonne requête serait :
SELECT * FROM tatable WHERE 1=1'
Pour ce qui est de la requête d'insertion ...
$requete = "INSERT INTO joueur VALUES (NOT NULL,'".$id. "','".$nom. "','".$prenom. "','".$adresse. "','".$datenaiss. "','".$classe. "','".$cotisation. "')";
le "NOT NULL" est faux !
A la limite :
$requete = "INSERT INTO joueur VALUES (NULL,'$id','$nom','$prenom','$adresse','$datenaiss','$classe','$cotisation')";
Le mieux serait même d'indiquer les champs pour lesquels tu veux insérer les données ...
un truc du genre:
INSERT INTO tatable (champ1,champ2... ) VALUES ('valeur1', 'valeur2'...)
Au passage ...
Attention, l'extension mysql était obsolète en PHP 5.5.0, et a été supprimée en PHP 7.0.0.
https://www.commentcamarche.net/faq/43261-php-l-extension-mysql-est-obsolete#top
À la place, tu peux (<gras DOIS </gras> ) (même en 5.3 ) utiliser l'extension MySQLi ou l'extension PDO_MySQL
https://www.commentcamarche.net/faq/44117-connexion-a-une-base-avec-pdo-mysqli
Si tu choisis PDO, pense à activer la gestion des erreurs : https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs
Attention, l'extension mysql était obsolète en PHP 5.5.0, et a été supprimée en PHP 7.0.0.
https://www.commentcamarche.net/faq/43261-php-l-extension-mysql-est-obsolete#top
À la place, tu peux (<gras DOIS </gras> ) (même en 5.3 ) utiliser l'extension MySQLi ou l'extension PDO_MySQL
https://www.commentcamarche.net/faq/44117-connexion-a-une-base-avec-pdo-mysqli
Si tu choisis PDO, pense à activer la gestion des erreurs : https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs
Peux tu tester ceci :
<?php //------------------------------------------------------------------ //activation affichage des erreurs //------------------------------------------------------------------ error_reporting(E_ALL); ini_set('display-errors','on'); // inclusion du fichier de connexion require_once("connexion.php"); //recuperation PROPRE des valeurs passées en POST $id = !empty($_POST['id']) ? $_POST['id'] : NULL; $nom = !empty($_POST['nom']) ? mysql_real_escape_string($_POST['nom']) : NULL; $prenom = !empty($_POST['prenom']) ? mysql_real_escape_string($_POST['prenom']) : NULL; $adresse = !empty($_POST['adresse']) ? mysql_real_escape_string($_POST['adresse']) : NULL; $datenaiss = !empty($_POST['datenaiss']) ? mysql_real_escape_string($_POST['datenaiss']) : NULL; $classe = !empty($_POST['classe']) ? mysql_real_escape_string($_POST['classe']) : NULL; $cotisation = !empty($_POST['cotisation']) ? mysql_real_escape_string($_POST['cotisation']) : NULL; //écriture de la requête d'insertion $requete = "INSERT INTO joueur VALUES ('$id','$nom','$prenom','$adresse','$datenaiss','$classe','$cotisation')"; //Execution de la requete d'insertion if(mysql_query($requete,$db) or die ("Erreur dans la requete <br>: $requete <br>".mysql_error())) { //Redirection vers listejoueur header("Location: listejoueur.php"); exit(); } ?>
J'ai testé ton code cependant une erreur ce produit lors de l’exécution de la requête :
Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: Accès refusé pour l'utilisateur: 'roman'@'@localhost' (mot de passe: NON) in C:\Program Files (x86)\EasyPHP5.3.0\www\ajouter2joueur.php on line 13
Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: A link to the server could not be established in C:\Program Files (x86)\EasyPHP5.3.0\www\ajouter2joueur.php on line 13
Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: Accès refusé pour l'utilisateur: 'roman'@'@localhost' (mot de passe: NON) in C:\Program Files (x86)\EasyPHP5.3.0\www\ajouter2joueur.php on line 14
Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: A link to the server could not be established in C:\Program Files (x86)\EasyPHP5.3.0\www\ajouter2joueur.php on line 14
Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: Accès refusé pour l'utilisateur: 'roman'@'@localhost' (mot de passe: NON) in C:\Program Files (x86)\EasyPHP5.3.0\www\ajouter2joueur.php on line 15
Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: A link to the server could not be established in C:\Program Files (x86)\EasyPHP5.3.0\www\ajouter2joueur.php on line 15
Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: Accès refusé pour l'utilisateur: 'roman'@'@localhost' (mot de passe: NON) in C:\Program Files (x86)\EasyPHP5.3.0\www\ajouter2joueur.php on line 16
Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: A link to the server could not be established in C:\Program Files (x86)\EasyPHP5.3.0\www\ajouter2joueur.php on line 16
Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: Accès refusé pour l'utilisateur: 'roman'@'@localhost' (mot de passe: NON) in C:\Program Files (x86)\EasyPHP5.3.0\www\ajouter2joueur.php on line 17
Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: A link to the server could not be established in C:\Program Files (x86)\EasyPHP5.3.0\www\ajouter2joueur.php on line 17
Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: Accès refusé pour l'utilisateur: 'roman'@'@localhost' (mot de passe: NON) in C:\Program Files (x86)\EasyPHP5.3.0\www\ajouter2joueur.php on line 18
Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: A link to the server could not be established in C:\Program Files (x86)\EasyPHP5.3.0\www\ajouter2joueur.php on line 18
Warning: mysql_query() expects parameter 2 to be resource, object given in C:\Program Files (x86)\EasyPHP5.3.0\www\ajouter2joueur.php on line 25
Erreur dans la requete
: INSERT INTO joueur VALUES ('NULE','','','','','','')
Accès refusé pour l'utilisateur: 'roman'@'@localhost' (mot de passe: NON)
Je precise que j'ai testé cela chez moi et non au lieu de travail habituel . Cependant j'ai bien placé tout les fichiers ainsi que la base de donnée et la table ( que j'ai d'ailleurs tout les 2 importés sur phpmyadmin ) .
Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: Accès refusé pour l'utilisateur: 'roman'@'@localhost' (mot de passe: NON) in C:\Program Files (x86)\EasyPHP5.3.0\www\ajouter2joueur.php on line 13
Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: A link to the server could not be established in C:\Program Files (x86)\EasyPHP5.3.0\www\ajouter2joueur.php on line 13
Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: Accès refusé pour l'utilisateur: 'roman'@'@localhost' (mot de passe: NON) in C:\Program Files (x86)\EasyPHP5.3.0\www\ajouter2joueur.php on line 14
Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: A link to the server could not be established in C:\Program Files (x86)\EasyPHP5.3.0\www\ajouter2joueur.php on line 14
Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: Accès refusé pour l'utilisateur: 'roman'@'@localhost' (mot de passe: NON) in C:\Program Files (x86)\EasyPHP5.3.0\www\ajouter2joueur.php on line 15
Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: A link to the server could not be established in C:\Program Files (x86)\EasyPHP5.3.0\www\ajouter2joueur.php on line 15
Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: Accès refusé pour l'utilisateur: 'roman'@'@localhost' (mot de passe: NON) in C:\Program Files (x86)\EasyPHP5.3.0\www\ajouter2joueur.php on line 16
Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: A link to the server could not be established in C:\Program Files (x86)\EasyPHP5.3.0\www\ajouter2joueur.php on line 16
Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: Accès refusé pour l'utilisateur: 'roman'@'@localhost' (mot de passe: NON) in C:\Program Files (x86)\EasyPHP5.3.0\www\ajouter2joueur.php on line 17
Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: A link to the server could not be established in C:\Program Files (x86)\EasyPHP5.3.0\www\ajouter2joueur.php on line 17
Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: Accès refusé pour l'utilisateur: 'roman'@'@localhost' (mot de passe: NON) in C:\Program Files (x86)\EasyPHP5.3.0\www\ajouter2joueur.php on line 18
Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: A link to the server could not be established in C:\Program Files (x86)\EasyPHP5.3.0\www\ajouter2joueur.php on line 18
Warning: mysql_query() expects parameter 2 to be resource, object given in C:\Program Files (x86)\EasyPHP5.3.0\www\ajouter2joueur.php on line 25
Erreur dans la requete
: INSERT INTO joueur VALUES ('NULE','','','','','','')
Accès refusé pour l'utilisateur: 'roman'@'@localhost' (mot de passe: NON)
Je precise que j'ai testé cela chez moi et non au lieu de travail habituel . Cependant j'ai bien placé tout les fichiers ainsi que la base de donnée et la table ( que j'ai d'ailleurs tout les 2 importés sur phpmyadmin ) .
1 - Pour poster du code sur le forum.. merci d'utiliser la coloration syntaxique (les balises de code).
Explications disponibles ici : https://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code
MERCI D'Y PENSER A L'AVENIR !
2 - Ton fichier de connexion est en mysqli ... alors que ton code d'insertion est en mysql ???
Normal que ça ne marche pas !!!!
Donc tu changes tous les mysql_real_escape_string($unevariable)
par :
puis
A remplacer par :
Explications disponibles ici : https://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code
MERCI D'Y PENSER A L'AVENIR !
2 - Ton fichier de connexion est en mysqli ... alors que ton code d'insertion est en mysql ???
Normal que ça ne marche pas !!!!
Donc tu changes tous les mysql_real_escape_string($unevariable)
par :
$db->real_escape_string($unevariable);
puis
if(mysql_query($requete,$db) or die ("Erreur dans la requete <br>: $requete <br>".mysql_error())) { //Redirection vers listejoueur header("Location: listejoueur.php"); exit(); }
A remplacer par :
if($db->query($requete) ){ //Redirection vers listejoueur header("Location: listejoueur.php"); exit(); }
Erreur
requête SQL:
$requete = "INSERT INTO joueur VALUES (NOT NULL,'".$id. "','".$nom. "','".$prenom. "','".$adresse. "','".$datenaiss. "','".$classe. "','".$cotisation. "')";
MySQL a répondu:Documentation
#1064 - Erreur de syntaxe près de '$requete = "INSERT INTO joueur VALUES (NOT NULL,'".$id."','".$nom."','".$prenom.' à la ligne 1
Je precise que je travaille sous easyphp 5.3.0