Bonjour à tous,

Voilà, j'ai un petit script pour importer des données venant d'un fichier CSV et allant vers une base de données. Aucun problème en local (php 5) ; mais une fois en ligne (sur php 4), il veut m'insérer une ligne vide une fois sur deux...

Voici le code :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
57
58
 
$file = $_FILES['csv']['name'];
$taille = 1024; // taille ligne maximum
$delimiteur = "\r";
 
if($fp = fopen($file,"r")) {	// Si aucun problème pour ouvrir le fichier CSV
	echo "<p class='good'>Fichier ouvert. En cours de lecture...</p>";
	$i=2; // Première ligne d'hôtel du fichier Excel
	while ($ligne = fgetcsv($fp, $taille, $delimiteur)) { // On lit chaque ligne
 
		foreach($ligne as $elem) {
			echo "<span class='ligne'>Ligne ".$i." : </span>"; // On indique le numéro de la ligne (pratique pour se repérer sur le fichier Excel)
			$i++;
 
			$elem = addslashes($elem);
 
			$elem = substr($elem,0,-1); // On enlève le dernier " ; " à chaque ligne
			$tabl = explode(";", $elem); // On met dans un tableau les elements
 
			$tabl[1]=ereg_replace(" ","",$tabl[1]); // Enlève les espaces mis dans les codes postaux... (petit couac dans les CSV faits par Excel)
 
			// On vérifie que l'hôtel n'y soit pas déjà
			$req = "SELECT hotel FROM ho_liste WHERE hotel='".$tabl[2]."' AND adresse='".$tabl[4]."'";
			$res = mysql_query($req); 
			$nb = mysql_num_rows($res); // Nombre d'enregistrement trouves
 
			// Si l'hôtel y est déjà
			if($nb) {
 
				echo "<span class='bad'> ERREUR : Hotel d&eacute;j&agrave; pr&eacute;sent ! </span> <br />"; 
 
			// Sinon, insertion
 
			} else {
 
				// Requête SQL (je n'utilise pas ma fonction d'insertion ici pour la raison du point suivant (pas de "die")
				$req = "INSERT INTO ho_liste(id_liste,localite,cp,hotel,etoiles,adresse,tel,mail,web,groupe,nb_ch)
						VALUES ('','".$tabl[0]."','".$tabl[1]."','".$tabl[2]."','".$tabl[3]."','".$tabl[4]."','".$tabl[5]."',
						'".$tabl[6]."','".$tabl[7]."','".$tabl[8]."','".$tabl[9]."')";
 
				// Exécution de la requête... S'il y a un problème, c'est signalé mais l'éxécution des requêtes suivantes continue
				if(!@mysql_query($req)) {
					echo "<span class='bad'> ERREUR insertion SQL </span>".mysql_error(); 
				} else {
					echo "<span class='good'>Mise en ligne : OK ! </span>";
				}
				echo "<br />";
			}
		}
	}
 
	fclose ($fp); // On ferme le fichier CSV
 
} else {
 
	die("<p class='bad'>Erreur d'ouverture de fichier ! Merci de recommencer... </p>");
 
}
Comme je l'ai dit, en ligne je suis sur php 4 et non 5 comme en local, mais je ne vois pas pourquoi le problème viendrait de là (j'ai vérifié, la fonction fgetcsv est compatible php4 & 5)...
En résultat, j'obtiens :

Première ligne : ok
Deuxième ligne : ok (c'est la ligne vide, tous les champs sont vides)
Troisième ligne : ok
Quatrième ligne : hôtel déjà présent (il retrouve la ligne 2)
Cinquiète ligne : ok
Sixième : hôtel déjà présent (idem)

etc...

Si quelqu'un trouve la solution, je suis preneur !
J'ai essayé de changer le str_replace et le addslashes (en les enlevant), ça ne change rien...

Merci d'avance !