Bug d'execution sous Firefox

Eléphant du PHP | 101 Messages

17 mai 2010, 10:13

Salut à tous.
Voila, j'ai un petit programme qui traite un gros fichier csv. Seulement lorsque je l'exécute sous FF, rien ne se produit, en revanche sous IE les insertions dans ma base se déroulent normalement. Je ne comprends pas car le php ne s'exécute pas coté navigateur mais coté serveur non?

Mammouth du PHP | 672 Messages

17 mai 2010, 10:18

Bonjour.

C'est un problème à la ligne 42.



Sérieusement, avec du code ça ira mieux !
- Il y a du JS ?
- Tu as mis des messages pour déboguer (echo et or die (mysql_error() )) ?

Eléphant du PHP | 101 Messages

17 mai 2010, 10:22

Voila le code de ma fonction de traitement.
function traitement_produits($fic, $link)
{

	//$ligne=0;
	// requete pour connaitre l'identifiant du dernier manufacturer
	$id_max = mysqli_query($link ,"SELECT MAX(product_id) FROM jos_vm_product;")or die (mysqli_error($link));
	$id_prod_max = mysqli_fetch_array($id_max);
	
	// ouverture du fichier à lire 
	$flect = fopen($fic,"r");
	
	fgetcsv($flect, 1500, ";");
	ob_start();
	while ($tab = fgetcsv ($flect, 1500, ";"))
	{
		$ligne++;
		if ($tab[2] != "")
		{
			// requete pour sélectionner le manufacturer concerné par le produit 
			$req_id_man = mysqli_query($link ,"SELECT manufacturer_id FROM jos_vm_manufacturer WHERE mf_name = '".$tab[0]."';")or die (mysqli_error($link));
			$id_man = mysqli_fetch_array($req_id_man);
			// requete de vérification de l'existance du produit dans la BDD
			$req_exist_prod = "SELECT * FROM jos_vm_product WHERE product_sku = '".control_Car($tab[1])."';";
			$retour = mysqli_query($link ,$req_exist_prod);
			$retour1 = mysqli_fetch_array($retour);
			// vérification des disponibilités en stock
			if ($tab[9] <= 0)
			{
				// produit non disponnible en stock
				$availability = "Sur commande";
			}
			else
			{
				// produit disponnible en stocks
				$availability = "48h.gif";
			}
			// calcul du prix HT
			if ($tab[13] > 0)
			{
				$prix = $tab[8] - $tab[13]; 
			}
			else
			{
				$prix = $tab[8];
			}
			// si il n'existe pas alors on le créé
			if (mysqli_num_rows($retour) <= 0)
			{
				$id_prod_max[0]++;
				
				// requete d'insertion des produits
				$req_insert_prod = "INSERT into `jos_vm_product` (`product_id`, `vendor_id`, `product_sku` ,`product_desc`, `product_thumb_image`,`product_full_image`, `product_publish`, `product_weight`, `product_weight_uom`, `product_url`, `product_in_stock`, `product_available_date`, `product_availability`, `cdate`, `mdate`, `product_name`, `product_tax_id`) VALUES (" .$id_prod_max[0]. ", 1,'".control_Car($tab[1])."','".control_Car($tab[3])."','".control_Car($tab[14])."','".control_Car($tab[14])."','Y',".control_Car($tab[10]).",'kg','".$tab[5]."',".control_Car($tab[9]).",".strtotime("+48 hours", strtotime(str_replace("/","-",$tab[17]))).",'".$availability."',".strtotime(date("d-m-Y")).",".strtotime(date("d-m-Y")).",'".control_Car($tab[2])."',3);";
				$resultat1 = mysqli_query($link, $req_insert_prod);
					
				// requete d'insertion id_prod et id_man
				$req_insert_mf_prod = "INSERT into `jos_vm_product_mf_xref` (`product_id`, `manufacturer_id`) VALUES (".$id_prod_max[0].",".$id_man[0].");"; 
				$resultat2 = mysqli_query($link, $req_insert_mf_prod);
				
				// requete d'insertion des pris des produits
				$req_insert_prix_prod = "INSERT into `jos_vm_product_price` (`product_price_id`, `product_id`, `product_price`, `product_currency`, `product_price_vdate`, `product_price_edate`, `cdate`, `mdate`, `shopper_group_id`) VALUES (".$id_prod_max[0].",".$id_prod_max[0].",".control_Car($prix).",'EUR',0,0,".strtotime(date("d-m-Y")).",".strtotime(date("d-m-Y")).",5);";
				$resultat3 = mysqli_query($link, $req_insert_prix_prod);
				
				// requete d'insertion de la categorie des produits
				$req_insert_cat_prod = "INSERT into `jos_vm_product_category_xref` (`category_id`, `product_id`, `product_list`) VALUES (" .$tab[6]. ", " .$id_prod_max[0]. ", NULL)";
				$resultat4 = mysqli_query($link, $req_insert_cat_prod);
			}
			else
			{
				// requete de modification des produits
				$req_modif_prod = "UPDATE `jos_vm_product` SET `vendor_id`=1, `product_sku` = '".control_Car($tab[1])."',`product_s_desc`='".control_Car($tab[2])."', `product_desc`='".control_Car($tab[3])."', `product_full_image`='".$tab[14]."', `product_weight`=".control_Car($tab[10]).", `product_in_stock`=".control_Car($tab[9]).", `product_available_date`=".strtotime("+48 hours", strtotime(str_replace("/","-",$tab[17]))).", `product_availability`='".$availability."', `mdate`=".strtotime(date("d-m-Y")).", `product_name`='".control_Car($tab[2])."' WHERE `product_id`='".$retour1[0]."';";
				$resultat5 = mysqli_query($link, $req_modif_prod);
				
				// requete de modification des prix
				$req_modif_prix_prod = "UPDATE `jos_vm_product_price` SET `product_price_id`=".$id_prod_max[0].", `product_price`=".control_Car($prix).", `mdate`=".strtotime(date("d-m-Y")).", shopper_group_id = 5 WHERE `product_id`=".$retour1[0].";";
				$resultat6 = mysqli_query($link, $req_modif_prix_prod);
				
				// requete de modification des catégories des produits
				$req_modif_cat_prod = "UPDATE `jos_vm_product_category_xref` SET `category_id`=".$tab[6]." WHERE `product_id`=".$retour1[0].";";
				$resultat7 = mysqli_query($link, $req_modif_cat_prod);
				
			}
		}
	ob_end_flush();
	//echo $ligne."\n";
	}
	//fermeture des fichier ouverts en début de programme
	fclose($flect);
}

Mammouth du PHP | 672 Messages

17 mai 2010, 11:01

Là, j'aurais plus tendance à penser que le problème vient de l'affichage, pas du traitement...

Tu peux déjà mettre des echo régulièrement dans ta fonction (et un echo avant/après l'appel) :
function traitement_produits($fic, $link)
{
echo "Début<br />";
        //$ligne=0;
        // requete pour connaitre l'identifiant du dernier manufacturer
        $id_max = mysqli_query($link ,"SELECT MAX(product_id) FROM jos_vm_product;")or die (mysqli_error($link));
        $id_prod_max = mysqli_fetch_array($id_max);
       
        // ouverture du fichier à lire
        $flect = fopen($fic,"r");
echo "Fichier lu<br />";
mysqli_report(MYSQLI_REPORT_ALL); //Active le rapport d'erreur mysqli
//... 
$resultat1 = mysqli_query($link, $req_insert_prod) or die ("Erreur de requête : <br />".$req_insert_prod."<br />".mysqli_error() );
//...
(Au passage : je n'ai pas trouvé la fonction mysqli_query()... )

Eléphant du PHP | 101 Messages

17 mai 2010, 11:10

Comment ça peut venir d'un problème d'affichage alors que je ne fait aucun affichage?

Mammouth du PHP | 672 Messages

17 mai 2010, 11:15

Comment ça peut venir d'un problème d'affichage alors que je ne fait aucun affichage?
C'est la première idée qui vient à l'esprit, quand on sait que ça fonctionne avec un navigateur et pas un autre :oops:
Et je n'ai pas tout le code, donc je ne pouvais pas savoir qu'il n'y a pas d'affichage :oops:

Sinon, tu as testé avec des echo ? D'où te viennent tes fonctions mysqli_ (introuvable sur php.net) ?

Eléphant du PHP | 101 Messages

17 mai 2010, 11:27

Elles me viennent de différents sites et d'un manuel, "PHP 5 avancé". Je ne sais pas exactement la différence mais elles fonctionnent. Et que je fasse des echo ou non on dirai que la page charge mais rien ne se passe du coté de la DB alors que si j'arrête le chargement de la page après quelque secondes d'exécution, les données s'insèrent sans aucun problème. Ça fait déjà deux semaines que je suis la dessus et plus ça va moins je comprends.

Mammouth du PHP | 672 Messages

17 mai 2010, 11:46

Sinon, tu as testé avec des echo ? D'où te viennent tes fonctions mysqli_ (introuvable sur php.net) ?
#-o
En fait, elles existent bien :
Les fonctions mysqli sont répertoriées sous leur forme Objet (du coup, quand on cherche une fonction sous php.net on ne la trouve pas), mais ont un équivalent Procédural...

Pour revenir à ton problème : C'est possible d'avoir la structure de tes tables (si possible le script de création), et un CSV exemple ?

Mammouth du PHP | 672 Messages

17 mai 2010, 15:35

Suite à ton MP j'ai bien reçu les descriptions de tables et le fichier CSV.

Remarques :
- Je ne sais pas ce qu'est sensée faire la fonction control_Car(). A priori ça passe les nombres du format NN,NN à NN.NN et ça protège les caractères spéciaux ?
- Je ne vois pas à quoi te sers la mise en tampon (ob_start() et ob_end_flush() )
- Après quelques modifs (création de la fonction control_Car() ), ça passe sous FF sans problème.

Eléphant du PHP | 101 Messages

18 mai 2010, 16:36

Désolé je n'avais pas vu que tu avais rep. Alors désormais mon script s'exécute sous FF mais pas toujours...et c'est assez aléatoire. Est ce un problème de serveur ou de poste vu que je suis en local. Mais mon poste est tout de même partagé sur un petit réseau utilisé par deux autres personnes.

Eléphant du PHP | 101 Messages

18 mai 2010, 16:38

et le tampon je l'ai supprimé, et pour la fonction control_Car(), elle permet comme tu le dit à remettre en forme une chaine.