oct
30

Trier dans un ordre spécifique avec MySql

Il arrive parfois que l’on ai besoin de trier les résultats d’une requête SQL dans un ordre précis, qui ne soit ni croissant, ni décroissant.

Pour cela, il faut utiliser la fonction FIND_IN_SET() dans le order by.

Exemple

SELECT nom
FROM chaine
ORDER BY FIND_IN_SET(idChaine, '17,12,1,9,8,5')

Attention cependant aux performances, c’est une fonction qui peut être gourmande selon la taille de la table.

Il est aussi possible d’utiliser la fonction FIELD, vous trouverez un bon exemple sur ce site :

https://oncletom.io/2007/mysql-tri-personnalises-aleatoires/

juil
28

La vérité sur le cache ttl d’ez publish

Voilà un petit retour suite à une longue investigation sur le fameux

{set-block scope=root variable=cache_ttl}0{/set-block}

Cette ligne permet d’invalider le cache de vue (cache content) de TOUTE la page.

Voici les différents cas dans lesquels le cache va être invalidé :

Déclaration de cette ligne dans les templates suivants :

• Le content view (c’est le template qui se charge d’afficher le rendu de $module_result.content, dans la plupart du temps la view full)

• N’importe quel template inclus à partir du template utilisé pour le content view

• Dans un template qui utilise un opérateur qui va renvoyer le contenu d’un autre template qui va contenir le cache ttl à 0

Lire la suite

juil
28

Recommandations de sécurité Ez publish et PHP

Failles xss

Avec Ez Publish

Utiliser la fonction wash() sur les variables dans les templates, surtout sur les variables pouvant être modifiées par l’utilisateur (paramètres d’url, champs de formulaire, etc)

En PHP

La stratégie de protection principale contre les injections HTML est la même que pour toutes les injections. Il est recommandé d’implémenter une fonction de filtrage en entrée et une fonction d’encodage en HTML en sortie.

L’encodage en sortie peut être effectué par deux fonctions en PHP :

- htmlspecialchars() remplace tous les caractères qui ont une signification spéciale en HTML par leur entité HTML. Cette fonction va cibler les caractères suivants :

  • &, le « et commercial », qui commence les séquences HTML (telles que &) ;
  • ‘, les guillemets simples, utilisés dans les attributs ;
  • , les guillemets doubles, utilisés dans les attributs ;
  • < et >, les signes « inférieur à » et « supérieur à », qui délimitent une balise.

- htmlentities() est une version plus complète de htmlspecialchars(), elle remplace dans une chaîne tous les caractères possibles par leur séquence HTML. Il est possible de spécifier le masque et l’encodage à utiliser

<a href="http://www.php.net/htmlentities" target="blank">htmlentities</a>($str, ENT_QUOTES, 'UTF-8');


juin
26

Supprimer la recherche snap.do dans la barre d’adresse de firefox

Je viens d’être victime d’un problème, suite à l’installation d’un logiciel, je me suis retrouvé avec tous mes navigateurs infecté par un malware nommé snap.do. Le résultat, une page par défaut snap.do, un moteur de recherche par défaut, une toolbar et autres joyeusetés. Même après avoir tout nettoyé à l’aide de Malwarebytes Anti-Malware, AdwCleaner ou autre Spybot, il me restait la barre d’adresse/recherche de Firefox qui continuait à m’envoyer sur ce snap.do.

Voici donc la solution que j’ai enfin réussi à trouver sur internet

- taper about:config dans la barre d’adresse
- lancer une recherche pour « snap »
- réinitialiser les variables contenant ce terme

déc
12

Ez Publish – Générer un table des matières à partir d’un contenu xml_block

Pour générer une table des matières à partir des différents niveaux de titre (h2, h3, …)  présent dans votre contenu (saisi via l’éditeur wysiwyg) , il suffit d’utiliser le template operator « eztoc » fourni par ezpublish dans votre template. Et vous obtiendrez des jolies ancres vers votre contenu.

 

{* body is ezxml datatype*}
{eztoc( $node.object.data_map.body )}


nov
15

Limite de caractères de la fonction Group_concat Mysql

Author Appo    Category SQL     Tags , , , ,

Si vous utilisez la fonction Group_concat de mysql, il faut savoir que cette fonction a une limite de caractère par défaut (1024 pour mon cas). Ce qui est traître, c’est que mysql n’indique pas d’erreur et va tronquer le résultat retourné.

Pour contourner cette limite il suffit de lancer la requête suivante avant votre requête contenant le group_concat

SET [SESSION | GLOBAL] group_concat_max_len = nbre de caractères;

La valeur doit aussi certainement être modifiable dans un fichier de configuration de mysql.

fév
29

Trier la colonne d’un tableau sans prendre en compte la casse et les accents

Par défaut, la fonction array_multisort n’est pas casse sensitive et ne gère pas les accents.

Du coup avec un tableau contenant « Allemagne », « Enfant », « Équipe », « Toto », on se retrouve avec l’ordre suivant : Allemagne, Enfant, Toto, Équipe

Pour contourner cela, nous allons faire appel à la fonction array_map afin de nettoyer les données à trier.

<?php
$functionSansAccent = function ($chaine) {
        if (version_compare(PHP_VERSION, '5.2.3', '>='))
            $str = htmlentities($chaine, ENT_NOQUOTES, "UTF-8", false);
        else
            $str = htmlentities($chaine, ENT_NOQUOTES, "UTF-8");
 
        // NB : On ne peut pas utiliser strtr qui fonctionne mal avec utf8.
        $str = preg_replace('#\&([A-za-z])(?:acute|cedil|circ|grave|ring|tilde|uml)\;#', '\1', $str);
 
        return $str;
};
 
$data[] = array('mots' => 'Toto', 'nb' => 2);
$data[] = array('mots' => 'Allemagne', 'nb' => 2);
$data[] = array('mots' => 'Enfant', 'nb' => 1);
$data[] = array('mots' => 'Équipe', 'nb' => 6);
 
// On récupére les valeur de la première colonne
foreach ($data as $key => $row) {
    $colSort[]  = $row['mots'];
}
 
 //$colSort = array("Allemagne", "Enfant", "Équipe", "Toto");
//On supprime les accents
  $array_sans_accent = array_map($functionSansAccent , $colSort);
//On met en minuscule
  $array_lowercase = array_map('strtolower', $array_sans_accent);
// Ajoute $data en tant que dernier paramètre, pour trier par la clé commune
  array_multisort($array_lowercase, SORT_ASC, $data);
 
  print_r($data);
/*
Le rendu sera
 
Array
(
    [0] => Array
        (
            [mots] => Allemagne
            [nb] => 2
        )
 
    [1] => Array
        (
            [mots] => Enfant
            [nb] => 1
        )
 
    [2] => Array
        (
            [mots] => Équipe
            [nb] => 6
        )
 
    [3] => Array
        (
            [mots] => Toto
            [nb] => 2
        )
 
)
*/


fév
16

Des slides qui ont de la gueule, avec impress.js !

Comme je vous l’avais dit lorsque je vous ai présenté nos vœux 2012, j’ai découvert récemment un outil qui va vous permettre d’en mettre plein la vue à votre auditoire lors de votre prochaine présentation.

Bye bye le vieux Powerpoint des familles, et place aux technos modernes : HTML5, CSS3 et JavaScript. Lire la suite

fév
16

Limite du nombre de paramètres GET

Author Appo    Category PHP     Tags , , , ,

Aujourd’hui j’ai rencontré un problème sur un site en production et seulement sur la production. Les symptômes ? Perte d’informations passées en paramètres GET. Après quelques recherches, nous avons repéré que $_GET ne contenait pas toutes les informations présentes dans l’url, il manquait les dernières (environ une dizaine de paramètres manquants).

La première hypothèse fut donc que l’URL était tronquée au delà d’un certain nombre de caractères. Sauf que le problème, c’est que d’une page à l’autre, la longueur de l’URL était différente mais surtout, que l’endroit où l’on perdait le premier paramètre n’était pas le même, donc ce ne pouvait pas être un tronquage de l’URL.

Lire la suite

fév
7

Plugin Jquery Tablesorter : Trier sur un numéro de téléphone

Par défaut, le plugin tablesorter jquery ne gère pas bien le tri sur une colonne contenant des numéros de téléphone. La raison ? C’est parce que le plugin détecte le numéro comme une chaine de texte, du coup le tri ne se fait pas correctement. On peut bien essayer de préciser lors de l’initialisation qu’il faudra trier cette colonne comme un numérique, le tri ne fonctionnera pas mieux, tout simplement car généralement un numéro de téléphone contient des caractères alphanumériques tels que « . » ou « - », du coup le tri ne se fait que sur les 2 premiers chiffre du numéro.

J’ai donc créé un nouveau parseur pour gérer le tri sur mes numéros de téléphone. La méthode est très simple, je supprime tous les caractères non numérique lors du tri et effectue ainsi un tri purement numérique.

    $.tablesorter.addParser({
      // set a unique id
      id: 'phoneNumber',
      is: function(s) {
        // return false so this parser is not auto detected
        return false;
      },
      format: function(s) {
                return $.tablesorter.formatFloat(s.replace(new RegExp(/[^0-9]/g),""));
        },
      // set type, either numeric or text
      type: 'numeric'
    });


Edito

Bienvenue sur Mémorandom.

Mémorandom est le blog de 2 développeurs web, Appo et Nico.

Vous y trouverez des informations sur différents domaines touchant de près ou de loin au développement web

Tutoriels Yii Framework

Nos derniers articles

Blogs Dev

Liens

Mots-clefs