Le site des utilisateurs francophones de FluxBB.
Vous n'êtes pas identifié(e).
Maintenant que l'étape 1 est finie (voir message précédent : http://fluxbb.fr/forums/viewtopic.php?p … 6#p106226), je vais résumer tout ça dans le forum "Mod" en proposant un install_mod.php pour installer la colonne supplémentaire nécessaire dans la table forums ainsi qu'une "moulinette" qui mettra à jour toutes les images pour tous les forums.
A ce soir donc.
Dernière modification par Wan (15-03-2012 18:32:02)
Hors ligne
Il serait intéressant de tester l'existence d'une image pour ce forum (last_img <> '') avant d'essayer de l'afficher 
Nous ne faisons pas le travail à votre place mais nous prenons le temps de vous montrer le chemin. Merci de lire ce que l'on vous dit et de réfléchir avant de re-demander une explication.
Hors ligne
belle avancée a ce que je vois. 
je ne traine pas trop ce soir, j'ai un gros exam demain 
Mais si j'ai bien compris le install_mod.php est là pour faire les modification des bases de donnés (modification "invisible" si l'on se contente d'aller sur http://www.mondoamain.fr/install_mod.php )
Dire que je me demandais a quoi ça servait de faire cette manip à chaque fois. 
fanf73, qu'entend tu par tester l'existence d'une image ? Vérifier qu'elle n'est pas supprimée entre temps ?
Bon courage pour la suite ! :good:
Dernière modification par a-snowboard (15-03-2012 20:44:30)
Hors ligne
Il serait intéressant de tester l'existence d'une image pour ce forum (last_img <> '') avant d'essayer de l'afficher
Exact. Si last_img est NULL pas d'affichage.
Je corrige dans le message ad-hoc, merci de ta perspicacité fanf !
[EDIT] : j'ai testé un forum sans image sans faire cette vérification d'existence, donc avec last_img à NULL et cela n'affiche rien et ne provoque pas d'erreur (ni même de remarque sur la console Web). Donc je vais faire la modif, mais c'est vraiment pour la propreté du codage ! 
Dernière modification par Wan (15-03-2012 21:12:05)
Hors ligne
Une petite question aux experts (dont je ne fais pas partie) concernant les manips dans la BDD :
Mon champ last_img ajouté à la table forums est défini ainsi :
Colonne : last_img
Type : TEXT
Défaut : NULL
Interclassement : utf8_general_ci
NULL : oui
Cependant, pour un forum donné, vide au départ (donc avec last_img qui vaut NULL), si j'ai posté une image puis que je l'ai effacée (donc plus d'image dans aucun message du forum), la valeur de last_img ne revient pas à NULL mais à rien ("" ?). Pourtant dans la mise à jour de la table j'ai bien cette ligne :
$db->query('UPDATE '.$db->prefix.'forums SET num_topics='.$num_topics.', num_posts='.$num_posts.', last_post='.$last_post.', last_post_id='.$last_post_id.', last_poster=\''.$db->escape($last_poster).'\', last_img='.($last_img = NULL ? 'NULL' : '\''.$db->escape($last_img).'\'').' WHERE id='.$forum_id) or error('Unable to update last_post/last_post_id/last_poster/last_img', __FILE__, __LINE__, $db->error());Vous auriez une idée ?
Dernière modification par Wan (15-03-2012 21:41:18)
Hors ligne
Je ne pense pas que ce soit ça, mais les conditions se font avec deux signes "=" :
($last_img == NULL ? 'NULL' : '\''.$db->escape($last_img).'\'')Essaye d'enlever les quotes autour du NULL :
($last_img == NULL ? NULL : '\''.$db->escape($last_img).'\'')Nous ne faisons pas le travail à votre place mais nous prenons le temps de vous montrer le chemin. Merci de lire ce que l'on vous dit et de réfléchir avant de re-demander une explication.
Hors ligne
Je ne pense pas que ce soit ça, mais les conditions se font avec deux signes "="
Quel imbécile je suis ! 
Bon, j'essaye tout-à-l'heure, merci !
Hors ligne
Bon, je confirme, il fallait bien (évidemment) un double "=" dans la condition. Cela fonctionne bien, par contre il faut laisser les quotes autour de NULL sinon cela engendre une erreur.
Code corrigé dans le message concerné (fonction update_forum).
Dernière modification par Wan (16-03-2012 10:33:30)
Hors ligne
Bonjour,
Tant pour les champs des tables de BDD que pour les variables PHP, NULL ne répond correctement à aucune condition, sauf :
IS NULL ou IS NOT NULL pour les champs des tables
is_null(...) Indique si une variable vaut NULL pour les variables PHP
isset(...) Détermine si une variable PHP est définie et est différente de NULL
Tout autre condition de test sur NULL engendre un résultat indéterminé
Il y a une seule valeur de type null, et c'est la constante insensible à la casse NULL. Ce qui veut dire que 'NULL' (Constante NULL entre quote) est considéré comme une chaîne dont le contenu est la suite de caractères N U L L.
La valeur spéciale NULL représente une variable sans valeur. NULL est la seule valeur possible du type NULL.
Une variable est considérée comme null si :
elle s'est vue assigner la constante NULL.
elle n'a pas encore reçu de valeur.
elle a été effacée avec la fonction unset().
Ce n'est pas parce que l'erreur se propage qu'elle devient vérité. Gandhi
Sont différents : ça et sa - est et ait - à et a - ce et se - mes et mais ou met - été et était - c'est et ces - ce-si et ceci
La vie sans musique est tout simplement une erreur, une fatigue, un exil. Friedrich Nietzsche
Hors ligne
Merci Otomatic pour ces précisions.
Je vais corriger le code en conséquence.
Cependant, à propos des quotes, dans le cas particulier de cette ligne, on est obligé de les mettre autour du NULL puisqu'on est dans le cas d'une concaténation de chaînes pour l'appel d'une requête SQL :
$db->query('UPDATE '.$db->prefix.'forums SET num_topics='.$num_topics.', num_posts='.$num_posts.', last_post='.$last_post.', last_post_id='.$last_post_id.', last_poster=\''.$db->escape($last_poster).'\', last_img='.(is_null($last_img) ? 'NULL' : '\''.$db->escape($last_img).'\'').' WHERE id='.$forum_id) or error('Unable to update last_post/last_post_id/last_poster/last_img', __FILE__, __LINE__, $db->error());Penses-tu que cela est quand même correct, sachant qu'on est dans ce cas précis d'une requête SQL ?
Dernière modification par Wan (16-03-2012 16:13:16)
Hors ligne
Bonjour,
Je viens de faire des essais, en local, sur une de mes tables de test qui a plusieurs champs dont deux de type text, l'un acceptant les NULL, l'autre avec des NULL par défaut :
DROP TABLE IF EXISTS `test_text`;
CREATE TABLE IF NOT EXISTS `test_text` (
`idj` int(4) NOT NULL AUTO_INCREMENT,
`texte` text COLLATE utf8_unicode_ci NOT NULL,
`col_null_default` varchar(50) CHARACTER SET latin1 COLLATE latin1_general_ci DEFAULT NULL,
`col_accept_null` text COLLATE utf8_unicode_ci,
PRIMARY KEY (`idj`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=5 ;Les deux champs de type TEXT sont remplis avec du texte et, je le remplace par NULL, la requête générée par PhpMyAdmin est :
UPDATE `aviatechno`.`test_text` SET `col_null_default` = NULL ,
`col_accept_null` = NULL WHERE `test_text`.`idj` =4;NULL n'est pas entre quote. La traduction, toujours par PhpMyAdmin en langage PHP donne :
$sql = "UPDATE `aviatechno`.`test_text` SET `col_null_default` = NULL, `col_accept_null` = NULL WHERE `test_text`.`idj` = 4;";Il n'y a pas de quotes autour de NULL et ça me paraît tout-à-fait normal, étant entendu que NULL est une constante.
Il faudrait que tu regardes en local et en mode define('PUN_SHOW_QUERIES', 1); quel est le résultat de la requête lorsque tu mets un NULL.
Ce n'est pas parce que l'erreur se propage qu'elle devient vérité. Gandhi
Sont différents : ça et sa - est et ait - à et a - ce et se - mes et mais ou met - été et était - c'est et ces - ce-si et ceci
La vie sans musique est tout simplement une erreur, une fatigue, un exil. Friedrich Nietzsche
Hors ligne
Après un test en mode define('PUN_SHOW_QUERIES', 1);, le résultat de la requête sus-citée est le suivant :
UPDATE test_forums SET num_topics=1, num_posts=1, last_post=1331837991, last_post_id=53, last_poster='Wan', last_img=NULL WHERE id=3Tout paraît OK donc.
Dernière modification par Wan (16-03-2012 17:37:18)
Hors ligne
La MOD version 1.0 correspondant à la première étape et dispo ici : http://fluxbb.fr/forums/viewtopic.php?id=12576
Hors ligne
merci wan pour cette premiere etape ! 
Hors ligne
L'étape 2 est bouclée avec un plugin de gestion de l'affichage sur l'index : on peut choisir, pour chaque forum, si la miniature de la dernière image postée doit être affichée ou non sur l'index.
--> http://fluxbb.fr/forums/viewtopic.php?p … 88#p106288
Screenshot du plugin :

@a-snowboard : ça te permettra d'éviter que des images classées X s'affichent sur ton index ! 
Dernière modification par Wan (18-03-2012 12:12:41)
Hors ligne
Bon c'est des image de nu ! Pas du porno ! 
Bon sinon je vais tenter d'installer ta mod. va falloir que j'adapte le code car j'ai quelques différences a ce que je vois.
Je n'ai tiqué que maintenant mais c'est pas mal l'idée que ce soit l'image en face du forum (sur l'index) qui change en fonction de la dernière image posté.
Je n'y avais pas pensé à ça.
Je vais voir ce que ça donne mais c'est prometteur ! 
Hors ligne
Ouf, j'ai fait l’installation. 
Comme j'avais le mod qui permet l'affichage des image devant les forum j'ai pas le même code qu'un forum vierge. forcément.
J'ai essayé de m'adapter un peut (D'autant plus que j'ai flux rewite mais j'ai réussi)
Mais j'ai un petit bug dans l'admin. Un dessin sera plus explicite !
A gauche c'est la partie admin et la partie droite c'est l'index.
en partie admin la répétition se fait 3 fois en tout.
Pour désactiver une image, je suis obligé de cliquer 3 fois sur le nom du forum. en effet dès que l’un est cliqué, ça clique automatiquement sur les autres.
Sinon ça marche sans problème.
Hors ligne
Bonjour.
C'est curieux comme phénomène...
As-tu une liste des mods installées sur ton FluxBB ?
Hors ligne
a bon avis je dois avoir une interaction avec la mod d'affichage d'icone devaynt chaque forum.
je pense qu'il faut que j'arrive a desinstaller proprement cette mod. (j'ai bien dit proprement ! lol)
sinon niveau mod j'ai (je completterais au fur et a mesure que ca reviens :
fluxrewite
membre present
images devant forum
messagerie privee
derniers messages sur l'index
plugile(avec uploadile et suivile)
chatbox
captcha
...
Dernière modification par a-snowboard (19-03-2012 13:09:47)
Hors ligne
Franchement, je ne vois pas...
Ce qui et curieux, c'est pourquoi 3 fois ?
Le plugin ne fait qu'une requête simple sur l'ensemble des forums pour les lister. A moins que dans ta BDD les forums soient répliqués deux fois à cause d'une autre mod ?
Pourrais-tu regarder comment est fichue ta table forums ?
Hors ligne
je fait ca ce soir quand je serait rentré chez moi.
je vais partir a la decpuverte de mysql ! 
Hors ligne
quand je vais dans la base forum je ne vois pas de doublon
quand je regarde la table forum je ne vois pas de doublon et je vois ton last_img
Bon après je ne sais pas trop exactement quoi chercher...
Dernière modification par a-snowboard (19-03-2012 20:45:49)
Hors ligne
Bonsoir,
Puisque tu as eu besoin de modifier le code pour l'adapter avec la mod Fluxrewrite, pourrais-tu ici éditer les parties du code que tu as adaptées ? En gros, reprendre le readme.txt et voir pas à pas les différences...
(N.B. : du coup je vais faire une version 1.1.1 avec la compatibilité avec Fluxrewrite...)
Hors ligne
Bon je ne dit pas ce que j'ai fait est le top mais j'ai tenté de m'adapter.
J'ai refait la manip :
Les choses commence à l'instruction 7
J'ai à la place de ce qu'il faut chercher
if ($db->num_rows($result)) // There are topics in the forum
{
list($last_post, $last_post_id, $last_poster, $last_topic, $last_topic_id, $num_replies) = $db->fetch_row($result);
$db->query('UPDATE '.$db->prefix.'forums SET num_topics='.$num_topics.', num_posts='.$num_posts.', num_replies='.$num_replies.', last_post='.$last_post.', last_post_id='.$last_post_id.', last_poster=\''.$db->escape($last_poster).'\', last_topic=\''.$db->escape($last_topic).'\', last_topic_id='.$last_topic_id.' WHERE id='.$forum_id) or error('Unable to update last_post/last_post_id/last_poster', __FILE__, __LINE__, $db->error());Bon j'ai essayé d'adapter ces deux lignes, cdu coup au final j'ai mis ça
if ($db->num_rows($result)) // There are topics in the forum
{
list($last_post, $last_post_id, $last_poster, $last_msg, $last_img, $last_topic, $last_topic_id, $num_replies) = $db->fetch_row($result);
// Is there an image in the message of the last post ?...
$list_img = detect_image($last_msg);
if ($list_img[0] > 0) $last_img = $list_img[$list_img[0]];
// if not, have to find the last image posted in all the messages of all topics of the forum (if there is...)
elseif (!is_null($last_img))
{
$last_img = NULL;
$result = $db->query('SELECT p.message FROM '.$db->prefix.'posts AS p INNER JOIN '.$db->prefix.'topics AS t ON t.id=p.topic_id WHERE t.forum_id='.$forum_id.' ORDER BY p.posted DESC') or error('Unable to fetch posts info', __FILE__, __LINE__, $db->error());
while ($tracked_post = $db->fetch_assoc($result))
{
$list_img = detect_image($tracked_post['message']);
if ($list_img[0] > 0)
{
$last_img = $list_img[$list_img[0]];
break;
}
}
}
$db->query('UPDATE '.$db->prefix.'forums SET num_topics='.$num_topics.', num_posts='.$num_posts.', last_post='.$last_post.', last_post_id='.$last_post_id.', num_replies='.$num_replies.', last_topic_id='.$last_topic_id.', last_poster=\''.$db->escape($last_poster).'\', last_topic=\''.$db->escape($last_topic).'\', last_img='.(is_null($last_img) ? 'NULL' : '\''.$db->escape($last_img).'\'').' WHERE id='.$forum_id) or error('Unable to update last_post/last_post_id/last_poster/last_img', __FILE__, __LINE__, $db->error());Sauf que visiblement j'ai du me planter : en effet pour valider mon commentaire avec une image j'ai cette erreur :
Error: Unable to update last_post/last_post_id/last_poster/last_img.
Pourtant je commentaire est inséré dans le topic sans problème. (mais obligé de faire précédent)
Et en index la nouvelle image n'est pas affiché. Ce qui veut dire qu'actuellement c'est l'ancienne image qui est affiché.
Ce qui veux sans doute dire que j'ai trafiqué un bout qui permet l'actualisation des url. reste à savoir ou.
pour l'instruction 10 j'ai ce code
// Print the categories and forums
$result = $db->query('SELECT c.id AS cid, c.cat_name, f.id AS fid, f.forum_name, f.forum_desc, f.redirect_url, f.moderators, f.num_topics, f.num_posts, f.last_post, f.last_post_id, f.last_poster, f.last_topic, f.last_topic_id, f.num_replies FROM '.$db->prefix.'categories AS c INNER JOIN '.$db->prefix.'forums AS f ON c.id=f.cat_id LEFT JOIN '.$db->prefix.'forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id='.$pun_user['g_id'].') WHERE fp.read_forum IS NULL OR fp.read_forum=1 OR fp.title_only=1 ORDER BY c.disp_position, c.id, f.disp_position', true) or error('Unable to fetch category/forum list', __FILE__, __LINE__, $db->error());et j'ai remplacé par
$result = $db->query('SELECT c.id AS cid, c.cat_name, f.id AS fid, f.forum_name, f.forum_desc, f.redirect_url, f.moderators, f.num_topics, f.num_posts, f.last_post, f.last_post_id, f.last_poster, f.last_img, f.last_img_dsp, f.last_topic, f.last_topic_id, f.num_replies FROM '.$db->prefix.'categories AS c INNER JOIN '.$db->prefix.'forums AS f ON c.id=f.cat_id LEFT JOIN '.$db->prefix.'forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id='.$pun_user['g_id'].') WHERE fp.read_forum IS NULL OR fp.read_forum=1 OR fp.title_only=1 ORDER BY c.disp_position, c.id, f.disp_position', true) or error('Unable to fetch category/forum list', __FILE__, __LINE__, $db->error());pour l'instruction 13, le code etait déjà présent.
Pour l'instruction 15, j'ai fait un remplacement de lien pour prendre en compte fluxrewite :
Donc à la place de
<a href="viewforum.php?id=<?php echo $cur_forum['fid'] ?>"><img src="<?php echo $cur_forum['last_img'] ?>" width="60" alt="" /></a>J'ai mis
<a href="<?php echo fluxrewrite("forum-", $cur_forum['fid'], $cur_forum['forum_name'], 1, false, false) ?>"><img src="<?php echo $cur_forum['last_img'] ?>" width="60" alt="" /></a>(juste la partie URL qui change et ça a l'air OK)
Du coup dans mon index, j'ai remplacé :
<td class="tc0"><a href="<?php echo fluxrewrite("forum-", $cur_forum['fid'], $cur_forum['forum_name'], 1, false, false) ?>"><img src="./img/icons_forums/<?php echo $cur_forum['fid'] ?>.png" alt="" /></a></td>par
<td class="tc0">
<?php
if ((!is_null($cur_forum['last_img'])) && ($cur_forum['last_img_dsp'] == 1))
{
?>
<a href="<?php echo fluxrewrite("forum-", $cur_forum['fid'], $cur_forum['forum_name'], 1, false, false) ?>"><img src="<?php echo $cur_forum['last_img'] ?>" width="60" alt="" /></a>
<?php
}
?>
</td>Je n'ai pas touché au CSS, le code était déjà présent.
J'ai juste modifié les valeurs pour qu'ils soient plus adapté a mon forum.
Par contre malgré mon erreur j'ai toujours mon problème de triple d affichage dans l'administration !
Si vous preferez je peux envoyer mon index.php et function.php avant tout modification par la mod.
Dernière modification par a-snowboard (19-03-2012 22:36:04)
Hors ligne
Bonjour,
Bon, déjà, puisque dans l'étape 7 du readme.txt tu dois avoir une erreur quelque part, et puisque j'ai refait le readme.txt pour l'adapter avec FluxRewrite, dans ton functions.php reprends tes lignes :
$db->query('UPDATE '.$db->prefix.'forums SET num_topics='.$num_topics.', num_posts='.$num_posts.', last_post='.$last_post.', last_post_id='.$last_post_id.', num_replies='.$num_replies.', last_topic_id='.$last_topic_id.', last_poster=\''.$db->escape($last_poster).'\', last_topic=\''.$db->escape($last_topic).'\', last_img='.(is_null($last_img) ? 'NULL' : '\''.$db->escape($last_img).'\'').' WHERE id='.$forum_id) or error('Unable to update last_post/last_post_id/last_poster/last_img', __FILE__, __LINE__, $db->error());
}
else // There are no topics
$db->query('UPDATE '.$db->prefix.'forums SET num_topics='.$num_topics.', num_posts='.$num_posts.', last_post=NULL, last_post_id=NULL, last_poster=NULL, last_topic=NULL, last_topic_id=NULL, num_replies=NULL WHERE id='.$forum_id) or error('Unable to update last_post/last_post_id/last_poster/last_topic', __FILE__, __LINE__, $db->error());et remplace par :
$db->query('UPDATE '.$db->prefix.'forums SET num_topics='.$num_topics.', num_posts='.$num_posts.', num_replies='.$num_replies.', last_post='.$last_post.', last_post_id='.$last_post_id.', last_poster=\''.$db->escape($last_poster).'\', last_img='.(is_null($last_img) ? 'NULL' : '\''.$db->escape($last_img).'\''), last_topic=\''.$db->escape($last_topic).'\', last_topic_id='.$last_topic_id.' WHERE id='.$forum_id) or error('Unable to update last_post/last_post_id/last_poster', __FILE__, __LINE__, $db->error());
}
else // There are no topics
$db->query('UPDATE '.$db->prefix.'forums SET num_topics='.$num_topics.', num_posts='.$num_posts.', last_post=NULL, last_post_id=NULL, last_poster=NULL, last_img=NULL, last_topic=NULL, last_topic_id=NULL, num_replies=NULL WHERE id='.$forum_id) or error('Unable to update last_post/last_post_id/last_poster/last_img/last_topic', __FILE__, __LINE__, $db->error());Dis-moi déjà avec ça si tu n'as plus d'erreur "Unable to update".
Hors ligne