[SQL] Duplicata du champ '0' pour la clef 1 [Résolu/Fermé]

Signaler
Messages postés
772
Date d'inscription
mardi 28 octobre 2008
Statut
Membre
Dernière intervention
26 novembre 2017
-
Messages postés
772
Date d'inscription
mardi 28 octobre 2008
Statut
Membre
Dernière intervention
26 novembre 2017
-
Bonjour, comme mit dans le titre, j'ai ce message ( Duplicata du champ '0' pour la clef 1 )qui intervient après l'insertion de ma requête seulement je ne vois pas d'où vient l'erreur parce que je ne pense pas que ce soit le double et surtout qu'est-ce que la clef 1..

Merci de votre aide

21 réponses

Messages postés
104
Date d'inscription
lundi 25 mai 2009
Statut
Membre
Dernière intervention
18 juin 2009
1
As tu wamp server il te donnera le code dans le PHPMyadmin et pourquoi tu ne le fait pas manuellement ta base de donnée avec le PHPMyAdmin ? Il te créera ta BDD MySQL.
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 93716 internautes nous ont dit merci ce mois-ci

Messages postés
1043
Date d'inscription
lundi 4 mai 2009
Statut
Webmaster
Dernière intervention
21 avril 2020
59
Bonjour,
il ne faut PAS seter le champ auto_increment ...
donc
-> soit tu le passes à NULL
-> soit tu utilises la syntaxe :
INSERT INTO Clients SET nom="$nom", prenom="$prenom", ...
SANS donc seter l'Id ...

PS Egalement attention à bien protéger les quotes et autres, si tu es en php : voir mysql_real_escape_string, mysql_escape_string, addslahes, ...

Bon courage
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 93716 internautes nous ont dit merci ce mois-ci

Messages postés
772
Date d'inscription
mardi 28 octobre 2008
Statut
Membre
Dernière intervention
26 novembre 2017
41
Personne ne sait svp?
Messages postés
104
Date d'inscription
lundi 25 mai 2009
Statut
Membre
Dernière intervention
18 juin 2009
1
J'essaye de voir ton problème désolée peux-t-être que je me trmpe mais bon c'est mieu que rien lol ...
Est-ce que se champ là est en auto-incrément et la clé en mode primaire.
La clé 1 c'est par rapport au champ auto-incrément mais je ne suis pas sur !!!

espérant que sa peu te donner une petite aide lol
Messages postés
772
Date d'inscription
mardi 28 octobre 2008
Statut
Membre
Dernière intervention
26 novembre 2017
41
Voilà comment j'ai créer ma base de données:

CREATE TABLE Produit (
idProduit int(11) NOT NULL PRIMARY KEY auto_increment,
nom varchar(30) NOT NULL default '',
categorie varchar (30) NOT NULL default '',
reference varchar(30) NOT NULL default '',
photo varchar(50) NOT NULL default 'non_disponible.PNG',
prixHT int(11) NOT NULL default '0'
) ;
Messages postés
772
Date d'inscription
mardi 28 octobre 2008
Statut
Membre
Dernière intervention
26 novembre 2017
41
Je suis habitué à utiliser easyphp à mon lycée et j'ai bien créer cette base de données avec phpmyadmin mais sans résultat.. :/

J'ai même le problème que ça n'affiche pas la liste dans la BDD alors que c'est le même code adapté que celui de mon lycée qui lui fonctionne.. '-_-
Messages postés
104
Date d'inscription
lundi 25 mai 2009
Statut
Membre
Dernière intervention
18 juin 2009
1
??? Bizarre sa ...
t'es sur que les mots de passe, pseudo etc sont bon ? elle existe cette base de donnée ? Le nom est correct ?,

Je ne peux pas trop te dire je n'ai jamais utilisé cette fonction dans un script...
Messages postés
772
Date d'inscription
mardi 28 octobre 2008
Statut
Membre
Dernière intervention
26 novembre 2017
41
Oui normalement tout est bon parce que dans mon code, j'exécute la commande pour se connecter à ma BDD avec un login et s'il ne peut pas, il me met un message d'erreur et il ne le fait pas donc ça doit être bon logiquement..

Voilà mon code pour aider:
------------------------------------------------------------------------------------------------------

/* connexion au serveur MySql
remplacer localhost pr l'IP du serveur
ensuite renseigner le login et le mot de passe*/

$connexion = mysql_connect("localhost","root") or die("Connexion impossible au serveur");

/* connexion a votre base indiquer votre nom de login*/
mysql_select_db("Site") or die("Connexion impossible a la base");


/* requete a executer */
$query = "SELECT nom,categorie,reference,photo FROM Produit";


/* execution de la requete */
$result = mysql_query($query) or die("Requete échouée");

echo "<table border='2' class='tableau_produit'>";
echo "<tr>
<th class='tableau_nom'>
Nom du produit
</th>
<th class='tableau_nom'>
Catégorie du produit
</th>
<th class='tableau_nom'>
Référence du produit
</th>
<th class='tableau_photo'>
Photo du produit
</th>
</tr>";


// tant qu'il y a des lignes de retournées on affiche les films
while ($line = mysql_fetch_array($result)) {

/* la fonction mysql_fetch_array retourne les résultats sous la forme d'un tableau associatif dans lequel on accède aux différents éléments de la manière suivante
*/


echo "<tr>";
echo "<td>$line[nom]</td>";
echo "<td>$line[categorie]</td>";
echo "<td>$line[reference]</td>";
echo "<td><img src=images/$line[photo] width=150px height=100px></td>";
echo "</tr>";

}

echo "</table>";


------------------------------------------------------------------------------------------------------

Je mets mon code en gras et le reste, ce sont les commentaires..
Messages postés
772
Date d'inscription
mardi 28 octobre 2008
Statut
Membre
Dernière intervention
26 novembre 2017
41
Personne d'autres ne sait svp?
Messages postés
104
Date d'inscription
lundi 25 mai 2009
Statut
Membre
Dernière intervention
18 juin 2009
1
Essaye de mettre une étoile pour ta requête comme ceci "SELECT * FROM Produit" pour faire un test si ce n'est pas les noms qui serait faux ..
Messages postés
1043
Date d'inscription
lundi 4 mai 2009
Statut
Webmaster
Dernière intervention
21 avril 2020
59
Bonjour,

Ca n'est pas une requete SELECT qui peut renvoyer ce genre de messages (ou alors c'est que MySQL est grave malade !), mais une requete INSERT ...
En l'occurence dans ta table IdProduit est une clé primaire, donc unique.

Comme elle est auto-increment, tu ne devrais pas avoir à t'en occuper, mais si tu la passes dans un INSERT (à la main ou à cause d'un outil mal fait :) ), ca provoquera effectivement une erreur "duplicate entry ... key 1" ...`
La clé 1 signie la 1ere trouvée, or dans ta table il n'y en a qu'une :)

Ex d'un telle requete :
INSERT INTO Produit SET IdProduit=1, nom="test";
--> joue la 2 fois de suite (en supposant ta table vide avant de commencer), et la 2ème renverra ton message d'erreur ...

Bon courage
Messages postés
772
Date d'inscription
mardi 28 octobre 2008
Statut
Membre
Dernière intervention
26 novembre 2017
41
Donc ma requête $query = "INSERT INTO Client values('', '$sexe', '$nom', '$prenom', '$mail','$mdp', '$naissance', '$adr', $telephone);"; n'est pas bonne et il faut la remplacer par $query = "INSERT INTO Client values('$sexe', '$nom', '$prenom', '$mail','$mdp', '$naissance', '$adr', $telephone);";?
Bonjour

Non, le changement à faire n'est pas celui-là, il est sûr de ne pas marcher.
Peux-tu donner la définition de la table Client ?
Messages postés
772
Date d'inscription
mardi 28 octobre 2008
Statut
Membre
Dernière intervention
26 novembre 2017
41
Voici ma table client:
CREATE TABLE Client (
idClient int(11) NOT NULL PRIMARY KEY auto_increment,
civilite varchar(4) default NULL '',
nom varchar(50) default NULL '',
prenom varchar(50) default NULL '',
mail varchar(50) NOT NULL default '',
mdp varchar(50) NOT NULL default '',
naissance varchar(10) default NULL,
adresse varchar(200) default NULL,
telephone int(10) default NULL
) ;
Messages postés
1043
Date d'inscription
lundi 4 mai 2009
Statut
Webmaster
Dernière intervention
21 avril 2020
59
INSERT INTO Clients (civilite, nom, prenom, mail, mdp, naissance, adresse, telephone)
VALUES ('$sexe', '$nom', '$prenom', '$mail','$mdp', '$naissance', '$adr', $telephone);
Messages postés
772
Date d'inscription
mardi 28 octobre 2008
Statut
Membre
Dernière intervention
26 novembre 2017
41
Je ne sais pas trop ce qui change entre ta requête et la mienne mais je ne m'y familiariserai jamais.. :(

Ca a l'air de fonctionner seulement maintenant il me dit que ma table n'existe pas alors qu'il a bien réussi à s'y connecter normalement vu qu'il ne me met pas de message d'erreur.. ?

Voici le message d'erreur: La table 'site.clients' n'existe pas

Quand je fais clic droit sur l'icône d'easyphp en bas à droite, je vais dans "administration" puis "gestion BDD", je sélectionne ma BDD "site" et je vois bien en dessous ma table "client" et "produit" mais écrit en minuscule, peut-être ça l'erreur, esayphp tient compte de la casse?
Client ou Clients ?
Messages postés
1043
Date d'inscription
lundi 4 mai 2009
Statut
Webmaster
Dernière intervention
21 avril 2020
59
Ce qui change : je liste les champs que je veux mettre a jour, et j'ai ENLEVE de la liste ton idClient :)
Pour la casse : en fait ca depend de bcp de choses (OS genre Win VS linux, conf, ...) mais il vaut mieux partir du principe que OUI MySQL est sensible à la casse ...

Bonne continuation
Messages postés
772
Date d'inscription
mardi 28 octobre 2008
Statut
Membre
Dernière intervention
26 novembre 2017
41
Client.. ^^

Ma requête a l'air de s'être exécuté puisqu'il ne me met pas de message..

Et vu mon code, je pense que cela est normal?

-----------------------------------------------------------------------------------------------

$query = "INSERT INTO Client (civilite, nom, prenom, mail, mdp, naissance, adresse, telephone) VALUES ('$sexe', '$nom', '$prenom', '$mail','$mdp', '$naissance', '$adr', $telephone);";

/* execution de la requete */
$result = mysql_query($query) or die(mysql_error());
}


-----------------------------------------------------------------------------------------------
Messages postés
1043
Date d'inscription
lundi 4 mai 2009
Statut
Webmaster
Dernière intervention
21 avril 2020
59
oui ;) regarde tout simplement (via phpMyAdmin ou autre) si ton enregistrement a bien été inséré ?