Insert dans la base de données
Bonjour,
Avant toute chose, j'espère être dans la bonne section, si ce n'est le cas, je m'en excuse par avance.
Je suis actuellement en stage et j'ai un projet à faire, je vous passe les détails mais en gros, je part d'un fichier csv et il doit finir en pdf, en passant par une base de données , donc il y a une étape qui consiste à insérer les données dans la bdd, à faire en php. les données sont du styles :
http://zupimages.net/up/14/20/5lbw.png
La façon dont l'utilisateur va utilisé cette programme changera surement pour le rendre plus simple d'utilisation, c'est pour cela qu'on m'a demandé de passer d'un format csv à pdf. Je remets par la suite en forme pour qu'il utilise au mieux les données
Je part donc d'un formulaire où l'utilisateur choisit son fichier et ensuite appuie sur le bouton submit, il est ensuite dirigé vers cette page.
alors voila, le code ci-dessous fonctionne, seulement, j'ai un problème surement du à mes requêtes mysql.
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
| <?php
if (isset($_POST['submit'])) {
if(isset($_FILES['monfichier'])){
$dossier = 'upload/';
$fichier = basename($_FILES['monfichier']['name']);
if(move_uploaded_file($_FILES['monfichier']['tmp_name'], $dossier.$fichier)){
echo "Upload du fichier effectué avec succès !";
}
else{
echo "Echec de l\'upload !";
}
echo "<br>Chemin du fichier : upload/".$_FILES['monfichier']['name']."<br><br>Resultat Import SQL : <br>";
mysql_connect('localhost','root','');
mysql_select_db('test');
mysql_query("SET NAMES UTF8");
//Le chemin d'acces au fichier sur le serveur
if(file_exists("upload/".$_FILES['monfichier']['name'])){
$fichier = fopen("upload/".$_FILES['monfichier']['name'], "r");
$i=0;
//tant qu'on est pas a la fin du fichier :
while (!feof($fichier)){
// On recupere toute la ligne
$uneLigne = addslashes(fgets($fichier));
if($i>0) // test pour ne pas lire la premiere ligne{
//On met dans un tableau les differentes valeurs trouvés (ici séparées par un ';')
$tableauValeurs = explode(';', $uneLigne);
$req="SELECT count(*) from compteurs";
$sql=mysql_query($req);
if($sql>=1){ // test si la base de donnée est vide ou pas
$sql1="DROP TABLE compteurs"; // detruit la table
mysql_query($sql1) or die (mysql_error()); // execution
$sql2="CREATE TABLE IF NOT EXISTS `compteurs` (`id_compteur` int(11) NOT NULL AUTO_INCREMENT,`nom_compteur` varchar(50) NOT NULL,`difference` varchar(50) NOT NULL,`consommation_precedente` varchar(50) NOT NULL,`consommation_actuel` varchar(50) NOT NULL,PRIMARY KEY (`id_compteur`))ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=18"; // creation de la table
mysql_query($sql2) or die (mysql_error()); // execution
$sql3="INSERT IGNORE INTO compteurs VALUES ('', '".$tableauValeurs[0]."','".$tableauValeurs[1]."','".$tableauValeurs[2]."','".$tableauValeurs[3]."')"; // insertion des données dans la table
$req3=mysql_query($sql3) or die (mysql_error()); // execution
}
else{
$sql3="INSERT IGNORE INTO compteurs VALUES ('', '".$tableauValeurs[0]."','".$tableauValeurs[1]."','".$tableauValeurs[2]."','".$tableauValeurs[3]."')"; // insertion des données dans la table
$req3=mysql_query($sql3) or die (mysql_error()); // execution
}
}
else{
$i++; // on incrémente pour ne pas lire la premiere ligne
}
}
//vérification et envoi d'une réponse à l'utilisateur
if ($req3){
echo "<h2>Ajout dans la base de données effectué avec succès</h2>";
}
else{
echo "Echec dans l'ajout dans la base de données";
}
}
}
}
?> |
Lorsque je l’exécute, il me dit que mon ajout est bon, ce qui est vrai d'un coté, seulement dans ma base de données les champs sont vides. Il ne me signale pas d'erreur seulement un notice :
Citation:
Undefined offset: 1 in C:\wamp\www\upload.php on line 50
Undefined offset: 2 in C:\wamp\www\upload.php on line 50
Undefined offset: 3 in C:\wamp\www\upload.php on line 50
A savoir que lorsque je fais ma requête lorsque ma table est vide, j'ai toujours ce problème de Offset, mais la base est correctement remmpli, avec juste une ligne vide en trop.
Je ne comprends pas d'où cela peut venir.
J'ai regardé d'où cela pouvais venir mais apparemment un problème de tableau, mais j'ai pas bien compris au final.
J'aurais donc besoin de vos lumières pour m'éclairer. Merci d'avance de vos réponses.