8768 sujets

Développement web côté serveur, CMS

Pages :
Bonjour,
Je deviens fou.
Je tente d'intégrer par un code php, le contenu d'un csv (séparateur ; microsoft) dans ma bdd.
Le csv existe bien.
Le fichier de la bdd existe bien aussi.
En pièce jointe, je vous y ai mis la structure de ce fichier dans la bdd
Je ne trouve pas la raison pour laquelle seules 24 lignes s'enregistrent dans ce fichier de bdd, au lieu de 156 ! Voici l'objet du mystère !
Pouvez-vous m'aider ?
D'avance un tout grand merci pour le temps que vous passerez à m'aider.

Voici le lien du code
Voici le fichier csv
Voici le code php

	ini_set("memory_limit","450M");
	ini_set('display_errors','on');
	error_reporting(E_ALL);
	date_default_timezone_set('Europe/Berlin');

//  Version du programme : 20151025
//	php 5.5

	$url = "../../../excel_boutique/montures.csv";
	$fichier = $url;
	$tabfich=file($fichier); 
	$maxref = count($tabfich);
	 
	$HOSTNAME ="celinni.com.mysql";
	$USER = "celinni_com";
	$PASS = "K28JxQVe";
	$DB = "celinni_com";

	$link = mysqli_connect($HOSTNAME, $USER, $PASS, $DB);
	mysqli_set_charset($link, "utf8");	
	
	$delaiSuppl = 0;
	$sql = "SELECT * FROM params_multi WHERE multi_code='FRde' ";
	$result = mysqli_query($link, $sql);
	$ligne = mysqli_fetch_array($result);
	if (!$ligne) {
		exit;
	} else {
		$dollar = $ligne["multi_idex_taux_euro_dollar"]+0;
		$tva = $ligne["multi_taux_tva"]/100;
		$convDevise = $ligne["multi_conversion_euro"]+0;
		$prixbarre = $ligne["multi_idex_prix_barre"]+0;
	}
	if (isset($_GET['tauxeurodollar']) && !empty($_GET['tauxeurodollar'])) {
		$dollar = $_GET['tauxeurodollar'];
	}
	
	$datum = mktime(date("H"), date("i"), date("s"), date("m"), date("d"), date("Y"));
	$versionSearch = date('ymd.Hi', $datum)."-".substr("000".($dollar*100),-3,3);
//	$sql = "UPDATE params_multi SET multi_DERN_generation='".$versionSearch."', multi_idex_taux_euro_dollar='".$dollar."' WHERE multi_code='FRde' ";
//	$result = mysqli_query($link, $sql);
	
	mysqli_query($link, 'TRUNCATE TABLE `monture_data_FRde`');

	$reel =1;
	for( $i = 2 ; $i < $maxref ; $i++ ) {
		$laligne = explode(';', $tabfich[$i]);
		if ($laligne[28] == "ON") {
			switch (trim($laligne[3])) {
				case "1968":
					$laligne[22] = "La sertissure six griffes Celinni 1968 incarne la bague de fiançailles traditionne par excellence. Sa simplicité met en valeur l'étincelance de son diamant.";
					break;
				case "PRMS":
					$laligne[22] = "Une coupe composée de quatre griffes, célébrant le classicisme et l'élégance par une ligne pure magnifiant le solitaire.";
					break;
				case "YLANA":
					$laligne[22] = "Forme moderne, composée d'un anneau plein et de quatre griffes laissant entrevoir le profil du diamant serti par des griffes aux courbes gracieuses.";
					break;
				case "SLEEN":
					$laligne[22] = "Un galbe tout en rondeur et une finesse harmonieuse, ce modèle contemporain caractérisé par un serti demi-clos est d'une fascinante beauté.";
					break;
				case "CHLOE":
					$laligne[22] = "Forme stylisée de par son serti clos, cette monture contemporaine est le témoignage d'un amour infini.";
					break;
				case "IDYLE":
					$laligne[22] = "Un tourbillon d'élégance composé de quatre griffes torsadées épouse délicatement les courbes du diamant.";
					break;
				case "ETERN":
					$laligne[22] = "L'éternité dans un anneau circulaire renvoie l'éclat du diamant flottant dans un serti aérien.";
					break;
				case "SATINE":
					$laligne[22] = "Un classique revisité par deux diamants latéraux taillés en baguette amènent naturellement le regard vers l'éblouissant diamant central.";
					break;
				case "NINA":
					$laligne[22] = "Une forme raffinée et très joaillière accompagnée de deux diamants taille poire mettant somptueusement le diamant central en valeur.";
					break;
				case "PAMINA":
					$laligne[22] = "Un anneau galbé et gourmand composé d'un serti grain et d'un exaltant pavage de diamants. La lumière est capturée et se reflète somptueusement.";
					break;
				case "MTRESOR":
					$laligne[22] = "La tradition du solitaire six griffes magnifié grâce à un délicat pavage de diamants ronds";
					break;
				case "MAMOU":
					$laligne[22] = "Un anneau composé d'une magistrale descente de diamants laissant la pierre centrale trôner d'une exquise beauté";
					break;
				case "ELLE":
					$laligne[22] = "Sertissure à quatre griffes digne de l'excellence joaillière majestueusement mise en valeur par un anneau paré de délicieux petits brillants ronds";
					break;
				default:
					$laligne[22] = "";
					break;
			}
			$laligne[23] = "France";
//			$delai = $laligne[24] + $delaiSuppl;
//			$prixNetHT = $laligne[26]+0;
//			$prixNetTTC = $laligne[27]+0;
//			if ($prixNetHT > 1) {
//				$prixNetHT = round($prixNetHT * $convDevise);
//				$prixNetTTC = round($prixNetHT * (1 + $tva));
//				$prixNetHT = round($prixNetTTC / (1 + $tva));
//			} else {
//				$prixNetTTC = round($prixNetTTC * $convDevise);
//				$prixNetHT = round($prixNetTTC / (1 + $tva));
//			}
//			$prixBrutHT = round($prixNetHT * $prixbarre);
//			$prixBrutTTC = round($prixNetTTC * $prixbarre);
			
			$linsert="";
			$linsert.=' \''.$laligne[0].'\',' ;
			$linsert.=' \''.$laligne[1].'\',' ;
			$linsert.=' \''.$laligne[2].'\',' ;
			$linsert.=' \''.$laligne[3].'\',' ;
			$linsert.=' \''.$laligne[4].'\',' ;
			$linsert.=' \''.$laligne[5].'\',' ;
			$linsert.=' \''.$laligne[6].'\',' ;
			$linsert.=' \''.$laligne[7].'\',' ;
			$linsert.=' \''.$laligne[8].'\',' ;
			$linsert.=' \''.$laligne[9].'\',' ;
			$linsert.=' \''.$laligne[10].'\',' ;
			$linsert.=' \''.$laligne[11].'\',' ;
			$linsert.=' \''.$laligne[12].'\',' ;
			$linsert.=' \''.$laligne[13].'\',' ;
			$linsert.=' \''.$laligne[14].'\',' ;
			$linsert.=' \''.$laligne[15].'\',' ;
			$linsert.=' \''.$laligne[16].'\',' ;
			$linsert.=' \''.$laligne[17].'\',' ;
			$linsert.=' \''.$laligne[18].'\',' ;
			$linsert.=' \''.$laligne[19].'\',' ;
			$linsert.=' \''.$laligne[20].'\',' ;
			$linsert.=' \''.$laligne[21].'\',' ;
			$linsert.=' \''.$laligne[22].'\',' ;
			$linsert.=' \''.$laligne[23].'\',' ;
			
//				$linsert.=' \''.$delai.'\',' ;
//			$linsert.=' \''.$laligne[25].'\',' ;
//				$linsert.=' \''.$prixBrutHT.'\',' ;
//				$linsert.=' \''.$prixBrutTTC.'\',' ;
//				$linsert.=' \''.$prixNetHT.'\',' ;
//				$linsert.=' \''.$prixNetTTC.'\',' ;
			$linsert.=' \''.$laligne[24].'\',' ;
			$linsert.=' \''.$laligne[25].'\',' ;
			$linsert.=' \'\',' ;
			$linsert.=' \'\',' ;
			$linsert.=' \''.$laligne[26].'\',' ;
			$linsert.=' \''.$laligne[27].'\',' ;

			$linsert.=' \''.$laligne[28].'\',' ;
			$linsert.=' \''.$laligne[29].'\',' ;
			$linsert.=' \''.$laligne[30].'\',' ;
			$linsert.=' \''.$laligne[31].'\',' ;
			$linsert.=' \''.$laligne[32].'\',' ;
			$linsert.=' \''.$laligne[33].'\',' ;
			$linsert.=' \''.$laligne[34].'\',' ;
			$linsert.=' \''.$laligne[35].'\',' ;
			$linsert.=' \''.$laligne[36].'\',' ;
			$linsert.=' \''.$laligne[37].'\',' ;
			$linsert.=' \''.$laligne[38].'\',' ;
			$linsert.=' \''.$laligne[39].'\',' ;
			$linsert.=' \''.$laligne[40].'\',' ;
			$linsert.=' \''.$laligne[41].'\',' ;
			$linsert.=' \''.$laligne[42].'\',' ;
			$linsert.=' \''.$laligne[43].'\',' ;
			$linsert.=' \''.$laligne[44].'\',' ;
			$linsert = "(".substr($linsert,0,-1).")";

			$sql='INSERT INTO `monture_data_FRde` ( 
				`ref_monture` , 
				`famille` , 
				`modele` , 
				`codemodele` , 
				`finition` , 
				`qualite` , 
				`carat` , 
				`sous_modele` , 
				`pierre_min_carat` , 
				`pierre_max_carat` , 
				`pierre_max_diametre` , 
				`pavage_poids_total` , 
				`pavage_diametre_pierres_min` , 
				`pavage_diametre_pierres_max` , 
				`nbre_pierres_cotes` , 
				`nbre_pierres_dessus` , 
				`nbre_pierres_total` , 
				`anneau_largeur_min` , 
				`anneau_largeur_max` , 
				`anneau_epaisseur` , 
				`monture_poids` , 
				`monture_hauteur_chaton` , 
				`descriptif` , 
				`pays_origine` , 
				`delai_fournisseur` , 
				`type_solitaire` , 
				`PV_full_HT` , 
				`PV_full_TTC` , 
				`PV_HT` , 
				`PV_TTC` , 
				`statut` , 
				`vue_01` , 
				`vue_02` , 
				`vue_03` , 
				`vue_04` , 
				`vue_05` , 
				`max_carat_rond` , 
				`max_carat_princesse` , 
				`max_carat_marquise` , 
				`max_carat_emeraude` , 
				`max_carat_radiant` , 
				`max_carat_ovale` , 
				`max_carat_poire` , 
				`max_carat_coeur` , 
				`max_carat_aascher` , 
				`max_carat_cs` , 
				`max_carat_autre` ) VALUES ';
				
			$result = mysqli_query($link, $sql.$linsert);
			echo $reel."<br>".$linsert."<br>";
			echo "query = ".$result."<br>=================<br>";
			$reel++;
		} else {
		}
	}	
	
	mysqli_close($link);
	
	echo "Processus fini !<br>";
	echo "Nbre en bdd : ".$reel." / ".($maxref-2).' ref.<br>';
	exit;

Modifié par jytest (26 Oct 2015 - 11:49)
Bonjour, peut-être est-ce du à un problème de guillemets qui rompent les chaînes de caractères.
Essaie de faire un "echo" des queries avant de les exécuter.

INSERT INTO `monture_data_FRde` ( 
				`ref_monture` , 
				`famille` , 
				... , 
				`max_carat_autre` ) VALUES ( '1968YG30', 'bague', 'CELINNI 1968', '1968', 'YG', '750/1000', '0,30', '01', '0,20', '0,39', '4,45', '0,00', '0,00', '0,00', '0', '1', '1', '1,15', '2,21', '1,30', '2,60', '4,83', 'La 
sertissure six griffes Celinni 1968 incarne la bague de fiançailles traditionne par excellence. Sa simplicité met en valeur l'étincelance de son diamant.', 'France', '2', 'simple', '886', '1062', '492', '590', 'ON
', 'CELINNI1968_030J_p.jpg', 'CELINNI1968_030J_s.jpg', '', '', 'CELINNI1968_030J_p_dim.jpg', '2,50', '0,00', '0,00', '0,00', '0,00', '0,00', '0,00', '0,00', '0,00', '0,00', '0,00 ')

Modifié par loicbcn (26 Oct 2015 - 10:29)
Merci pour ta suggestion.
Qu'as-tu changé dans mon code pour y arriver ?
Il y a effectivement un souci de guillemets,
pourtant mon csv est sous la forme ";;;".
Modifié par jytest (26 Oct 2015 - 10:35)
De rien.
Je n'ai rien changé dans ton code, je suggère juste que les apostrophes de certains textes peuvent couper les chaînes de caractères. Ce qui apparaît dans le code que j'ai reproduit dans mon premier post (la chaîne se coupe après " Sa simplicité met en valeur l' ").

Il est cependant étrange qu'aucune erreur de php n'apparaisse à l'exécution de ce code.
Effectivement, c'est bizarre qu'il ne signale pas d'erreur.
Plus bizarre pourquoi il effectue, à chaque passage dans la boucle, la préparation de la châine à intégrer dans la bdd, et qu'il ne l'intègre pas ?
Plus bizarre encore, pourquoi en effectue-t-il 24 et pas 156 ?

Oui je deviens fou !

A l'aide !
Modifié par jytest (26 Oct 2015 - 10:39)
C'est fait !
Cela va t'aider...
Moi pas, si ce n'est qu'il n'intègre pas ces lignes "fausses" !
j'ai "" ou "1"
Pourquoi ce truc ne fonctionne pas ? grrr
Modifié par jytest (26 Oct 2015 - 10:48)
Je viens même de mettre en commentaires
toutes les intégrations de calculation.
Ce n'est vraiment plus que du copier/coller.
Et cela ne fontionne toujours pas ! Grrr !
A l'aide

PS.
Je viens de mettre à jour ce code php dans mon post original.
Modifié par jytest (26 Oct 2015 - 11:16)
De rien, c'est un peu calme au travail aujourd'hui.

Il semble en effet que la chaine soit rompue pour les champs qui contiennent des apostrophes.
La colonne "descriptif" notamment en contient, je pense qu'il s'agit de l'index 22.

- essaies tes insert sans cette colonne pour voir.

- essaies ensuite $linsert.=' \''.addslashes($laligne[22]).'\',' ; (pour échapper les apostrophes).
Un seul mot pour toi.
M.E.R.C.I

Tu es au sauveur !

Comme quoi, la folie est une maladie.
Suffit juste d'avoir un bon remède.
Merci
De rien,
J'ai quand même du mal à comprendre les slashes dans ta concaténation,
Tu pourrais faire une boucle pour réduire ton code: (à tester et modifier selon tes besoins);

    $linsert = array();
    for( $i=0; $i<45; $i++ ){
        $linsert[] = addslashes($laligne[$i]);
    }
    $result = mysqli_query($link, $sql.implode(",", $linsert));

Bonne continuation.
Je m'aperçois que j'ai encore un souci avec mes caractères accentués.
Eux aussi fonctionnent pour la zone description, mais pas pour les autres zones. Bizarre !
Tu peux me trouver LA solution ?

Existe-t-il une autre solution que de convertir
le csv en utf8 sans BOM ?

Modifié par jytest (26 Oct 2015 - 12:02)
tes caractères accentués, c'est où le problème d'affichage ? dans ta bdd ou quand tu restitue les résultats sur une page web ?
Merci à toi pour ton passage.

C'est dans la bdd que les caractères sont mal affichés.
Tu as une solutions à part la conversion du csv en utf8 sans BOM.

Merci d'avance
Modifié par jytest (27 Oct 2015 - 12:22)
Cela ne fonctionne pas.
A moins que ma zone dans ce fichier de base de donnée n'est pas au bon format.
Faut que je vérifie.
Pages :