Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
813 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  probleme importation .CSV vers MySQL

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

probleme importation .CSV vers MySQL

n°2113431
angelina88
Posté le 27-11-2011 à 12:27:21  profilanswer
 

Bonjour,  
Je suis étudiante, j'ai un projet à faire et j'ai un probleme concernant l'importation de fichier .CSV vers la base de données MySQL .Voilà mon code :  
J'ai fait 2 pages la premiere "AjoutPr.php" pour selectionner le fichier et la page "ajout_produit2.php" pour le traiter :  
-AjoutPr.php  
"<?php  
mysql_connect("localhost", "root", "" ); // Connexion à MySQL  
mysql_select_db("alu" ); // Sélection de la base  
?>  
<br><br>  
<form action="ajout_produit2.php" method="post" name="form1" class="Style6" enctype="multipart/form-data">  
<fieldset ><legend class="Style12">Veuillez saisir les champs suivants:</legend>  
<br><br>  
<table width="600" height="350" border="0">  
<tr>  
<td><div align="left"><strong>Sélectionnez le borderaux client pour la demande concernée <br/></strong></div></td>  
<td><div align="left"><strong>:</strong></div></td>  
<td>  
<div align="left">  
<select name="borderaux_client" >  
<?php  
$reponse = mysql_query("SELECT borderaux_client FROM demande" );  
while($donnees=mysql_fetch_array($reponse))  
{  
echo"<option>".$donnees['borderaux_client']."</option>";  
}  
?>  
</select>  
</div></td></tr>  
<tr>  
<td><div align="left"><strong>Sélectionnez le nom du transitaire <br/></strong></div></td>  
<td><div align="left"><strong>:</strong></div></td>  
<td>  
<div align="left">  
<select name="nom_transitaire" >  
<?php  
$reponse = mysql_query("SELECT nom_transitaire FROM transitaire" );  
while($donnees=mysql_fetch_array($reponse))  
{  
echo"<option>".$donnees['nom_transitaire']."</option>";  
}  
?>  
</select>  
</div></td>  
</tr>  
</table> </fieldset>  
<table width="150" border="1" align="center">  
<tr>  
<td colspan="2"><strong>Importation</strong></td>  
</tr>  
<tr>  
<td>Fichier:</td>  
<td><input name="userfile" type="file" id="userfile" value=""></td>  
</tr>  
<tr>  
<td> </td>  
<td><input type="submit" name="Submit" value="ET HOP!">  
</tr>  
</table>  
</form>  
"  
-Ajout_produit2.php:  
"<?php  
//connection au serveur  
$cnx = mysql_connect( "localhost", "root", "" ) or die("Impossible de se connecter à la base de données" );  
//sélection de la base de données:  
$db = mysql_select_db( "alu" ) or die("Impossible de se connecter à la base de données" );  
//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'];?>>  
<p> </p><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"  
Une derniere question :D apres avoir regler ce probleme est ce qu'il y a moyen que je ne stocke pas la 1ère ligne du fichier car elle est reservée aux titres des colonnes :)
Mercii d'avance ^^ J'attends vos suggestions impatiemment :)  
Bonne journée

mood
Publicité
Posté le 27-11-2011 à 12:27:21  profilanswer
 

n°2113434
mohoi
Posté le 27-11-2011 à 12:54:47  profilanswer
 

Bonjour,
 
Pour ne pas injecter les titres, tu peux commencer la lecture de ton tableau depuis la case "1", au lieu de commencer par "0".
 
Exemple:  
 

Code :
  1. if ($my_data[1])
  2. {
  3.    $i = 1;
  4.    while ($my_data[$i])
  5.   {
  6.       echo "<pre>";
  7.       echo $my_data[$i++];
  8.       echo "</pre>";
  9.    }
  10. }

n°2113757
angelina88
Posté le 29-11-2011 à 00:16:36  profilanswer
 

Merci pour ta réponse mohoi c gentil :) mais comment intégrer ça dans mon code

n°2113766
mohoi
Posté le 29-11-2011 à 08:27:15  profilanswer
 

Bonjour,
 
Déjà, tu peux commencer par utiliser la fonction "filesize", pour récupérer la taille de ton fichier, au lieu de mettre une valeur fixe telle que "1000" dans "fgetcsv".
 
Ensuite, j'ai l'impression que ton code contient des instructions un peu extraterrestre.
 

Code :
  1. while($donnees=mysql_fetch_array($reponse1))
  2. {
  3.    $i=1;
  4. }


 
Tu te connectes à ta base de données deux fois: une fois au début, puis une autre fois au milieu... Pourquoi faire?
 
Et d'autre encore...
 
Donc ce que je peux te proposer, c'est que tu revois tout ton code, et que tu testes chaque bout petit a petit!
 
Une dernière chose, indente ton code! Tu aura une vision au combien plus clair!

n°2114376
angelina88
Posté le 02-12-2011 à 02:03:41  profilanswer
 

Ok Merci bien ^^ concernant l'erreur qu'on me donne ça montre pas où est le problème exactement!

n°2114377
angelina88
Posté le 02-12-2011 à 02:04:08  profilanswer
 

?

n°2114488
mohoi
Posté le 02-12-2011 à 14:54:23  profilanswer
 

Comment cela ?

n°2115900
angelina88
Posté le 10-12-2011 à 13:31:53  profilanswer
 

Mon problème c'est l'insertion de mon fichier d'extension .CSV dans plusieurs tables... J'ai essayé de résoudre ça mais en vain    
 
Voilà les tables de ma base de données est ce que tu peux me proposer une solution :  
 
--  
 
-- --------------------------------------------------------  
 
--  
-- Structure de la table `demande`  
 
CREATE TABLE IF NOT EXISTS `demande` (  
`id_demande` int(11) NOT NULL auto_increment,  
`Borderaux_client` varchar(200) character set ascii default NULL,  
`Statut_Demande` varchar(50) character set ascii default NULL,  
`Ref_dossier` varchar(200) character set ascii default NULL,  
`Date_facture` varchar(50) character set ascii default NULL,  
PRIMARY KEY (`id_demande`)  
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=22 ;  
 
 
 
-- --------------------------------------------------------  
 
--  
-- Structure de la table `demande_produit`  
--  
 
CREATE TABLE IF NOT EXISTS `demande_produit` (  
`id_demande` int(11) NOT NULL auto_increment,  
`Num_serie` varchar(50) character set ascii NOT NULL,  
`RMA` varchar(200) character set ascii default NULL,  
`Date_entee` varchar(50) character set ascii default NULL,  
`Date_retour` varchar(50) character set ascii default NULL,  
`Date_livraison` varchar(50) character set ascii default NULL,  
`Delai_general` varchar(50) character set ascii default NULL,  
PRIMARY KEY (`id_demande`,`Num_serie`),  
KEY `FK_demande_produit_Num_serie` (`Num_serie`)  
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;  
 
 
 
 
-- --------------------------------------------------------  
 
--  
-- Structure de la table `demande_projet`  
--  
 
CREATE TABLE IF NOT EXISTS `demande_projet` (  
`id_projet` int(11) NOT NULL,  
`id_demande` int(11) NOT NULL,  
`Date_demande_projet` varchar(20) character set ascii default NULL,  
PRIMARY KEY (`id_projet`,`id_demande`),  
KEY `FK_Demande_projet_id_demande` (`id_demande`)  
) ENGINE=InnoDB DEFAULT CHARSET=utf8;  
 
 
-- --------------------------------------------------------  
 
--  
-- Structure de la table `produit`  
--  
 
CREATE TABLE IF NOT EXISTS `produit` (  
`Num_serie` varchar(50) character set ascii NOT NULL,  
`Code_article` varchar(50) character set ascii default NULL,  
`Techno` varchar(200) character set ascii default NULL,  
`Designation` varchar(200) character set ascii default NULL,  
`Situation` varchar(40) character set ascii default NULL,  
`Remarques` varchar(50) character set ascii default NULL,  
`id_projet` int(11) NOT NULL,  
PRIMARY KEY (`Num_serie`),  
KEY `FK_Produit_id_projet` (`id_projet`)  
) ENGINE=InnoDB DEFAULT CHARSET=utf8;  
 
 
 
-- --------------------------------------------------------  
 
--  
-- Structure de la table `projet`  
--  
 
CREATE TABLE IF NOT EXISTS `projet` (  
`id_projet` int(11) NOT NULL auto_increment,  
`Client` varchar(40) character set ascii default NULL,  
`Nom_projet` varchar(200) character set ascii default NULL,  
`Chef_de_Projet` varchar(200) character set ascii default NULL,  
`Statut` varchar(40) character set ascii default NULL,  
`OTP` varchar(40) character set ascii default NULL,  
PRIMARY KEY (`id_projet`)  
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=21 ;  
 
 
-- --------------------------------------------------------  
 
--  
-- Structure de la table `transitaire`  
--  
 
CREATE TABLE IF NOT EXISTS `transitaire` (  
`nom_transitaire` varchar(50) character set ascii NOT NULL,  
`contact_info` varchar(20) character set ascii default NULL,  
PRIMARY KEY (`nom_transitaire`)  
) ENGINE=InnoDB DEFAULT CHARSET=utf8;  
 
-- --------------------------------------------------------  
 
--  
-- Structure de la table `transit_produit`  
--  
 
CREATE TABLE IF NOT EXISTS `transit_produit` (  
`nom_transitaire` varchar(50) character set ascii NOT NULL,  
`Num_serie` varchar(50) character set ascii NOT NULL,  
`Date_transitaire` varchar(50) character set ascii default NULL,  
`Date_arrivee_France` varchar(50) character set ascii default NULL,  
`Delai_export` varchar(50) character set ascii default NULL,  
`Date_depart_France` varchar(50) character set ascii default NULL,  
`Delai_import` varchar(50) character set ascii default NULL,  
PRIMARY KEY (`nom_transitaire`,`Num_serie`),  
KEY `FK_Transit_produit_Num_serie` (`Num_serie`)  
) ENGINE=InnoDB DEFAULT CHARSET=utf8;  
--------------------------------------------------------------------  
 
****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
 
Merci pour votre comprehension


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  probleme importation .CSV vers MySQL

 

Sujets relatifs
[mysql] table pour faire des statsprobleme 3D opengl
Gros problème en Visual Basic...Problème image d'un header qui se décale sous IE
VBAccess Problème requête paramétrée Formulaireproblème chemin sur un simplewiewer
probleme structureProblème avec firefox et IE
[OpenGL] Problème d'aliasing entre les trianglesproblème exercice tableau
Plus de sujets relatifs à : probleme importation .CSV vers MySQL


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR