Vous n'êtes pas identifié(e).
Pages :: 1
Bonjour,
J'ai un problème d'insertion de mon fichier d'extension .CSV dans plusieurs tables de la base de données ... J'ai essayé de résoudre ça mais en vain
Voilà les tables de ma base de données:
****Pour mon fichier CSV il a les colonnes suivantes:
techno,num_serie,code_article,date_entree,date_facture,date_transitaire,date_arrivee_france,date_depart_france,delai_export,
date_retour,date_livraison,delai_import,delai_general,remarques
*** Voilà plus claire concernant mon fichier CSV je vais écrire table.colonne pour savoir pour chaque colonne de la table la colonne du csv correspondante:
produit.techno,produit.num_serie,produit.code_article,demande_produit.date_entree,
demande.date_facture,transit_produit.date_transitaire,transit_produit.date_arrivee_france,
transit_produit.date_depart_france,transit_produit.delai_export,demande_produit.date_retour,demande_produit.date_livraison,
transit_produit.delai_import,demande_produit.delai_general,produit.remarques
J'attends impatiemment vos suggestions car je suis bloquée
Merci pour votre compréhension
Hors ligne
Saluton,
J'avoue que tout cela n'est pas très clair d'autant que je vois certaines tables dont les clefs primaires sont en VARCHAR (produit et transitaire) ce qui ne va pas augmenter les performances.
Par ailleurs, certaines colonnes préfixées en FK semblent vouloir être des FOREIGN KEYS, alors puisque les tables sont en InnoDB, autant vraiment déclarer ces contraintes et leurs REFERENCES, ça serait plus clair pour nous et nous permettrait une rétro-conception du MPD.
Concrètement, il va falloir lire le fichier "csv" ligne par ligne en PHP, pour éclater dans autant de tableaux (arrays) que de tables impactées par chaque ligne et construire ensuite à partir de ces tableaux les requêtes d'INSERT multiples en respectant l'ordre des REFERENCES des clés étrangères.
Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy
Hors ligne
Bonjour,
Cela rejoint bien la tendance générale de l'improvisation à l'aveugle déguisée en pratique professionnelle à laquelle on est confronté tous les jours.
1) Des BD en innoDB encore moins structurées qu'en MyISAM et dire "et hop on fait du transactionnel", "la normalisation c'est bof".
2) Des colonnes prix article en DECIMAL(100,1) et dire "tout est normal, c'est opti"... etc
Quand on ne sait pas on demande et la démarche de faire nimp et de demander ce qui ne va pas, ca use, ca use. Mais bon il y a au moins l'effort de demander, ce qui n'est déjà pas si mal.
++
Dernière modification par Jc (10-12-2011 08:39:16)
POO PHP+Ajax en MVC avec PDO et Bases de données épaisses : What else?
Hors ligne
J'ai essayé de faire ce code comme test pour les 3 colonnes de csv mais ça marche pas :
//récupération des valeurs des champs:
$borderaux_client = $_POST["borderaux_client"] ;
$nom_transitaire = $_POST["nom_transitaire"] ;
//trouver le nom de projet correspondant à la demande
$reponse= mysql_query("SELECT projet.nom_projet FROM demande_projet,demande,projet WHERE demande_projet.id_demande=demande.id_demande AND projet.id_projet=demande_projet.id_projet AND demande.borderaux_client='$borderaux_client'" )or die(mysql_error());
$donnees=mysql_fetch_array($reponse);
$nom_projet=$donnees['nom_projet'];
?>
<br><br>
<p><strong>Nom projet</strong> :<?php echo $donnees['nom_projet'];?></p>
<input type="hidden" name="nom_projet" value=<?php echo $donnees['nom_projet'];?>>
<br/>
<?php
$req2 = "SELECT statut_demande FROM demande WHERE borderaux_client='".$borderaux_client."'";
$result3 = mysql_query($req2) or die('Erreur SQL !'.$req.'<br>'.mysql_error());
if ($result_statut = mysql_fetch_array($result3))
$statut_demande = $result_statut['statut_demande'];
if($statut_demande=="En cours" )
{
//on importe le fichier à inserer dans sql
$file=$_FILES["userfile"]["tmp_name"];
if (file_exists($file))
{
$open=fopen($file,"r" );
}
else
{
echo "Fichier introuvable !<br>Importation stoppée.";
exit();
}
while (($fileop=fgetcsv($open,1000,";" )) !==false)
{
$num_serie=$fileop[2];
$code_article=$fileop[3];
$designation=$fileop[1];
$reponse1 = mysql_query("SELECT * FROM produit where num_serie='$num_serie' " )or die( mysql_error() );
$i=0;
while($donnees=mysql_fetch_array($reponse1))
{
$i=1;
}
if($i==0)
{
$req = "SELECT id_projet FROM projet WHERE nom_projet='" . $nom_projet . "'";
$result = mysql_query($req) or die('Erreur SQL !'.$req.'<br>'.mysql_error());
if ($result_projet = mysql_fetch_array($result))
$id_projet = $result_projet['id_projet']; // récupère id_projet dans le tableau résultat
$query = "INSERT INTO produit(num_serie,code_article,designation,id_projet)VALUES('$num_serie','$code_article','$designation','$id_projet')";
$requete1 = mysql_query($query, $cnx) or die( mysql_error() ) ;
$req1 = "SELECT id_demande FROM demande WHERE borderaux_client='" . $borderaux_client. "'";
$result1 = mysql_query($req1) or die('Erreur SQL !'.$req.'<br>'.mysql_error());
if ($result_demande = mysql_fetch_array($result1))
$id_demande = $result_demande['id_demande']; // récèpure id_demande dans le tableau résultat
$sql2 = "INSERT INTO demande_produit (id_demande,num_serie)
VALUES ('$id_demande','$num_serie')" ;
$requete2 = mysql_query($sql2, $cnx) or die( mysql_error() ) ;
$sql3 = "INSERT INTO transit_produit (nom_transitaire,num_serie)
VALUES ('$nom_transitaire','$num_serie')";
$requete3 = mysql_query($sql3, $cnx) or die( mysql_error() ) ;
//affichage des résultats, pour savoir si l'insertion a marché:
if($requete1 && $requete2 && $requete3)
{
echo("L'insertion a été correctement effectuée" ) ;
}
else
{
echo("L'insertion a échouée" ) ;
}
}
else{
echo"<SCRIPT language=\"Javascript\">
alert(\"Ce produit existe!\" );
window.location.replace(\"ajout_produit.php\" );
</SCRIPT>";
exit();
}
}
fclose($open);
print '<h2>Importation terminée</h2>';
}
else{
echo"<SCRIPT language=\"Javascript\">
alert(\"Cette demande est déjà close !\" );
window.location.replace(\"AjoutPr.php\" );
</SCRIPT>";
}
?>
et Quand j'execute voilà l'erreur que j'ai:
"Incorrect string value: '\xB0 de S...' for column 'Num_serie' at row 1"
Ils m'ont dit de travailler avec une boucle de deux dimensions pour lire le fichier et l'inserer dans ma base de données mais je sais pas comment!!
et la deuxieme chose c'est que je sais pas comment inserer dans plusieurs table avec ce que mon fichier csv contient de colonnes.
merci d'avance
Hors ligne
Bonsoir,
Ne m'en voulez pas mais je passe mon tour.
Bonnes fêtes à vous.
Cordialement,
Jc
PS: Je vais être franc avec vous. J'estime que ce que vous demandez relève de la prestation commerciale, et qu'il y a des choses pour lesquelles dans la vie où il faut payer pour savoir ou pour que le travail soit fait, sauf si on a la chance de pouvoir le faire soi-même faut-il encore avoir le temps. Je ne vais donc pas faire de concurrence déloyale auprès de mes collègues ni m'étendre plus longtemps. Peut être qu'une âme charitable voudra bien vous aider, c'est tout le mal que je vous souhaite.
Dernière modification par Jc (10-12-2011 22:40:17)
POO PHP+Ajax en MVC avec PDO et Bases de données épaisses : What else?
Hors ligne
Ils m'ont dit de travailler avec une boucle de deux dimensions pour lire le fichier et l'inserer dans ma base de données mais je sais pas comment!!
Qui sont donc ces ILS ???
et la deuxieme chose c'est que je sais pas comment inserer dans plusieurs table avec ce que mon fichier csv contient de colonnes.
J'essayerai de trouver un peu de temps, ce soir, pour te dégrossir la solution.
Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy
Hors ligne
Bon, je n'ai pas eu le temps de me pencher sur ton truc hier soir alors je m'y colle, fissa, ce matin.
Je viens de me représenter, vite fait sur un bout de papier, un Modèle Physique de tes Données en m'appuyant sur tes CREATE TABLE.
Outre les remarques déjà faites concernant les clés primaires des tables mères qui devraient être des INT en AUTO_INCREMENT notamment `Num_serie` varchar(50) et `nom_transitaire` varchar(50), j'observe que la table projet devrait embarqué un lien vers la table client plutôt que `Client` varchar(40), même chose en ce qui concerne le `Chef_de_Projet` varchar(200). Car je doute qu'un client ne puisse avoir qu'un projet et la même chose pour le Chef_de_Projet.
Que dire de la colonne `nom_transitaire` de la table `transit_produit` où elle est censée représentée la clé étrangère de la table `transitaire` mais où elle n'est même pas déclarée en index.
Dans la table `demande_produit`, `id_demande`ne doit pas être en AUTO_INCREMENT puisqu'il s'agit de la clé étrangère provenant de la table `demande`.
Enfin, conceptuellement, je n'arrive pas à comprendre la présence de la colonne `id_projet` dans la table `produit`.
Ça commence à faire beaucoup de questions sans réponse, mais surtout, ça sent le truc improvisé voire bâclé.
Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy
Hors ligne
Pages :: 1