Function while dans php ne fonctionne pas... pourquoi?
15 messages
• Page 1 sur 1
- willpower
- WRInaute discret

- Messages: 208
- Inscription: 15 Mar 2007
Function while dans php ne fonctionne pas... pourquoi?
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):
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
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é

- Messages: 2072
- Inscription: 30 Avr 2006
Re: Function while dans php ne fonctionne pas... pourquoi?
Bonjour,
A mon avis cela vient de ton test sur
Visiblement c'est toi qui lui demande de n'en insérer qu'un seul (de ta 2e boucle)
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

- Messages: 208
- Inscription: 15 Mar 2007
Re: Function while dans php ne fonctionne pas... pourquoi?
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é

- Messages: 2072
- Inscription: 30 Avr 2006
Re: Function while dans php ne fonctionne pas... pourquoi?
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
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

- Messages: 2685
- Inscription: 13 Fév 2004
Re: Function while dans php ne fonctionne pas... pourquoi?
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.
Jacques.
-

RiPSO - WRInaute passionné

- Messages: 1591
- Inscription: 4 Oct 2007
Re: Function while dans php ne fonctionne pas... pourquoi?
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
http://dev.mysql.com/doc/refman/5.1/en/insert.html
- retza
- WRInaute discret

- Messages: 58
- Inscription: 16 Fév 2005
Re: Function while dans php ne fonctionne pas... pourquoi?
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
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

- Messages: 208
- Inscription: 15 Mar 2007
Re: Function while dans php ne fonctionne pas... pourquoi?
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

- Messages: 208
- Inscription: 15 Mar 2007
Re: Function while dans php ne fonctionne pas... pourquoi?
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

- Messages: 2685
- Inscription: 13 Fév 2004
Re: Function while dans php ne fonctionne pas... pourquoi?
- 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é

- Messages: 1591
- Inscription: 4 Oct 2007
Re: Function while dans php ne fonctionne pas... pourquoi?
euhhhh, je sais pas si j'ai bien compris alors choppe les infos qui t'interessent dans ce que je dis 
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
Ensuite tu entres les valeurs suivantes :
('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
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
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
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
- willpower
- WRInaute discret

- Messages: 208
- Inscription: 15 Mar 2007
Re: Function while dans php ne fonctionne pas... pourquoi?
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

- Messages: 208
- Inscription: 15 Mar 2007
Re: Function while dans php ne fonctionne pas... pourquoi?
Bon j'ai decider de modifier mon code et d'jouter des echo dans mon code pour voir ce qui ce passe comme ca....
Voici ce que ca donne:(du moins une partie)
Donc ma fonction while semble marcher mais il continue de seulement inserer une ligne...
- 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

- Messages: 208
- Inscription: 15 Mar 2007
Re: Function while dans php ne fonctionne pas... pourquoi?
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...
15 messages
• Page 1 sur 1
Lectures recommandées sur ce thème :
- [php] phpini et public function ?
- Function php() - un petit coup de pouce
- PHP mail function envois un attachement vide
- Erreur PHP PDO (Fatal error: Call to a member function query() on a non-object ...)
- [Script] PHP ne fonctionne pas
- Fonction Php qui ne fonctionne plus
- PHP : str_replace ne fonctionne pas
- [PHP] Faire un $query qui fonctionne ...
- RESOLU script php qui fonctionne mal ?
- RewriteRule ^publicite.html pub.php ne fonctionne pas
- Script de mise en cache des pages (PHP MySQL) - 09-08-2010
- TouchGraph GoogleBrowser v1.0 - 06-07-2002
- AdSense Tracking : statistiques détaillées sur les clics AdSense - 29-02-2004
- Google affiche des liens vers des plans de villes - 25-09-2004
- Référencement : le problème des sessions des pages PHP - 04-08-2008
- Optimiser le référencement d'un blog Dotclear : balises TITLE et META - 11-05-2007
Qui est en ligne
Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 2 invités
