Problème de if et else

Fermé
merevinh Messages postés 30 Date d'inscription mardi 5 juin 2012 Statut Membre Dernière intervention 6 octobre 2014 - 19 mars 2013 à 14:53
merevinh Messages postés 30 Date d'inscription mardi 5 juin 2012 Statut Membre Dernière intervention 6 octobre 2014 - 19 mars 2013 à 17:08
Bonjour, j'ai un problème sur ma condition, elle n'effectue pas ce que je veux. Mon programme arrive a lire mon fichier CSV dont voici un petit exemple :

"Sacs en Papier","Sac Papier - poignées plates","DPL002","80 grs Blanc","22 + 10 x 31 cm","blanc","€ 0,19","1","doos","250","1"

"Sacs en Papier","Sac Papier - poignées plates","DPL001","80 grs brun","22 + 10 x 31 cm","brun","€ 0,19","1","doos","250","1"

"Sacs en Plastique",,"DQU007","Poly","30 x 36 cm","Semi Transparant","€ 0,14","1","doos","500","1"

"Sacs PP Tissés","Big Shopper PP Tissé","DQP001","tissé PP","45 + 18 x 48 cm","Blanc","€ 1,65","1","doos","100","1"

Dans ma condition je dis que que si le champ1 est Sac en Papier je lui demande d'insérer un nouvel id dans ma table category seulement quand je lance ma condition il l'insert 4 fois de suite, c'est à dire le nombre de lignes dans mon fichier, je voudrais qu'il ne le fasse qu'une seule fois à chaque fois que dans la première colonne de mon fichier CSV, le nom de la catégorie change. Quelqu'un pourrait t'il m'aider s'il vous plait?

Voici mon code PHP avec la condition, (bien sur ce n'est pas la seule condition que je vais faire il y en a d'autres mais elles sont basées sur le même principe seulement je n'arrive pas à m'en sortir pour la première.

<?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();
	}

	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];
			var_dump($champ1);
		
		/*if($champ1 = "Sac en Papier"){
			$req = mysql_query("insert into ps_category(id_category, id_parent) values('', 2)");
		}*/
	}
	echo"pouet";
fclose($fp);
?>



8 réponses

salut,

il faut toujours mettre deux signes == dans un if sinon, la conditions est forcément vraie ;-)
0
Et même pour les puristes, 3 signes = est le mieux :

if ( $champ1 === "sac en papier" ) { etc...
0
merevinh Messages postés 30 Date d'inscription mardi 5 juin 2012 Statut Membre Dernière intervention 6 octobre 2014 7
19 mars 2013 à 15:11
Le problème c'est que je peux mettre autant de égal que je veux ça ne marche pas je rentre mon message de confirmation. Un message bidon matérialisé par
echo"pouet";
, mais quand je vérifie dans la base de données il n'y a rien l'id ne se créé pas pourtant ma requête marche bien car je l'ai testé sur mysql
0
1 -> pourquoi la boucle if est commentée?
2 -> le condition ne peut pas être vraie visiblement car "Sacs Papier" est différent de "Sac en Papier" et aussi différent que "Sac Papier"

3 - > je te confirme qu'il faut mettre == dans la boucle

bon courage :-)
0
merevinh Messages postés 30 Date d'inscription mardi 5 juin 2012 Statut Membre Dernière intervention 6 octobre 2014 7
19 mars 2013 à 15:33
désolé pour le commentaire c'était pour réaliser un var_dump avant, je ne dis pas que tu as a tord au contraire j'ai fait ce que tu m'as dis, déjà de une je me suis trompé sur le nom du champ de la colonne 1 c'est Sacs en Papiers et pas Sac en Papier et j'ai rajouté un deuxième égal mais cela ne marche toujours pas je n'ai rien qui s'affiche dans la base de données, pourtant quand je fais un var_dump sur $champ 1 il reconnait qu'il y a Sacs en Papiers dedans ainsi que deux autres catégories différentes......
0
la boucle if est toujours commentée ou pas ? sinon, faudrait être certain de bien rentrer dans le if.
je te propose de mettre un echo "avant la requete" et un echo "apres la requete" :

if($champ1 == "Sacs en Papier"){
echo "avant la req";
$req = mysql_query("insert into ps_category(id_category, id_parent) values('', 2)");
echo "après la req";

comme ça, on saura si on rentre dans le if et si la requete s'est exécutée ;-)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
merevinh Messages postés 30 Date d'inscription mardi 5 juin 2012 Statut Membre Dernière intervention 6 octobre 2014 7
19 mars 2013 à 15:44
Non mon if n'est plus commenté, j'ai rajouté les echo il ne se passe absolument rien je reste devant une page blanche. Soit j'ai fait une grosse erreur, soit c'est un truc complètement idiot qui m'a échappé.
0
le fait de ne pas avoir les messages venant des "echo" prouve qu'on ne rentre pas dans le if.
Cela veut dire que $champ1 != "Sacs en Papier"

Allons voir maintenant que vaut $champ1. Pour cela, faisons un echo de ce dernier :

echo "la valeur de la variable $champ1 est : ".$champ1."<br/>" ;


à mettre avant le if
0
merevinh Messages postés 30 Date d'inscription mardi 5 juin 2012 Statut Membre Dernière intervention 6 octobre 2014 7
19 mars 2013 à 15:56
j'obtient ceci :

La valeur de la variable est : "Sacs en Papier"
La valeur de la variable est : "Sacs en Papier"
La valeur de la variable est : "Sacs en Plastique"
La valeur de la variable est : "Sacs PP Tissés"
0
ah ok, c'est juste un problème de guillemets en fait ;-)
0
fais juste str_replace avant le if :

$champ1 = str_replace('"', '', $champ1);

l'idée ici est de remplacer les guillemets par du vide
0
merevinh Messages postés 30 Date d'inscription mardi 5 juin 2012 Statut Membre Dernière intervention 6 octobre 2014 7
19 mars 2013 à 16:09
Merci beaucoup =) ça marche à ce que je vois mais il n'y aurait pas un moyen de faire l'insert une seule fois? Car si je laisse comme ceci il me le fait 2 fois. =S
0
c'est normal, vu qu'il le trouve 2 fois dans la texte. Sinon, faudrait tester l'existence dans la base avant l'insert. si Sacs en Papier n'existe pas en base alors insert into...

une question me taraude ^^ : pourquoi programmer l'insert d'un fichier csv ? tu peux pas importer directement ce fichier en base de données?
0
merevinh Messages postés 30 Date d'inscription mardi 5 juin 2012 Statut Membre Dernière intervention 6 octobre 2014 7
19 mars 2013 à 16:54
c'est mon maître de stage qui m'a dit de créer ce programme afin que je puisse apprendre de nouvelles compétences, c'est intéressant mais tellement chiant à mettre en place surtout que la base de données touche à la plate-forme Prestashop
0
merevinh Messages postés 30 Date d'inscription mardi 5 juin 2012 Statut Membre Dernière intervention 6 octobre 2014 7
19 mars 2013 à 15:58
Un problème de guillemets?
0
c'est bon? ça rentre bien dans le if maintenant ?
0
Salut,

Non ce n'est pas un problème de guillemet.

Dans ton premier post, ta condition teste si champ1 est égal à "Sac en plastique" (au singulier), or ton champ1 n'est jamais égal à cette valeur :
"Sacs en Papier" != "Sac en Papier"
"Sacs en Plastique" != "Sac en Papier"
"Sacs PP Tissés" != "Sac en Papier"

Modifie ta condition comme ceci :

if ($champ1 == "Sacs en Papier") {

Ta requête devrait alors être exécutée.
0
déjà corrigé ça cf up ^^
0
merevinh Messages postés 30 Date d'inscription mardi 5 juin 2012 Statut Membre Dernière intervention 6 octobre 2014 7
19 mars 2013 à 16:12
oui tidjool ça rentre dans ma requête maintenant mais je veux juste savoir une dernière chose comment je pourrais faire pour que cette requête ne se fasse qu'un seule fois?
0
faut tester si la valeur existe en base de données avant de l'insérer.
0