Problème d'insertion

Fermé
merevinh Messages postés 30 Date d'inscription mardi 5 juin 2012 Statut Membre Dernière intervention 6 octobre 2014 - 18 mars 2013 à 14:10
xander18 Messages postés 68 Date d'inscription dimanche 24 février 2013 Statut Membre Dernière intervention 21 janvier 2015 - 20 mars 2013 à 00:43
Bonjour, et tout d'abord désolé pour la longueur du post il est très long je sais mais ce problème me bouffe depuis un moment et je n'arrive pas à m'en sortir. Je dispose d'un fichier CSV d'environ 300 lignes que je dois insérer dans la base de données de Prestashop. Voici les tables sur lesquelles je travaille :

CREATE TABLE IF NOT EXISTS 'ps_category' (
   
 
'id_category' int(10) unsigned NOT NULL AUTO_INCREMENT,
   
'id_parent' int(10) unsigned NOT NULL,
   
'id_shop_default' int(10) unsigned NOT NULL DEFAULT '1',
   
'level_depth' tinyint(3) unsigned NOT NULL DEFAULT '0',
   
'nleft' int(10) unsigned NOT NULL DEFAULT '0',
   
'nright' int(10) unsigned NOT NULL DEFAULT '0',
   
'active' tinyint(1) unsigned NOT NULL DEFAULT '0',
   
'date_add' datetime NOT NULL,
   
'date_upd' datetime NOT NULL,
   
'position' int(10) unsigned NOT NULL DEFAULT '0',
   
'is_root_category' tinyint(1) NOT NULL DEFAULT '0',
   
 
PRIMARY KEY ('id_category'),
   
KEY 'category_parent' ('id_parent'),
   
KEY 'nleftright' ('nleft','nright'),
   
KEY 'nleftrightactive' ('nleft','nright','active'),
   
KEY 'level_depth' ('level_depth'),
   
KEY 'nright' ('nright'),
   
KEY 'nleft' ('nleft')
)
ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=32 ;
 
 
 
CREATE TABLE IF NOT EXISTS 'ps_category_lang' (
   
 
'id_category' int(10) unsigned NOT NULL,
   
'id_shop' int(11) unsigned NOT NULL DEFAULT '1',
   
'id_lang' int(10) unsigned NOT NULL,
   
'name' varchar(128) NOT NULL,
   
'description' text,
   
'link_rewrite' varchar(128) NOT NULL,
   
'meta_title' varchar(128) DEFAULT NULL,
   
'meta_keywords' varchar(255) DEFAULT NULL,
   
'meta_description' varchar(255) DEFAULT NULL,
   
 
PRIMARY KEY ('id_category','id_shop','id_lang'),
   
KEY 'category_name' ('name')
)
ENGINE=InnoDB DEFAULT CHARSET=utf8;
 
 
 
 
 
 
CREATE TABLE IF NOT EXISTS 'ps_category_product' (
   
 
'id_category' int(10) unsigned NOT NULL,
   
'id_product' int(10) unsigned NOT NULL,
   
'position' int(10) unsigned NOT NULL DEFAULT '0',
   
 
PRIMARY KEY ('id_category','id_product'),
   
KEY 'id_product' ('id_product')
)
ENGINE=InnoDB DEFAULT CHARSET=utf8;
 
 
 
CREATE TABLE IF NOT EXISTS 'ps_product' (
   
 
'id_product' int(10) unsigned NOT NULL AUTO_INCREMENT,
   
'id_supplier' int(10) unsigned DEFAULT NULL,
   
'id_manufacturer' int(10) unsigned DEFAULT NULL,
   
'id_category_default' int(10) unsigned DEFAULT NULL,
   
'id_shop_default' int(10) unsigned NOT NULL DEFAULT '1',
   
'id_tax_rules_group' int(11) unsigned NOT NULL,
   
'on_sale' tinyint(1) unsigned NOT NULL DEFAULT '0',
   
'online_only' tinyint(1) unsigned NOT NULL DEFAULT '0',
   
'ean13' varchar(13) DEFAULT NULL,
   
'upc' varchar(12) DEFAULT NULL,
   
'ecotax' decimal(17,6) NOT NULL DEFAULT '0.000000',
   
'quantity' int(10) NOT NULL DEFAULT '0',
   
'minimal_quantity' int(10) unsigned NOT NULL DEFAULT '1',
   
'price' decimal(20,6) NOT NULL DEFAULT '0.000000',
   
'wholesale_price' decimal(20,6) NOT NULL DEFAULT '0.000000',
   
'unity' varchar(255) DEFAULT NULL,
   
'unit_price_ratio' decimal(20,6) NOT NULL DEFAULT '0.000000',
   
'additional_shipping_cost' decimal(20,2) NOT NULL DEFAULT '0.00',
   
'reference' varchar(32) DEFAULT NULL,
   
'supplier_reference' varchar(32) DEFAULT NULL,
   
'location' varchar(64) DEFAULT NULL,
   
'width' decimal(20,6) NOT NULL DEFAULT '0.000000',
   
'height' decimal(20,6) NOT NULL DEFAULT '0.000000',
   
'depth' decimal(20,6) NOT NULL DEFAULT '0.000000',
   
'weight' decimal(20,6) NOT NULL DEFAULT '0.000000',
   
'out_of_stock' int(10) unsigned NOT NULL DEFAULT '2',
   
'quantity_discount' tinyint(1) DEFAULT '0',
   
'customizable' tinyint(2) NOT NULL DEFAULT '0',
   
'uploadable_files' tinyint(4) NOT NULL DEFAULT '0',
   
'text_fields' tinyint(4) NOT NULL DEFAULT '0',
   
'active' tinyint(1) unsigned NOT NULL DEFAULT '0',
   
'redirect_type' enum('','404','301','302') NOT NULL DEFAULT '',
   
'id_product_redirected' int(10) unsigned NOT NULL DEFAULT '0',
   
'available_for_order' tinyint(1) NOT NULL DEFAULT '1',
   
'available_date' date NOT NULL,
   
'condition' enum('new','used','refurbished') NOT NULL DEFAULT 'new',
   
'show_price' tinyint(1) NOT NULL DEFAULT '1',
   
'indexed' tinyint(1) NOT NULL DEFAULT '0',
   
'visibility' enum('both','catalog','search','none') NOT NULL DEFAULT 'both',
   
'cache_is_pack' tinyint(1) NOT NULL DEFAULT '0',
   
'cache_has_attachments' tinyint(1) NOT NULL DEFAULT '0',
   
'is_virtual' tinyint(1) NOT NULL DEFAULT '0',
   
'cache_default_attribute' int(10) unsigned DEFAULT NULL,
   
'date_add' datetime NOT NULL,
  'date_upd' datetime NOT NULL,
   
'advanced_stock_management' tinyint(1) NOT NULL DEFAULT '0',
   
 
PRIMARY KEY ('id_product'),
   
KEY 'product_supplier' ('id_supplier'),
   
KEY 'product_manufacturer' ('id_manufacturer'),
   
KEY 'id_category_default' ('id_category_default'),
   
KEY 'indexed' ('indexed'),
   
KEY 'date_add' ('date_add')
)
ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=32 ;


je dispose d'un fichier php que voici
<?php

	$bdd="prestashop";
	$host="localhost";
	$user="root";
	$pass="";

	@mysql_connect($host, $user, $pass) or die ("Impossible de se connecter à la base de données");
	@mysql_select_db($bdd);

	$fichier = "./fichier.csv";

	$fichier = $_FILES['userfile']['tmp_name'];
	if (file_exists($fichier)) {
		$fp = fopen($fichier, "r");
	}

	else {
		echo "Fichier introuvable !<br />Importation stoppée.";
		exit();
	}

	$cpt = 0;

	while (!feof($fp)){
			$ligne = fgets($fp,4096);
			$liste = explode( ",",$ligne);
	
			$liste[0] = ( isset($liste[0]) ) ? $liste[0] : Null; 
			$liste[1] = ( isset($liste[1]) ) ? $liste[1] : Null; 
			$liste[2] = ( isset($liste[2]) ) ? $liste[2] : Null;
			$liste[3] = ( isset($liste[3]) ) ? $liste[3] : Null;
			$liste[4] = ( isset($liste[4]) ) ? $liste[4] : Null;
			$liste[5] = ( isset($liste[5]) ) ? $liste[5] : Null;
			$liste[6] = ( isset($liste[6]) ) ? $liste[6] : Null;
			$liste[7] = ( isset($liste[7]) ) ? $liste[7] : Null;
			$liste[8] = ( isset($liste[8]) ) ? $liste[8] : Null;
			$liste[9] = ( isset($liste[9]) ) ? $liste[9] : Null;
			$liste[10] = ( isset($liste[10]) ) ? $liste[10] : Null;

			$champ1=$liste[0]; 
			$champ2=$liste[1]; 
			$champ3=$liste[2]; 
			$champ4=$liste[3]; 
			$champ5=$liste[4]; 
			$champ6=$liste[5]; 
			$champ7=$liste[6];
			$champ8=$liste[7]; 
			$champ9=$liste[8];
			$champ10=$liste[9]; 
			$champ11=$liste[10];

				if($champ1!=""){
					$cpt++;
						$req = mysql_query("insert into ps_category_lang(name) values('$champ1')");
						$req1 = mysql_query("insert into ps_product(reference) values('$champ3')");
				}
	}
echo "Les données ont été enregistrées";
fclose($fp);
?>


Ce que je veux savoir c'est comment dans mon programme je dis que je lis les 100 premières lignes parmi toutes celles qui sont présentes dans le fichier et que ces 100 premières correspondent au prochain id_category de la table ps_category, et que par exemple les 50 prochaines lignes concernent l'id_category qui suit sachant que l'id_category est en auto-increment. J'arrive à lire tout le fichier au complet ce que je voudrais savoir c'est comment je peux tout lire mais morceaux par morceaux et dire que celui-ci a tel id et qu'un autre a tel id.



A voir également:

1 réponse

xander18 Messages postés 68 Date d'inscription dimanche 24 février 2013 Statut Membre Dernière intervention 21 janvier 2015 2
20 mars 2013 à 00:43
utilise la requete SQL LIMIT

exemple ORDER BY id LIMIT 0,50
j'affiche les 50 premier résultat etc...
tu peut remplacé les valeur par des variables.
0