GAGA Template

XLetter

titre1

Vous devez être inscrit et connecté pour pouvoir écrire dans les forums

Page : 1
robocop Posté le 24/11/2007 15:05 - #

Membre
23 messages
Hello, je viens signaler ici quelques bugs assez important je pense, et source d'erreur. (ma version est la 3.3)

Nom des variables


Elles ne peuvent pas contenir de "_", sinon, il y a un problème leur du parsage

Les blocs



Je suis obligé de créer un bloc vide dans un else lorsque je déclare un bloc dans un if (un petit exemple s'impose )

if(!empty($_GET['lettre']))//Si on veux afficher une liste de définitions
        {
        $lettre=mysql_real_escape_string(htmlentities($_GET['lettre']));//On sécurise la varaible lettre
        $tpl->assign('lettre', $lettre);
        $req = mysql_query("SELECT auteur, titre, texte, DATE_FORMAT(date, '%d/%c/%Y %H:%i') date, (SELECT COUNT(*) AS nb FROM `dicobot` WHERE titre LIKE '".$lettre."%') AS nb FROM dicobot WHERE titre LIKE '".$lettre."%' ORDER BY titre") or die(mysql_error());//On compte le nombre d'entrée commaçant par la lettre, et on les lit.

                while($data = mysql_fetch_assoc($req))
                        {
                                $tpl->assign_block('dicobot', array(
                                        'auteur' => $data['auteur'],
                                        'titre_def' => $data['titre'],
                                        'texte' => $data['texte'],
                                        'dateheure' => $data['date']));
                                        $tpl->assign('nb-definition-lettre', $data['nb']);

                        }
        }
elseif (empty($_GET['lettre']))//Sinon, on génère une définition au hasard
        {
                $req = mysql_query("SELECT COUNT(*) AS nbre_entrees FROM `dicobot`")or die(mysql_error());
                $nombre = mysql_fetch_array($req);
                $tpl->assign('nb-definition', $nombre);
                $tpl->assign_block('dicobot', array(' ' => ' '));//Je créé un block pour rien pour éviter une erreur

        }


Voilà
++

gaga26 Posté le 24/11/2007 17:48 - #



741 messages
18 ans
Salut,

Pour les variables c'est très bizarre. Par contre pour les blocks ce bug est connu, il faut que le bloc soit déclarer pour être parsé.

La version 4.0 corrige ce problème, mais n'est pas 100% compatible avec les autres versions...

Ze Thriller Posté le 25/11/2007 17:45 - #


Membre
105 messages
24 ans
Citation
Elles ne peuvent pas contenir de "_", sinon, il y a un problème leur du parsage


Perso, j'en (ab)use, et je n'ai absolument aucun problème.

$lettre=mysql_real_escape_string(htmlentities($_GET['lettre']));//On sécurise la varaible lettre


Mouais. Un peu redondant ce code...
Voilà ma proposition:
$lettre=mysql_real_escape_string(urldecode($_GET['lettre']))


Et ton système semble avoir une faille lorsque par exemple tu mets '.' comme valeur de $_GET['lettre'].

Remplace les empty() par un test de regex:

if (!preg_match('/^[a-z]$/i', $_GET['lettre'])
{
    $lettre=strtolower($_GET['lettre']);
}
else
{
    $lettre=null; // Le format de la variable GET ne correspond pas: vide, pas une lettre, etc...
}
 


Pour le bug j'ai déjà pu constater ça, même si j'utilise une version moddée de la v3.3 .C'est assez chiant au départ quand on ne connait pas

Possibilité de solution: "transfère" le if ... elseif ... dans un bloc {if(...)}...{/if} , directement dans le template.

Page : 1

Vous devez être inscrit et connecté pour pouvoir écrire dans les forums

Retour au forum Rapport de bugs, à la liste des forums, ou au haut de page