Probleme d'insertion (fonction d'ajout)

Résolu/Fermé
SigProjet Messages postés 21 Date d'inscription mardi 2 mai 2017 Statut Membre Dernière intervention 17 mai 2017 - 2 mai 2017 à 10:04
 SigProjet - 6 mai 2017 à 12:52
Bonjour tout le monde je travail actuellement sur un projet de création de site qui correspond a mon épreuve de BAC pour cette année , à savoir la gestion d'un club de foot . j'ai notamment réussi a créer et à importer la base de donnée. Pareil pour ma table nommée "joueur" . L'interface qui regroupe les fonctions comme "ajouter", "liste", "supprimer" ainsi que "modification" à également été créer . le fichier de connexion à la base de donnée est opérationnel lui aussi . Seulement voila , la fonction "ajouter" ne fonctionne pas . Je précise que j'ai créer deux fichiers ( ajouter1joueur , ajouter2joueur ) pour appliquer cette fonction. Je pense que la requête du second fichier ne fonctionne pas . Voici le codage du fichier en question :
<?
// inclusion du fichier de connexion
require_once("connexion.php");

//recuperation des valeurs passées en POST
$id = $_POST['id'];
$nom = $_POST['nom'];
$prenom = $_POST['prenom'];
$adresse = $_POST['adresse'];
$datenaiss = $_POST['datenaiss'];
$classe = $_POST['classe'];
$cotisation = $_POST['cotisation'];

//écriture de la requête d'insertion
$requete = "INSERT INTO joueur VALUES (NOT NULL,'".$id."','".$nom."','".$prenom."','".$adresse."','".$datenaiss."','".$classe."','".$cotisation."')";

//Execution de la requete d'insertion
mysql_query($requete,$db);

//Redirection vers listejoueur
header("Location: listejoueur.php");
?>

Merci si possible de m'aider . Tout soutien est le bienvenu .
A voir également:

3 réponses

Felice_ Messages postés 265 Date d'inscription mardi 25 avril 2017 Statut Membre Dernière intervention 20 juillet 2017 11
2 mai 2017 à 10:10
Bonjour,

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.
0
SigProjet Messages postés 21 Date d'inscription mardi 2 mai 2017 Statut Membre Dernière intervention 17 mai 2017
2 mai 2017 à 10:48
Voila ce qui m'est affiché :

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
0
Felice_ Messages postés 265 Date d'inscription mardi 25 avril 2017 Statut Membre Dernière intervention 20 juillet 2017 11 > SigProjet Messages postés 21 Date d'inscription mardi 2 mai 2017 Statut Membre Dernière intervention 17 mai 2017
2 mai 2017 à 11:30
SigProjet, vous m'avez mal compris, je vous proposais d’exécuter la requête afficher dans le navigateur par « exit » et non le code que vous avez écrit en php.
0
SigProjet Messages postés 21 Date d'inscription mardi 2 mai 2017 Statut Membre Dernière intervention 17 mai 2017
2 mai 2017 à 11:47
Excusez-moi mais j'ai du mal a comprendre: exécutez la requête afficher dans le navigateur par "exit" . Pourriez vous développez d'avantage , je débute en programmation.
0
ThEBiShOp Messages postés 8378 Date d'inscription jeudi 22 mars 2007 Statut Contributeur Dernière intervention 8 février 2021 1 566
Modifié le 2 mai 2017 à 10:25
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 :
$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.
0
SigProjet Messages postés 21 Date d'inscription mardi 2 mai 2017 Statut Membre Dernière intervention 17 mai 2017
2 mai 2017 à 10:57
Merci pour ta réponse =) . Cependant je suis dans l'obligation de traiter mon projet sous easyphp 5.3.0 donc malheureusement une partie de tes réponses ne peuvent pas s'appliquer dans mon cas .
0
ThEBiShOp Messages postés 8378 Date d'inscription jeudi 22 mars 2007 Statut Contributeur Dernière intervention 8 février 2021 1 566
2 mai 2017 à 11:00
ah bon ? Et en quoi ?
0
SigProjet Messages postés 21 Date d'inscription mardi 2 mai 2017 Statut Membre Dernière intervention 17 mai 2017
2 mai 2017 à 11:10
eh bien il n’y à que mysql_query qui fonctionne et pour ce qui est du test de la requête il y est notifié une erreur de syntaxe . Cependant j'ai du mal à voir cette erreur alors que j'ai pourtant vérifié plusieurs fois le codage .
Petite précision , je débute en programmation .
0
jordane45 Messages postés 38314 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 24 novembre 2024 4 705 > SigProjet Messages postés 21 Date d'inscription mardi 2 mai 2017 Statut Membre Dernière intervention 17 mai 2017
2 mai 2017 à 11:30
Bonjour,

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'...)
0
jordane45 Messages postés 38314 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 24 novembre 2024 4 705 > jordane45 Messages postés 38314 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 24 novembre 2024
2 mai 2017 à 11:31
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
0
jordane45 Messages postés 38314 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 24 novembre 2024 4 705
2 mai 2017 à 12:15
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();
}
?>

0
SigProjet Messages postés 21 Date d'inscription mardi 2 mai 2017 Statut Membre Dernière intervention 17 mai 2017
2 mai 2017 à 17:53
Merci je te dirais le résultat demain
0
SigProjet Messages postés 21 Date d'inscription mardi 2 mai 2017 Statut Membre Dernière intervention 17 mai 2017
Modifié le 2 mai 2017 à 19:25
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 ) .
0
jordane45 Messages postés 38314 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 24 novembre 2024 4 705 > SigProjet Messages postés 21 Date d'inscription mardi 2 mai 2017 Statut Membre Dernière intervention 17 mai 2017
2 mai 2017 à 19:26
Peux tu nous montrer le contenu de ton fichier connexion.php ?
0
SigProjet Messages postés 21 Date d'inscription mardi 2 mai 2017 Statut Membre Dernière intervention 17 mai 2017
2 mai 2017 à 19:35
Bien sur , le voici :

<?php
$localhost = '127.0.0.1';
$user = 'root';
$password = '';
$database = 'footclub';

$db = new mysqli($localhost, $user, $password, $database);

if (mysqli_connect_errno()) {
printf("Échec de la connexion : %s\n", $mysqli->connect_error);
exit();
}
0
jordane45 Messages postés 38314 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 24 novembre 2024 4 705
Modifié le 2 mai 2017 à 19:41
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 :
 $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();
}
0