Attention à la fonction in_array() en PHP5.
En effet dans le cas d'une array() vide, cela provoque une erreur qui ne me semblait pas exister en PHP4.
L'astuce pour éviter le (ou les) warning(s) générés (heureusement ce ne sont que des warning [wrong type argument])
Dans l'exemple suivant :
while ($cur_forum = $db->fetch_assoc($result))
{
$cur_moderators = ($cur_forum['moderators'] != '') ? Unserialize($cur_forum['moderators']) : array();
if (in_array($id, $cur_moderators))
{
$username = array_search($id, $cur_moderators);
unset($cur_moderators[$username]);
$cur_moderators = (!empty($cur_moderators)) ? '\''.$db->escape(serialize($cur_moderators)).'\'' : 'NULL';
$db->query('UPDATE '.$db->prefix.'forums SET moderators='.$cur_moderators.' WHERE id='.$cur_forum['id']) or error('Unable to update forum', __FILE__, __LINE__, $db->error());
}
}Remplacer :
if (in_array($id, $cur_moderators))
Par :
if ($cur_moderators && in_array($id, $cur_moderators))
Ou par :
if (!empty($cur_moderators) && in_array($id, $cur_moderators))
Extrait du code de l'Admin de ce Forum --> profile.php
(BUG assez ancien dont je ne me suis préoccupé qu'aujourd'hui)![]()
Alain AKA Arma
Hors ligne
Mais non mais non... Pfff
C'est pas : attention avec in_array en PHP 5, il n'y est pour rien le pauvre ![]()
Il faut refaire le titre et le changer pour : Attention si vous codez comme des gorets avec n'importe quel langage de programmation.
Que ce soit en procédural ou en objet d'ailleurs.
Bref, pour éviter ce genre de désagrément lorsque l'on utilise une/des variables, il faut
1) la déclarer
2) vérifier son intégrité
3) avant traitement : vérifier qu'elle existe bien et/ou qu'elle n'est pas vide, condition primordiale au traitement sinon on ne traite pas...
Bref c'est assez loin du code de goret et je sais que cette gymnastique de l'esprit va vous être un peu difficile, il vous reste sinon les @ de gorets ou le super Goret qui est assez simple a mettre en place : Rendre PHP muet, comme cela il ne vous embêtera plus avec ses Warning, autres erreurs et fanfreluches.
![]()
Dernière modification par rikaix (02/01/2009 19:07:17)
Hors ligne
Tu as raison !
Ah ah ah ah ah...
Mais ceux qui ont écrit le Script PunBB (Rickard Andersson, en particulier)...
Codent comme des Gorets (euh, pire que cela encore - un peu comme chez Utilisable) !
Heureusement qu'il y a des T@rlouzes pour corriger et faire fonctionner le bazar sans Warning
(cela dit, les Warnings ne tuent pas et cela fonctionne quand même
)
Alain AKA Arma
PS : Je préfère coder comme une T@rlouze, c'est beaucoup plus propre !
[Vous devez être identifié pour voir le texte caché.]
Hors ligne
Pour rendre PHP muet, c'est simple !
En début de code, mettre :
// Désactiver le rapport d'erreur error_reporting(FALSE);
Sinon, voir la documentation suivante :
--> http://fr.php.net/error_reporting![]()
Alain AKA Arma
Hors ligne
LOL, c'est comme ça que j'ai planté seo.feuxi.com il y a quelques jours...
En PHP4, un index invalide donnait un simple warning, invisible dans mon cas.
Passage en PHP5 ==> Cela devient une ERREUR et plus un warning.
Hors ligne
|
© 2006-2012 / A. G.☺ CiGi€M@®, 1997-2012 |
|
Reproduction totale ou partielle strictement interdite Contact : / |