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à
++
|

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.
Mouais. Un peu redondant ce code...
Voilà ma proposition:
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.
|