Function while dans php ne fonctionne pas... pourquoi?

willpower
WRInaute discret
WRInaute discret
 
Messages: 208
Inscription: 15 Mar 2007

Function while dans php ne fonctionne pas... pourquoi?

Message le Mer Juin 17, 2009 2:43

Hello a tous,

Alors je transfert des donnes d'une base de donne(nommer:cybersp1_kvd) a une autre(nommer:cybersp1_kheopsosc) a l'aide de ce code... (qui sera effectuer automatiquement a tous les heures):

Code: Tout sélectionner
$query  = "SELECT * FROM cybersp1_kvd.groupe_d";
$result = mysql_query($query);
while($row = mysql_fetch_array($result)){


$count= 0;
$dgroupnum = $row['dgroupnum'];
$num_groupe = $row['num_groupe'];
$code_groupe = $row['code_groupe'];
$descrip = $row['descrip'];
$descrip_e = $row['descrip_e'];
$is_on_site = $row['is_on_site'];
$date = date("Y-m-d");
$heure = date("H:i:s");
$heuredate = "$date $heure";



$sqqql="SELECT * FROM cybersp1_kheopsosc.categories_description "; 
$answer = mysql_query($sqqql);
while ($answer_data2 = mysql_fetch_array($answer) )
{
if ($code_groupe!=$answer_data2['categories_description'])
echo"";
else
$count=$count+1;
}

if(($count == 0 ) && ($num_groupe == 03) && ($is_on_site == 1)){
//echo "elle existe pas<br>";
mysql_query("INSERT INTO cybersp1_kheopsosc.categories_description (language_id, categories_name, categories_description ) VALUES ('1', '$descrip_e', '$code_groupe')");
mysql_query("INSERT INTO cybersp1_kheopsosc.categories_description (language_id, categories_name, categories_description ) VALUES ('4', '$descrip', '$code_groupe')");
}else{
mysql_query("UPDATE cybersp1_kheopsosc.categories_description SET categories_name='$descrip_e'  WHERE categories_description = '$code_groupe' AND language_id = '1'");
mysql_query("UPDATE cybersp1_kheopsosc.categories_description SET categories_name='$descrip'  WHERE categories_description = '$code_groupe' AND language_id = '4'");
}
}


Mais voila a chaque fois que j'active le script, il ne me copie que une range et ne fait pas les autres qui pourtant son bien la.

Si vous voyez mon erreur ou avez une suggestion vous seriez tres gentil de me le partager.

Merci
Will


5_legs
WRInaute passionné
WRInaute passionné
 
Messages: 2072
Inscription: 30 Avr 2006

Re: Function while dans php ne fonctionne pas... pourquoi?

Message le Mer Juin 17, 2009 4:35

Bonjour,

A mon avis cela vient de ton test sur
Code: Tout sélectionner
$count == 0


Visiblement c'est toi qui lui demande de n'en insérer qu'un seul (de ta 2e boucle)

willpower
WRInaute discret
WRInaute discret
 
Messages: 208
Inscription: 15 Mar 2007

Re: Function while dans php ne fonctionne pas... pourquoi?

Message le Mer Juin 17, 2009 5:26

druart a écrit:Bonjour,

A mon avis cela vient de ton test sur
Code: Tout sélectionner
$count == 0


Visiblement c'est toi qui lui demande de n'en insérer qu'un seul (de ta 2e boucle)


mais le but de se "$count" est de ne pas inserer une nouvelle ligne si l'item existe deja...mais de a la place modifier. De plus je croyais que la fonction while faisait une boucle et que donc puisque la declaration de ma variable:
$count= 0;
est a l'interieur et bien qu'elle revenait a zero a chaque fois ..non?


5_legs
WRInaute passionné
WRInaute passionné
 
Messages: 2072
Inscription: 30 Avr 2006

Re: Function while dans php ne fonctionne pas... pourquoi?

Message le Mer Juin 17, 2009 8:18

Bonjour,

oui effectivement.

Donc ton pb c'est qu'il ne te sort un seule range de la 1ere boucle ?

Moi j'essayerai de faire un écho des variables et de commenter les insert et update : ça te permettrai de pouvoir tracer tes données car là sans avoir accès aux données c'est pas évident ;-)

jcaron
WRInaute accro
WRInaute accro
 
Messages: 2685
Inscription: 13 Fév 2004

Re: Function while dans php ne fonctionne pas... pourquoi?

Message le Mer Juin 17, 2009 8:28

Ajoute un echo "trace 1" dans la première branche de ton if, et un echo "trace 2" dans la deuxième. A mon avis tu vas te rendre compte que dans la plupart des cas il exécute la deuxième branche (même si les lignes voulues n'existent pas dans la table de destination) à cause de ton test.

Jacques.


RiPSO
WRInaute passionné
WRInaute passionné
 
Messages: 1591
Inscription: 4 Oct 2007

Re: Function while dans php ne fonctionne pas... pourquoi?

Message le Mer Juin 17, 2009 9:29

je n'ai pas analysé complètement ton code mais a priori il ne serait pas plus interessant d'utiliser un ON DUPLICATE KEY?

http://dev.mysql.com/doc/refman/5.1/en/insert.html

retza
WRInaute discret
WRInaute discret
 
Messages: 58
Inscription: 16 Fév 2005

Re: Function while dans php ne fonctionne pas... pourquoi?

Message le Mer Juin 17, 2009 11:18

Bonjour,

Pour moi, ton while {} s'arrete juste aprés le $count=$count+1;
Ensuite, si ton $count est resté à 0 (et que tes autres variables de test correspondent à tes conditions), il passe à la suite du code qui est ton INSERT en Bdd. (si l'une des 3 conditions de ton if est fausse, il UPDATE, évidemment)

Puis, il s'arrête là... ton while étant fermé plus haut, tu n'as pas de boucle
Psero, je testerai ça
Code: Tout sélectionner
$query  = "SELECT * FROM cybersp1_kvd.groupe_d";
$result = mysql_query($query);
while($row = mysql_fetch_array($result)){


$count= 0;
$dgroupnum = $row['dgroupnum'];
$num_groupe = $row['num_groupe'];
$code_groupe = $row['code_groupe'];
$descrip = $row['descrip'];
$descrip_e = $row['descrip_e'];
$is_on_site = $row['is_on_site'];
$date = date("Y-m-d");
$heure = date("H:i:s");
$heuredate = "$date $heure";

$sqqql="SELECT * FROM cybersp1_kheopsosc.categories_description "; 
$answer = mysql_query($sqqql);
while ($answer_data2 = mysql_fetch_array($answer) )

     if ($code_groupe==$answer_data2['categories_description']) { $count++; }       // Modif du code

if(($count == 0 ) && ($num_groupe == 03) && ($is_on_site == 1)){
//echo "elle existe pas<br>";
mysql_query("INSERT INTO cybersp1_kheopsosc.categories_description (language_id, categories_name, categories_description ) VALUES ('1', '$descrip_e', '$code_groupe')");
mysql_query("INSERT INTO cybersp1_kheopsosc.categories_description (language_id, categories_name, categories_description ) VALUES ('4', '$descrip', '$code_groupe')");
}else{
mysql_query("UPDATE cybersp1_kheopsosc.categories_description SET categories_name='$descrip_e'  WHERE categories_description = '$code_groupe' AND language_id = '1'");
mysql_query("UPDATE cybersp1_kheopsosc.categories_description SET categories_name='$descrip'  WHERE categories_description = '$code_groupe' AND language_id = '4'");
}

$count=0;  // Modif du code
}

willpower
WRInaute discret
WRInaute discret
 
Messages: 208
Inscription: 15 Mar 2007

Re: Function while dans php ne fonctionne pas... pourquoi?

Message le Jeu Juin 18, 2009 0:22

retza a écrit:Bonjour,

Pour moi, ton while {} s'arrete juste aprés le $count=$count+1;
Ensuite, si ton $count est resté à 0 (et que tes autres variables de test correspondent à tes conditions), il passe à la suite du code qui est ton INSERT en Bdd. (si l'une des 3 conditions de ton if est fausse, il UPDATE, évidemment)

Puis, il s'arrête là... ton while étant fermé plus haut, tu n'as pas de boucle
Psero, je testerai ça
Code: Tout sélectionner
$query  = "SELECT * FROM cybersp1_kvd.groupe_d";
$result = mysql_query($query);
while($row = mysql_fetch_array($result)){


$count= 0;
$dgroupnum = $row['dgroupnum'];
$num_groupe = $row['num_groupe'];
$code_groupe = $row['code_groupe'];
$descrip = $row['descrip'];
$descrip_e = $row['descrip_e'];
$is_on_site = $row['is_on_site'];
$date = date("Y-m-d");
$heure = date("H:i:s");
$heuredate = "$date $heure";

$sqqql="SELECT * FROM cybersp1_kheopsosc.categories_description "; 
$answer = mysql_query($sqqql);
while ($answer_data2 = mysql_fetch_array($answer) )

     if ($code_groupe==$answer_data2['categories_description']) { $count++; }       // Modif du code

if(($count == 0 ) && ($num_groupe == 03) && ($is_on_site == 1)){
//echo "elle existe pas<br>";
mysql_query("INSERT INTO cybersp1_kheopsosc.categories_description (language_id, categories_name, categories_description ) VALUES ('1', '$descrip_e', '$code_groupe')");
mysql_query("INSERT INTO cybersp1_kheopsosc.categories_description (language_id, categories_name, categories_description ) VALUES ('4', '$descrip', '$code_groupe')");
}else{
mysql_query("UPDATE cybersp1_kheopsosc.categories_description SET categories_name='$descrip_e'  WHERE categories_description = '$code_groupe' AND language_id = '1'");
mysql_query("UPDATE cybersp1_kheopsosc.categories_description SET categories_name='$descrip'  WHERE categories_description = '$code_groupe' AND language_id = '4'");
}

$count=0;  // Modif du code
}


Non malheureusement ca fait la meme chose que mon code... :?

willpower
WRInaute discret
WRInaute discret
 
Messages: 208
Inscription: 15 Mar 2007

Re: Function while dans php ne fonctionne pas... pourquoi?

Message le Jeu Juin 18, 2009 1:24

RiPSO a écrit:je n'ai pas analysé complètement ton code mais a priori il ne serait pas plus interessant d'utiliser un ON DUPLICATE KEY?

http://dev.mysql.com/doc/refman/5.1/en/insert.html


Ca semble comme une tres bonne idee...mais voila dite moi le si je me trompe, mais "ON DUPLICATE KEY" verifie la premiere colonne ou celle qu'on defini comme index ou primary key et on dois la definir comme unique aussi.
Admettons que je modifie ma base de donne et definie la colone voullu comme primary key ou index et la definie comme unique aussi, ca ne fonctionnera pas car je dois lui permettre d'avoir le meme code 2 fois dans la colonne.

Exemple:
Je pars de cette base de donnee:
num_groupe | code_groupe | descrip | descri_e | is_on_site
03..................elec........electronic......electronique........1


Et je veus que si num_groupe==03 et que is_on_site==1 qu'il copie l'info de cette maniere dans cette base de donnee:( A noter que pour moi 1 =anglais et 4 francais dans language_id)
language_id | categories_name | categories_description
1........................electronic......................elec
4.......................electronique....................elec

Vous aurrez remarquer que pour une ligne de la premiere base de donnee j'en fait 2 dans la deuxieme(ce qui me pose un probleme avec ''ON DUPLICATE KEY'' la colonne a verifier serait code_groupe VS categories_description.

jcaron
WRInaute accro
WRInaute accro
 
Messages: 2685
Inscription: 13 Fév 2004

Re: Function while dans php ne fonctionne pas... pourquoi?

Message le Jeu Juin 18, 2009 1:48

Code: Tout sélectionner
create table destination (language_id integer,categories_description text, categories_name text,primary key(language_id,categories_description));

insert into destination (language_id,categories_description, categories_name) select 1,descri_e,code_groupe from source where num_groupe='03' and is_on_site=1 on duplicate key update categories_name=descri_e;
insert into destination (language_id,categories_description, categories_name) select 4,descrip,code_groupe from source where num_groupe='03' and is_on_site=1 on duplicate key update categories_name=descrip;


Ou pas très loin en tous cas...

Jacques.


RiPSO
WRInaute passionné
WRInaute passionné
 
Messages: 1591
Inscription: 4 Oct 2007

Re: Function while dans php ne fonctionne pas... pourquoi?

Message le Jeu Juin 18, 2009 1:54

euhhhh, je sais pas si j'ai bien compris alors choppe les infos qui t'interessent dans ce que je dis :lol:

Déjà avant toute chose sauvegarde bien tes bases avant d'y toucher pour etre sur de pouvoir revenir en arrière.

Donc maintenant tu peux faire un index sur 2 colonnes. Par exemple créé une table : table1(champ1,champ2,champ3)
tu lui applique un index 'unique' (que j'ai appelé LINDEX ci-dessous) sur champ1 et champ2

Code: Tout sélectionner
CREATE TABLE IF NOT EXISTS `table1` (
  `CHAMP1` tinytext NOT NULL,
  `CHAMP2` tinytext NOT NULL,
  `CHAMP3` tinytext NOT NULL,
  UNIQUE KEY `LINDEX` (`CHAMP1`(10),`CHAMP2`(10))
) ENGINE=MyISAM DEFAULT CHARSET=latin1;


Ensuite tu entres les valeurs suivantes :
('a','a','')
('a','b','')
('b','a','')
('b','b','')
('b','c','')

Code: Tout sélectionner
INSERT INTO `table1` (`CHAMP1`, `CHAMP2`, `CHAMP3`) VALUES
('a', 'a', ''),
('a', 'b', ''),
('b', 'a', ''),
('b', 'b', ''),
('b', 'c', '');


en fait avec cet exemple tu vois que dans champ1 tu peux réutiliser autant de fois que tu veux la meme valeur du moment quand champ2 est différent des autres valeurs. Comme je t'ai dis je sais pas trop si c'est ce que tu veux mais c'est ce que j'en ai compris :mrgreen:

Ensuite j'ai cru voir que tu faisais un SELECT pour voir si la valeur existait ou pas dans ta base, puis un INSERT OU UPDATE suivant les cas. Bin là t'auras juste a faire un INSERT et grâce au ON DUPLICATE c'est mysql qui va se charger de verifier si la combinaison est bien unique, et si la combinaison CHAMP1+CHAMP2 existe déjà alors ca fera l'UPDATE au lieu de l'INSERT

[edit] AAAHHH attends je viens de relire ton message et a priori t'utilises 2 bdd differentes... ok bin ca va pas fonctionner alors :?
Bon bin tant pis dsl :lol:

willpower
WRInaute discret
WRInaute discret
 
Messages: 208
Inscription: 15 Mar 2007

Re: Function while dans php ne fonctionne pas... pourquoi?

Message le Jeu Juin 18, 2009 2:06

jcaron a écrit:
Code: Tout sélectionner
create table destination (language_id integer,categories_description text, categories_name text,primary key(language_id,categories_description));

insert into destination (language_id,categories_description, categories_name) select 1,descri_e,code_groupe from source where num_groupe='03' and is_on_site=1 on duplicate key update categories_name=descri_e;
insert into destination (language_id,categories_description, categories_name) select 4,descrip,code_groupe from source where num_groupe='03' and is_on_site=1 on duplicate key update categories_name=descrip;


Ou pas très loin en tous cas...

Jacques.

Non ca ne fonctionne pas...si je la mets primary key je suis incapple de rentrer ma 2e ligne qui doit avoir le meme code.
Il doit bien y avoir une facon d'utiliser une fontion while a l'interieur d'une autre...

willpower
WRInaute discret
WRInaute discret
 
Messages: 208
Inscription: 15 Mar 2007

Re: Function while dans php ne fonctionne pas... pourquoi?

Message le Jeu Juin 18, 2009 2:34

Bon j'ai decider de modifier mon code et d'jouter des echo dans mon code pour voir ce qui ce passe comme ca....
Code: Tout sélectionner
if ($num_groupe != 03) {
echo"refuse car num_groupe egal pas 3<br>";
   } elseif ($is_on_site != 1) {
    echo"refuse car is_on_site egal pas 1<br>";
   } elseif ($count==0) {
echo"cest un inserte<br>";
mysql_query("INSERT INTO cybersp1_kheopsosc.categories_description (language_id, categories_name, categories_description ) VALUES ('1', '$descrip_e', '$code_groupe')");
mysql_query("INSERT INTO cybersp1_kheopsosc.categories_description (language_id, categories_name, categories_description ) VALUES ('4', '$descrip', '$code_groupe')");
   } else {
echo"cest un updates<br>";
mysql_query("UPDATE cybersp1_kheopsosc.categories_description SET categories_name='$descrip_e'  WHERE categories_description = '$code_groupe' AND language_id = '1'");
mysql_query("UPDATE cybersp1_kheopsosc.categories_description SET categories_name='$descrip'  WHERE categories_description = '$code_groupe' AND language_id = '4'");
}


Voici ce que ca donne:(du moins une partie)
Code: Tout sélectionner
refuse car num_groupe egal pas 3
refuse car num_groupe egal pas 3
refuse car num_groupe egal pas 3
refuse car num_groupe egal pas 3
refuse car num_groupe egal pas 3
cest un inserte
cest un inserte
refuse car is_on_site egal pas 1
cest un inserte
cest un inserte
cest un inserte
cest un inserte
cest un inserte
cest un inserte
refuse car is_on_site egal pas 1
cest un inserte
cest un inserte
refuse car is_on_site egal pas 1
cest un inserte
refuse car is_on_site egal pas 1
cest un inserte
refuse car is_on_site egal pas 1
cest un inserte
cest un inserte
cest un inserte
cest un inserte
cest un inserte
refuse car is_on_site egal pas 1
refuse car is_on_site egal pas 1


Donc ma fonction while semble marcher mais il continue de seulement inserer une ligne... :?

willpower
WRInaute discret
WRInaute discret
 
Messages: 208
Inscription: 15 Mar 2007

Re: Function while dans php ne fonctionne pas... pourquoi?

Message le Jeu Juin 18, 2009 3:17

Et bien j'ai finalement trouver pourquoi cea ne fonctionnait pas...mon code etait bon...c'est ma 2e base de donne qui avait la colonne categories_id en "unique" et la fonction auto_increment pas activé et donc il refusait de les ajouter car il avait la meme valeurs nul que les autres...merci a tous pour votre aide...


5_legs
WRInaute passionné
WRInaute passionné
 
Messages: 2072
Inscription: 30 Avr 2006

Re: Function while dans php ne fonctionne pas... pourquoi?

Message le Jeu Juin 18, 2009 5:36

:mrgreen: Excellent !

druart a écrit:.. car là sans avoir accès aux données c'est pas évident ;-)


voilà qui fini bien donc :-)


Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 2 invités