Blog geekesque... ou pas

Aller au contenu | Aller au menu | Aller à la recherche

18/09/2009

Concaténation de champs avec MySQL

Petite surprise en développant une requête qui fait la recherche d'un mot dans trois champs concaténés, elle ne retourne aucun résultat or le mot est bien présent dans l'un des champs. La requête est de la forme:

SELECT *
FROM table
WHERE CONCAT(champ1, champ2, champ3) LIKE '%mot%'

Après un petit tour dans la documentation MySQL, voici ce que l'on trouve:

CONCAT(str1,str2,...) Retourne une chaîne représentant la concaténation des arguments. Retourne NULL si un des arguments est NULL. Cette fonction peut prendre plus de 2 arguments. Si un argument est un nombre, il sera converti en son équivalent sous forme de chaîne de caractères

Pour une concaténation de champs dont certains peuvent avoir la valeur NULL, il faut employer CONCAT_WS():

SELECT *
FROM table
WHERE CONCAT_WS(' ', champ1, champ2, champ3) LIKE '%mot%'

06/09/2009

Les assertions et vérification de formulaire

Cette classe abstraite permet de vérifier certaines assertions, ou en d'autres termes de vérifier qu'une valeur répond à une condition.

Les vérifications présentées ici sont très simples mais permettent de traiter la plupart des conditions requises pour un formulaire. Voici le détail des fonctionnalités actuelles.

Lire la suite...

29/08/2009

Utilisation des singletons en PHP5

Un singleton est utilisé lorsque l'on a besoin d'une instance unique d'une classe, par exemple une connexion à une base de données.

Avec une petite astuce sur la création de votre classe, en utilisant un masque (aussi appelé pattern) de création, vous pouvez faire en sorte que l'appel d'une classe soit unique dans tout votre site.

Lire la suite...

07/08/2009

Fonction fputcsv en PHP4

Alors que la fonction fgetcsv existe en PHP4 et en PHP5, la fonction fputcsv n'existe qu'en PHP5, ce qui est fort dommage lorsqu'on veut travailler avec des fichiers d'exports ou bien lorsqu'on veut avoir un script utilisable sur la plupart des serveurs sans connaitre leur version de PHP.

Lire la suite...

28/07/2009

Contrôler un email

Je ne vais pas me bloquer sur la version RFC d'une adresse e-mail, ni sur la vérification de son existence, mais sur une vérification syntaxique basique.

Syntaxe d'une adresse e-mail

Une adresse e-mail comporte 2 parties: utilisateur et domaine.
L'utilisateur peut compporter tout les caractères alphanumériques, ainsi que le "-", le " _" et le "+" (bien que rare). Le domaine est composé de plusieurs caractères alphanumériques, ainsi que du "-", le tout suivi d'un point et de 2 à 4 caractères.

Expression régulière

Nous pouvons donc valider la plupart des emails avec le masque suivant:

^([_a-z0-9-+.]+)*@([a-z0-9-]+)(\.[a-z0-9-]+)*(\.[a-z]{2,4})$

Cette expression marche dans 95% dans cas. Elle doit bien entendu être traitée de manière case-insensitive (sans tenir compte de la casse).

26/06/2009

Limitation de l'accès SSH

Parfois, lors d'une mise à jours d'un serveur par exemple, il peut être intéressans de limiter l'accès SSH au seul utilisateur root. Pour faire cela, c'est très simple: il suffit de mettre la raison dans un fichier /etc/nologin et les autres utilisateurs se verront refuser l'accès, avec comme raison le contenu du fichier.

Pour ré-autoriser l'accès, supprimez le fichier.

Bloquer les attaques "brute force" avec iptables

Iptables est l'interface en ligne de commande permettant de configurer Netfilter, qui est un module du noyau Linux qui offre la possibilité de contrôler, modifier et filtrer les paquets IP, et de suivre les connexions. Il fournit ainsi les fonctions de pare-feu, de partage de connexions internet et d'autorisation du trafic réseau.

Il est possible de configurer iptables pour automatiquement bloquer les adresses IP qui feraient trop de tentatives d'accès à votre serveur, un peu à la manière de fail2ban mais sans installer de module complémentaire.

Lire la suite...

05/06/2009

json_encode et json_decode en PHP4

Malgré ce que j'ai pu dire précédemment, il arrive parfois que je doive adapter mes scripts pour des versions anciennes de PHP. Je suis donc obligé d'avoir une petite série de fonctions de compatibilité, que je vais vous proposer au fil de mes développements.

Les fonction json (decode et encode) ne sont natives en PHP que depuis la version 5.2, mais heureusement il y a un moyen de les rendre accessibles depuis les versions antérieures. Pour cela, il faut télécharger le package JSON-PEAR et en extraire le fichier JSON.php.

Ensuite, ce petit script vous permet de créer (si nécessaire) les fonctions:

<?php
if ( !function_exists('json_decode') ){
	require_once (dirname(__FILE__).'/JSON.php');
    function json_decode($content, $assoc=false){
		if ( $assoc ){
			$json = new Services_JSON(SERVICES_JSON_LOOSE_TYPE);
		} else {
			$json = new Services_JSON;
		}
		return $json->decode($content);
	}
}
 
if ( !function_exists('json_encode') ){
	require_once (dirname(__FILE__).'/JSON.php');
	function json_encode($content){
		$json = new Services_JSON;
		return $json->encode($content);
    }
}
?>

Bien entendu, je pars du principe que JSON.php est dans le même répertoire que le fichier de fonctions, à vous d'adapter les chemins utilisés dans require_once

02/06/2009

Utilisation des APIs Google sans javascript

Google permet aux webmasters d'intégrer des résultats de recherche sur leur site en utilisant des fonctions Ajax, mais il peut être utile de récupérer les résultats autrement, par exemple pour les stocker en base.

Heureusement, Google fournit un moyen d'interroger son moteur de recherche directement (par une requète GET) qui renvoie un résultat en JSON[1]

Notes

[1] JSON (JavaScript Object Notation) est un format de données textuel qui permet de représenter de l'information structurée.

Lire la suite...

13/05/2009

Fonction str_split

Bien que je développe essentiellement en PHP 5, il m'arrive parfois d'avoir à travailler sur des hébergements qui sont encore en PHP 4, ce qui est parfois handicapant car des fonctions manquent.

Récemment, je me suis servi dans un script de la fonction str_split() qui permet de transformer une chaîne de caractères en un tableau. Bien entendu, je ne suis pas le seul à avoir fait cela, il y a d'autres versions sur la page officielle.

array str_split ( string string [, int split_length] ) : Convertit une chaîne de caractères en tableau. Si le paramètre optionnel split_length est spécifié, le tableau retourné sera découpé en sous-parties, chacune de taille split_length, sinon, chaque sous-partie aura la taille d'un caractère.

Cette fonction retourne FALSE si split_length est inférieur à 1. Si la longueur de split_length est supérieure à celle de string, la chaîne entière est retournée dans le premier (et seul) élément du tableau.

Fonction

<?php
if (!function_exists('str_split')) {
   /**
    * Convertit une chaine en tableau
    * Retourne false si $length est inférieur à 1, sinon un tableau
    * @param string $string Chaine à convertir
    * @param integer $length Longueur des sous-ensembles
    * @return mixed
    */
   function str_split($string, $length=1) {
      if (intval($length)<1) return false;
      if (strlen($string)<=$length) return array($string);
      $parts = array();
      while(strlen($string)>0) {
         $parts[] = substr($string, 0, $length);
         $string = substr($string, $length);
      }
      return $parts;
   }
}
?>

Utilisation

$string = 'Salut Dave';
$test = str_split($string);
print_r($test);
$test2 = str_split($string, 3);
print_r($test2);

Cet exemple va afficher:

Array (
    [0] => S
    [1] => a
    [2] => l
    [3] => u
    [4] => t
    [5] =>
    [6] => D
    [7] => a
    [8] => v
    [9] => e
)
Array(
   [0] => Sal
   [1] => ut 
   [2] => Dav
   [3] => e
)

- page 4 de 7 -