Probléme INSERT INTO

Fermé
jesonlemaitre - 22 avril 2016 à 19:05
jordane45 Messages postés 38147 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 29 avril 2024 - 22 avril 2016 à 23:21
Bonjour,

je suis en terminal STMG option SIG et j'ai un projet a valider pour le bac. Mon projet et de permettre a une entreprise de livraison rapide de prendre les commandes sur leur site. J'utilise EASY PHP avec phpmyadmin pour ma base de données qui se compose de 2 tables (client, commande) les programmes que j'ai utilisés proviennent en parties des cours de cette années alors voila

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<title>Etudiants</title>
<link type="text/css" rel="stylesheet" href="style.css" />
</head>
<body>
<table>

<?php
// scripts de connexion au serveur et à la base de données
require ("connexion.php");
require ("info.php");
//appeler la fonction de connexion au serveur et à la base
connexion ($host, $user, $password, $base);
//sélectionner le contenu de la table etudiant en SQL
$rq="INSERT INTO client(numclient,adresse,ville,cp,pays,numtel,mail,ndc,mdp)
VALUES ('numclient','adresse','ville','cp','pays','numtel','mail','ndc','mdp')";
$rq = mysql_query($rq) or die ('Erreur sql !<br />'.$rq.'<br />'.mysql_error());
$nbchamps = mysql_num_fields($rq);
$ligne = mysql_fetch_array($rq);
if (mysql_num_rows($rq)>0)
{
// une boucle est faite pour lister les résultats
while ($ligne != false)

// Avec while la boucle s’exécute pour la première ligne du tableau, l’extrait et ainsi de suite Pour chaque ligne du tableau les balises <tr> </tr> sont utilisées et pour chaque cellule d’une ligne : <td></td>.
{
$i = 0;
while($i<$nbchamps)
{ echo $ligne[$i]."/";
$i++;}
echo"<br />";
$ligne = mysql_fetch_array($rq);
}
}
?>
</body>
</html>


Ce bout de code permet d'inscrire un client au site pour qu'il puisse par la suite prendre sa commande.

Le problème c'est que quand je lance ce programme sur Easy PHP, voici ce qui s'affiche.

Erreur sql !

Duplicata du champ '0' pour la clef 'PRIMARY'

Comment faire pour que ca marche

1 réponse

luckydu43 Messages postés 3484 Date d'inscription vendredi 9 janvier 2015 Statut Membre Dernière intervention 30 juin 2022 815
Modifié par luckydu43 le 22/04/2016 à 20:00
Bonjour !

Si des données sont déjà présentes en base, l'insertion d'une donnée ayant la même clé primaire qu'une autre donnée de la table sera refusée par le Système de Gestion de Bases de Données (SGBD)... et y aura raison ^^

Après, c'est du php, et je ne connais pas ce langage...

Première solution :
- Drop table puis insertion des données. C'est sale au possible.

Deuxième solution :
- Définir la clé primaire comme clé incrémentale, de sorte à ajouter les clients sans définir à la mano leur id. Puis retirer la colonne num-client du fichier de données (et du code ^^) avant l'insertion, de sorte de ne pas marcher sur les pieds de la clé primaire.
https://www.sqlfacile.com/apprendre_bases_de_donnees/champ_sql_auto_incremente

Bon courage !

Luc

Les 3 plus grands mensonges du dev : 1. La doc ? On la fera plus tard... 2. Le programme a été testé et ne comporte aucun bug... 3. Les spécifications techniques arrivent...
0
jordane45 Messages postés 38147 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 29 avril 2024 4 650
22 avril 2016 à 23:16
Bonjour lucky.
la deuxième solution sera la bonne.

bonne soirée
0
jordane45 Messages postés 38147 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 29 avril 2024 4 650 > jordane45 Messages postés 38147 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 29 avril 2024
22 avril 2016 à 23:21
Je complète avec ceci :
@Jeson, Tu utilises l'ancienne extension MYSQL considérée comme obsolète.
Je t'invite à lire ceci : https://www.commentcamarche.net/faq/43261-php-l-extension-mysql-est-obsolete#top
Puis à passer rapidement à mysqli ou à la PDO.

Pour ce qui est du problème, il suffira juste de mettre ta clé primaire en AUTO-INCREMENT. rien de plus.
0