Problème boucle while imbriquée dans autre boucle while

Mammouth du PHP | 19672 Messages

27 août 2010, 00:26

pourquoi tu fais ?
false !== ($datas = mysql_fetch_assoc($exec))
Configure ton php.ini en E_STRICT et essaye sans, tu verras pourquoi ;)
On ne devrait jamais utiliser d'opérateur d'affectation dans une structure de contrôle : donc, on crée une vraie condition en testant le résultat booléen produit par l'affectation.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

ViPHP
ViPHP | 5462 Messages

27 août 2010, 00:36

pourquoi tu fais ?
false !== ($datas = mysql_fetch_assoc($exec))
Configure ton php.ini en E_STRICT et essaye sans, tu verras pourquoi ;)
On ne devrait jamais utiliser d'opérateur d'affectation dans une structure de contrôle : donc, on crée une vraie condition en testant le résultat booléen produit par l'affectation.
bizarre je bosse toujours en strict jamais eu de problème, le while est deja une condition (et s’arrête quand il est a false), mysql_fetch_* renvoie deja false a la fin
ca reviens a faire :
var_dump($data = false);
//(bool) false
toi tu fais
var_dump(false !== ($data = false));
//(bool) false
ce qui reviens au même, en strict t'as quoi comme message d'erreur ?

Mammouth du PHP | 19672 Messages

27 août 2010, 02:25

Je viens de réaliser que ce n'est pas à l'affichage dans un navigateur que j'ai ça mais dans Zend Studio.
Si je fais un truc du genre
while($ligne = mysql_fetch_assoc($exec))
Dans ZDE j'obtiens le message : « Assignation dans une condition (ligne 4)»
Avec la description suivante :
Description
Les assignation dans une structure conditionnelle sont généralement le résultat d'une coquille. Dans de nombreux cas, au lieu du signe =, l'opérateur d'égalité devrait être utilisé. Lorsque vous comparez une variable et une expression non-variable, il es courant de placer la variable à droite de l'opérateur d'égalité. De cette manière, si l'opérateur d'égalité est transformé en opérateur d'assignation par erreur, PHP indiquera immédiatement une erreur. Cela vous aidera à éviter toute la famille de ce bug.
Exemple
if($a = 1){ // il est probable que $a == 1 soit plus approprié.
    ...
}
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

ViPHP
ViPHP | 5462 Messages

27 août 2010, 02:45

ah oui ok, c'est bien et c'est pas bien, parce que avec un truc bon on a l'impression que c'est faux, mais c'est interssant
si tu fais ça ta une erreur aussi ?
while(($ligne = mysql_fetch_assoc($exec)))

Mammouth du PHP | 19672 Messages

27 août 2010, 02:49

Pour te répondre, j'ai créé précisément ce bout de code avec un WHILE pour récupérer les messages de ZDE que j'ai mis au dessus.

Disons que c'est du mode super-strict ;)
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

ViPHP
ViPHP | 5462 Messages

27 août 2010, 02:55

Pour te répondre, j'ai créé précisément ce bout de code avec un WHILE pour récupérer les messages de ZDE que j'ai mis au dessus.

Disons que c'est du mode super-strict ;)
ouais mais c'est pas mal, fraudais que je choppe ça doit y avoir plein de petit optimisation du genre :wink:

Mammouth du PHP | 19672 Messages

27 août 2010, 03:01

Ce qu'il faut chopper, ce sont des bonnes habitudes et rester strict et discipliné : avec l'habitude, on le fait sans même y penser et au bout du compte, les bugs qu'on trouve sont en général bien plus souvent des problèmes conceptuels ou encore un oubli.

Mais c'est aussi pour ça que mon intervention sur ce sujet concernait de l'optimisation : on aligne son code, on le découpe logiquement et au final on obtient un résultat au moins aussi efficace et surtout plus facile à relire plus tard si on doit y faire une modification ou un ajout (cf ma signature ;) )
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

ViPHP
ViPHP | 5462 Messages

27 août 2010, 03:05

et oui, dommage que le DOMDocument marchait pas, parce que si y'a un <, >, " dans le titre ça risque de par marcher

Mammouth du PHP | 19672 Messages

27 août 2010, 03:18

Si c'est pour mettre dans du XML, il faut utiliser les entités XML dans ce cas : < et >
J'ai pas testé, mais ça devrait mieux passer.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe: