Duplicata du champ 'x' pour la clef 1

Fermé
joella Messages postés 112 Date d'inscription mercredi 13 février 2008 Statut Membre Dernière intervention 2 juin 2009 - 26 nov. 2008 à 09:08
joella Messages postés 112 Date d'inscription mercredi 13 février 2008 Statut Membre Dernière intervention 2 juin 2009 - 27 nov. 2008 à 13:14
Bonjour,
J'ai un pbm sur l'enregistrement des données dans la base de données Mysql car à la fin de l'enregistrement il renvoie l'erreur comme ceci: "DUPLICATA DU CHAMP ' ' POUR LA CLEF 1".
Voir la description de la table que je fais l'enregistrement:
T_mobilier_bureau:
{
numero_inventaire varchar(15) not null primary key,
matricule varchar(15) not null foreign key,
designation varchar(50) not null,
forme varchar(10) not null,
specificite varchar(20) not null
}
D'où vient mon pbm à cause du primary key ou du foreign key?
Si quelqu'un a une idée je vous remercie.
Merci d'avance et bonne journée
A voir également:

4 réponses

joella Messages postés 112 Date d'inscription mercredi 13 février 2008 Statut Membre Dernière intervention 2 juin 2009 12
27 nov. 2008 à 13:14
Bonsoir Toto,
Je vous remercie de vous m'aider sur mon pbm, si je teste avec (!empty($_POST["num$i"])) que vous me conseilliez, il marche bien.
C'est gentil.
Merci beaucoup.
1
Bonjour

Ça vient très probablement du numero_inventaire auquel tu essayres de donner la valeur ' ' (espace) alors que cette valeur est déjà présente dans la table
0
joella Messages postés 112 Date d'inscription mercredi 13 février 2008 Statut Membre Dernière intervention 2 juin 2009 12
27 nov. 2008 à 08:16
Bonjour,
Le numero d'inventaire que je l'insére n'est pas existe dans la table dans le base de données mais voici le code du formulaire d'insertion des donnés:
<form method="post" name="bureau" action="ajout_bureau.php">
<table width="200" border="1">
<div align="center"><span class="Style5">MOBILIER DE BUREAU</span></div>
<tr>
<th>Numero d'Inventaire</th>
<th>Désignation</th>
<th>Forme</th>
<th>Spécificité</th>
</tr>
<?php
for ($i=0; $i<5; $i++)
{
echo " <tr><td><input type='text' name='num$i' value='' size='20'></td>
<td><input type='text' name='designation$i' value='' size='20'></td>
<td><input type='text' name='forme$i' value='' size='20'></td>
<td><select name='specificite$i'>
<option>Bois</option>
<option>Cuir</option>
<option>Metallique</option>
<option>Plastique</option>
</select>
</td></tr>";
}

?>
<tr><td colspan="4"><center><input type="submit" value="Ajouter" /></center></td></tr>

</table>
</form>
Et voici le code sur ajout_bureau.php:
<?php
require_once("connexion_fiche.php");
for ($i=0; $i<5; $i++)
{
// declaration de la variable dans le table mobilier de bureau
echo "num$i'".$_POST["num$i"]."'";
if (isset($_POST["num$i"]))
{
$V=$_POST["num$i"];
$D=$_POST["designation$i"];
$F=$_POST["forme$i"];
$S=$_POST["specificite$i"];
}


// insertion des données dans la table mobilier de bureau
$bureau="INSERT INTO mobilier_bureau (numero_inventaireB, designationB, forme, specificite) VALUES ('$V','$D','$F','$S')";
echo $bureau;
$query=mysql_query($bureau) or die(mysql_error());
echo $query;
echo "<p><font face='Arial' size='3'><center>L'enregistrement du mobilier de bureau est bien faite</center></font></p>";
//--->

}
include("bureau.php");
?>
Eske le boucle for le renvoie cette duplicata ou non.
Merci d'avance
0
En effet, (isset($_POST["num$i"])) est toujours vrai car les champs sont définis même si on n'a rien saisi dedans.
Il faudrait tester (!empty($_POST["num$i"]))
De plus, il faudrait vérifier que le nouveau numéro d'inventaire n'est pas déjà présent dans la base avant l'insertion, car un opérateur peut toujours se tromper, et ton script va se planter, et il ne sera pas facile de savoir dans un formulaire où on saisit plusieurs articles lesquels ont bien été pris en compte et lesquels pas.
0