importation CSV vers plusieurs tables dans MySQL

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 : importation CSV vers plusieurs tables dans MySQL

Re: importation CSV vers plusieurs tables dans MySQL

par sirakawa » 01 déc. 2011, 15:25

Absolument d'accord avec les précédents plus :
manquent :
1) qqch comme
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head>
</head>
<body>
</body>
</html>
2) toutes les balises doivent être fermées : <br /> et non <br>, <input.... />
3)je préfère scinder les appels à sql en deux parties:
$requete =  "SELECT ...";
$resultat = my_sql_query ($requete);
ce qui facilite le débogage (en affichant $requete);
4) Outre que la mise en page avec <table>...</table> ne s'emploie plus beaucoup:
a) si align est deprecated, il ne faut pas le remplacer par un <div aligne='left'> qui est deprecated aussi. Il sufirait soit de marquer paresseusement <td style= "text_align:left; font-weight:bold">, ou de créer un style...
b) on peut présenter les mêmes éléments en n'utilisant que fieldset et label
5) je trouve plus simple de créer des variables $s_bordereau_client et idem pour le transitaire dès la connexion à la base acquise en y ajoutant des tests, de sorte que, si une erreur se produit du côté Base de données, le formulaire ne s'affiche pas. Il faudrait travailler plus ce que j'ai bâclé avec des die();

Voici à quoi j'aboutis (les tables ne sont pas identiques car je les ai créées en vitesse pour les tests)
, <!-- HTML, HEAD? BODY ? -->
<?php
$lien = mysql_connect("localhost", "root", ""); // Connexion à MySQL
if (!$lien) // la connexion a échoué
{
	die("erreur de connexion");
}
else // connexion réussie
{
	$base_existe = mysql_select_db("alu"); // Sélection de la base
	if (!$base_existe) // base non trouvée
	{
		die (" base introuvable");
	  }
	  else // base existante
	  {
		$requete = "SELECT client FROM demande";
		$resultat = mysql_query($requete);
		if (!$resultat) // problème avec la table demande
		{
			die("problème avec table demande");
		}
		else // table demande répond
		{
			// construction de la variable contenant le select
			$s_bordereau_client = "<select name = 'bordereau_client'>";
			while($donnees = mysql_fetch_array($resultat))
			{
				$s_bordereau_client .= "<option>".$donnees['client']."</option>";
			}
			$s_bordereau_client.= "</select>";
		}
		$requete = "SELECT transitaire FROM transitaire";
		$resultat_1 = mysql_query ($requete);
		if (!$resultat_1)
		{
			die ("problème avec la table transitaire");
		}
		else
		{
			$s_transitaire = "<select name='nom_transitaire' >";
			while($donnees = mysql_fetch_array($resultat))
			{
				$s_transitaire .= "<option>".$donnees['transitaire']."</option>";
			}
			$s_transitaire .= "</select>";
		}
	}
}
?>
<form action="ajout_produit2.php" method="post" name="form1" class="Style6" enctype="multipart/form-data">
	<fieldset style = 'text-align:right; width: 50%'>
		<legend class="Style12">Veuillez saisir les champs suivants:</legend>
		<label for "bordereau_client">Sélectionnez le borderau client pour la demande concernée </label>
		<?PHP echo ($s_bordereau_client) ?>
		<br />
		<label for "nom_transitaire">Sélectionnez le nom du transitair </label>
		<?PHP echo ($s_transitaire) ?>
		<br />
	</fieldset>
 	<fieldset style = 'text-align:right; width: 50%'>
		<legend class="Style12">Importation</legend>
		<label for "userfile">Fichier</label>
		<input name="userfile" type="file" id="userfile" value="" />
		<br />
		<input type="submit" name="Submit" value="ET HOP!" />
</form> 

Re: importation CSV vers plusieurs tables dans MySQL

par zeus » 01 déc. 2011, 10:48

Modération :
Pour améliorer la clarté de ton code, pense à utiliser les balises [php], [code] ou [html], selon le langage utilisé

Re: importation CSV vers plusieurs tables dans MySQL

par moogli » 29 nov. 2011, 17:31

salut,

coté php y a du boulot, ton traitement de formulaire est fait à la va vite ;)
- isset
- empty
- mysql_real_escape_string
- pour le triatement du fichier temporaire utilise plutot - file, - foreach et - str_getcsv
- quand je vois le "en cours" qui sort de la base de données, j'en conclus que cela est fait en plusieurs étapes ? si oui y a des chances que cela ne fonctionne pas $_FILES, n'étant accessible qu'après la validation du formulaire, ensuite le fichier temporaire et supprimé (normalement) et S_FILES serra vide).
- Comment récupérer les valeurs d'un formulaire

en SQL : il n'y a pas de @ devant un nom de champs dans les requêtes. => http://sqlpro.developpez.com

coté html : la mise en forme tableau c'est périmé ;) => http://www.alsacreations.com

ton code est illisible, il faut au moins utiliser l'indentation sinon c'est pas jouable.

@+

importation CSV vers plusieurs tables dans MySQL

par angelina88 » 29 nov. 2011, 02:19

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:

Code : Tout sélectionner

Incorrect string value: '\xB0 de S...' for column 'Num_serie' at row 1

Mercii d'avance ^^ J'attends vos suggestions impatiemment :)
Bonne journée