[résolu]Importation csv

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [résolu]Importation csv

Re: Importation csv

par Jibe » 15 sept. 2011, 12:32

OK, tout bête en fait.
Merci

Re: Importation csv

par moogli » 14 sept. 2011, 20:48

salut,

je part du principe que le code est fonctionnel tel quel, le principe c'est d'utiliser deux tableaux, disons pour faire simple $ok et $ko.
lorsque tu rejete une ligne
$ko[] = $ligne;
lorsque tu valide une ligne : $ok[] = $ligne.

au final tu affiche le résultat :
<?php
if (count($ko) >0) {
echo '<p>Les lignes suivantes ont étaient rejetées</p>';
foreach ( $ko as $k){
echo $k.'<br />';
}
}
if (count($ok) >0) {
echo '<p>Les lignes suivantes ont étaient ajoutées</p>';
foreach ( $ok as $k){
echo $k.'<br />';
}
}
?>
tu veux raffiner la chose, il faut utiliser un tableau "2D" pour $ko
exemple
$ko[] = array ('ligne' => $ligne,'raison' => 'le x ou y existe déja, ou existe pas etc etc');

A toi de gérer le message d'erreur a ta convenance XD


@+

[résolu]Importation csv

par Jibe » 14 sept. 2011, 16:11

Bonjour,

J'ai une question à propos de l'importation de fichier csv dans une base de données mysql. Actuellement j'ai un script qui permet de lire un fichier csv et d'importer les données contenues dedans dans ma base.
En revanche avant l'importation j'ai du traitement à faire, du coup il n'y a pas toujours toutes les lignes du fichier csv qui sont importées dans la base.
J'aimerai donc savoir si il est possible d'afficher un tableau avec les lignes qui ont été importées et en dessous un tableau avec les lignes qui n'ont pas été importées ou bien un code qui permettrait d'afficher toutes les lignes du fichier csv et selon si elles ont été importées ou non mettre OK ou ERREUR par exemple.

Voici mon code actuel :
// <?php importation
				fgetcsv($fp, 4096, ",");
				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;
				$liste[3] = ( isset($liste[3]) ) ? $liste[3] : Null;
				$liste[4] = ( isset($liste[4]) ) ? $liste[4] : Null;
				$liste[5] = ( isset($liste[5]) ) ? $liste[5] : Null;
				$liste[6] = ( isset($liste[6]) ) ? $liste[6] : Null;

				$champs1=$liste[0]; // matricule
				$champs2=$liste[1]; // nom
				$champs3=$liste[2]; // prenom
				$champs4=$liste[3]; // libfct
				$champs5=$liste[4]; // libfctbis
				$champs6=$liste[5]; // libmet
				$champs7=$liste[6]; // date
				$champs7 = trim($champs7);
				
								
				// 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
								
				$res = $bdd->query("SELECT fonction.codefct, fonction.libfct, fonction_bis.codefct as codefctbis, fonction_bis.libfctbis, metier.codemet, metier.libmet FROM fonction, fonction_bis, metier 
				WHERE fonction.libfct = '$champs4' AND fonction_bis.libfctbis = '$champs5' AND metier.libmet = '$champs6'");
				while($te = $res->fetch())
				{
					$codef = $te['codefct'];
					$libf = $te['libfct'];
					$codefbis = $te['codefctbis'];
					$libfbis = $te['libfctbis'];
					$codem = $te['codemet'];
					$libm = $te['libmet'];
					
					if($champs4 == $libf && $champs5 == $libfbis && $champs6 == $libm)
					{
						$dated = explode("/", $champs7);
						$jour = $dated[0];
						$mois = $dated[1];
						$annee = $dated[2];
						$champs7 = $annee.'-'.$mois.'-'.$jour;
						//$bdd->exec("INSERT INTO collaborateur(matricule, nom, prenom, codefct, codefctbis, codemet, date) VALUES('$champs1','$champs2','$champs3','$codef','$codefbis','$codem','$champs7' )");
					}
				}
				$sql = $bdd->query('SELECT * FROM collaborateur ');
				?>
				<table>
				<tr>
				<td><?php /*echo $liste[0];?></td>
				<td><?php echo $liste[1];?></td>
				<td><?php echo $liste[2];?></td>
				<td><?php echo $liste[3];?></td>
				<td><?php echo $liste[4];?></td>
				<td><?php echo $liste[5];?></td>
				<td><?php echo $liste[6];*/?></td>

				</tr>
				</table>
				<?php
				}
				}

				// fermeture du fichier
				fclose($fp);
				//on supprime la derniere car elle est vide
L'idée c'est qu'à partir des données du fichier CSV, je fasse les traitements suivants :
- vérifier si le matricule existe déjà dans la table collaborateur, si c'est le cas on saute la ligne
- vérifier si le libfct existe dans la table fonction, si il n'existe pas, on saute la ligne
- vérifier si le libfctbis existe dans la table fonction_bis, si il n'existe pas, on saute la ligne
- vérifier que le libmet existe dans la table metier, si il n'existe pas, on saute la ligne
Sinon on insère les données.
Ensuite avoir un récapitulatif des lignes insérées et celles non insérées.


Merci