Eviter l'insertion de doublons
Salut,
Voici un script PHP qui permet d'importer des données dans ma table SQL depuis un fichier .csv
=>voir la table (screen)
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152
| <?php
//Appel des différentes fonctions d'une page PHP
require_once("fonctions.php");
entete();
banniere("Importation d'un fichier .csv");
$link = mysql_connect(HOST, USER, PASS);
mysql_select_db(BASE, $link);
//=========================
// Traitement des donnees
//=========================
//recupere le nom du fichier indiqué par l'user
$fichier=$_FILES["userfile"]["name"];
// ouverture du fichier en lecture
if ($fichier)
{
//ouverture du fichier temporaire
$fp = fopen ($_FILES["userfile"]["tmp_name"], "r");
}
else{
// fichier inconnu
?>
<p align="center" >- Importation echouee -</p>
<img src="images/echec.png" alt="logo-echec"></img>
<p align="center" ><B>Vous n'avez pas specifie de chemin valide ...</B></p>
<?php
exit();
}
// declaration de la variable "cpt" qui permettra de conpter le nombre d'enregistrement réalisé
$cpt=0;
?>
<a name="haut"></a>
<center>
<p>IMPORTATION REUSSI !</p>
<img height=60 width=60 src="images/reussi.jpg" alt="logo-reussi"></img>
</center>
<p align="right"><a href="#bas">Bas de page</a></p>
<a name="haut"></a>
<center>
<table border=2>
<th colspan=3>Elements importes</th>
<tr>
<td>Libelle UV</td>
<td>Credit UV</td>
<td>Categorie UV</td>
</tr>
<?php
// importation
while (!feof($fp))
{
$ligne = fgets($fp,4096);
// on crée un tableau des élements séparés par des points virgule
$liste = explode(";",$ligne);
// premier élément
$liste[0] = ( isset($liste[0]) ) ? $liste[0] : Null;
$liste[1] = ( isset($liste[1]) ) ? $liste[1] : Null;
$liste[2] = ( isset($liste[2]) ) ? $liste[2] : Null;
$champs1=$liste[0];
$champs2=$liste[1];
$champs3=$liste[2];
// pour eviter qu un champs "nom" du fichier soit vide
if ($champs1!='')
{
// nouvel ajout, compteur incrémenté
$cpt++;
// requete et insertion ligne par ligne
// champs1 id en general dc on affecte pas de valeur
mysql_query("INSERT INTO uv(libelleUv, creditUv, categorieId) VALUES('$champs1','$champs2','$champs3' )");
?>
<tr>
<td><?php echo $liste[0];?></td>
<td><?php echo $liste[1];?></td>
<td><?php
if($liste[2]==2){
echo "Conn. Scientif.";}
elseif($liste[2]==3){
echo "Techn. et Meth.";}
elseif($liste[2]==5){
echo "Stage";}
elseif($liste[2]==4){
echo "Express. Comm.";}
elseif($liste[2]==1){
echo "Culture Generale";}
;?>
</td>
</tr>
<?php
}
}
// fermeture du fichier
fclose($fp);
//on supprime la derniere car elle est vide
//==================
// FIN
//==================
?>
</table>
<br><br>Nombre de valeurs nouvellement enregistrees: <b><?php echo $cpt;?></b>.<br><br>
<a name="bas"></a>
<p align="right"><a href="#haut">Haut de page</a></p><br>
<?php
//Appel des boutons de retour
retouretaccueil();
//Appel de la fonction pied de page
finpage();
?> |
Ce code est présent sur mon site car les personnes l'administrent ne connaissent pas phpmyadmin.
Le script marche parfaitement mais j'aimerais qu'il empêche l'insertion de doublon !
Exemple :
Dans ma table j'ai un champ :
AG80 - 4 - 2
J'aimerais que si dans mon fichier .csv j'ai un champ avec libelleUv = AG80, il ne l'insère pas dans la table.
Merci !!! de votre aide
Quel champ dois-je rendre unique (anti doublon) ?
Salut,
Voilà je possède une table "semestreetude" : il s'agit tout bonnement d'un semestre d'étude pour un étudiant
=> voir screen
Je possède aussi une table "etudiant" référençant les informations personnelle d'un étudiant (nom, prénom, adresse...)
Un étudiant peut posséder plusieurs semestre d'étude, les voici :
- EDIM 1
- EDIM 2
- EDIM 3
- EDIM 4
- EDIM 5
- EDIM 6
- EDIM 7
- EDIM 8
où EDIM représente le libelleSemestreEtude,
et 1,2,3... représente le niveauSemestreEtude
Un étudiant ne peut pas avoir deux fois le même semestre d'étude !
J'aimerais que lors de l'insertion de semestre d'étude dans ma table semestreetude, qu'il n'y ai pas de doublon, comme ici pour EDIM1
Quel(s) champ(s) dois-je rendre unique ??
MERCI !!!