10 fonctions PHP-MySQL que j’utilise tous les jours

J’ai des scrupules vis-à-vis du logiciel libre. J’en consomme des paquets, j’exploite et j’apprends grâce aux dons de cette communauté, mais je n’ai jamais réellement rendu la pareille. J’aimerais vraiment faire partager tous les projets sur lesquels je travaille, les ouvrir à tout le monde. Hélàs ça demande beaucoup de temps de rendre ses outils universels et compréhensibles.
J’ai du pain sur la planche. En guise d’apéritif, voici ma petite contribution aux développeurs PHP, une série de fonctions que j’ai développé pour résoudre pas mal de problèmes qui se posent au quotidien. J’espère qu’elles seront utiles à d’autres que moi.

1. Trouver le nom d’un département à partir de son numéro

Rien de plus simple que de trouver le nom du département à partir de son numéro ou du code postal. Il suffit d’avoir la table de correspondance qu’on garde en global ou qu’on inclut dans une fonction (comme dans cet exemple) :

// La fonction prend les deux premiers numéros passés en argument
// Code proposé par Le Caphar http://www.lepotlatch.org
function departement($codepostal)
{
    $nom_departement = array ( 
		"01" => "Ain", 
		"02" => "Aisne", 
		"03" => "Allier", 
		"04" => "Alpes-de-Haute Provence", 
		"05" => "Hautes-Alpes", 
		"06" => "Alpes Maritimes", 
		"07" => "Ardèche", 
		"08" => "Ardennes", 
		"09" => "Ariège", 
		"10" => "Aube", 
		"11" => "Aude", 
		"12" => "Aveyron", 
		"13" => "Bouches-du-Rhône", 
		"14" => "Calvados", 
		"15" => "Cantal", 
		"16" => "Charente", 
		"17" => "Charente-Maritime", 
		"18" => "Cher", 
		"19" => "Corrèze", 
		"20" => "Corse", 
		"21" => "Côte d'Or", 
		"22" => "Côtes d'Armor", 
		"23" => "Creuse", 
		"24" => "Dordogne", 
		"25" => "Doubs", 
		"26" => "Drôme", 
		"27" => "Eure", 
		"28" => "Eure-et-Loire", 
		"29" => "Finistère", 
		"30" => "Gard", 
		"31" => "Haute-Garonne", 
		"32" => "Gers", 
		"33" => "Gironde", 
		"34" => "Hérault", 
		"35" => "Ille-et-Vilaine", 
		"36" => "Indre", 
		"37" => "Indre-et-Loire", 
		"38" => "Isère", 
		"39" => "Jura", 
		"40" => "Landes", 
		"41" => "Loir-et-Cher", 
		"42" => "Loire", 
		"43" => "Haute-Loire", 
		"44" => "Loire-Atlantique", 
		"45" => "Loiret", 
		"46" => "Lot", 
		"47" => "Lot-et-Garonne", 
		"48" => "Lozère", 
		"49" => "Maine-et-Loire", 
		"50" => "Manche", 
		"51" => "Marne", 
		"52" => "Haute-Marne", 
		"53" => "Mayenne", 
		"54" => "Meurthe-et-Moselle", 
		"55" => "Meuse", 
		"56" => "Morbihan", 
		"57" => "Moselle", 
		"58" => "Nièvre", 
		"59" => "Nord", 
		"60" => "Oise", 
		"61" => "Orne", 
		"62" => "Pas-de-Calais", 
		"63" => "Puy-de-Dôme", 
		"64" => "Pyrenées-Atlantiques", 
		"65" => "Hautes-Pyrenées", 
		"66" => "Pyrenées-Orientales", 
		"67" => "Bas-Rhin", 
		"68" => "Haut-Rhin", 
		"69" => "Rhône", 
		"70" => "Haute-Saône", 
		"71" => "Saône-et-Loire", 
		"72" => "Sarthe", 
		"73" => "Savoie", 
		"74" => "Haute-Savoie", 
		"75" => "Paris", 
		"76" => "Seine-Maritime", 
		"77" => "Seine-et-Marne", 
		"78" => "Yvelines", 
		"79" => "Deux-Sèvres", 
		"80" => "Somme", 
		"81" => "Tarn", 
		"82" => "Tarn-et-Garonne", 
		"83" => "Var", 
		"84" => "Vaucluse", 
		"85" => "Vendée", 
		"86" => "Vienne", 
		"87" => "Haute-Vienne", 
		"88" => "Vosges", 
		"89" => "Yonne", 
		"90" => "Territoire de Belfort", 
		"91" => "Essonne", 
		"92" => "Hauts-de-Seine", 
		"93" => "Seine-Saint-Denis", 
		"94" => "Val-de-Marne", 
		"95" => "Val-d'Oise" 
	); 
	$departement = substr($codepostal,0,2);
return $nom_departement[$departement]; } print departement(35170); // Renvoie Ille-et-Vilaine

2. Trouver la région à laquelle appartient un département

Là encore, rien de sorcier : il suffit de chercher pour quelle région le département fait partie de la liste. Si on place la liste des régions dans un tableau global, on peut facilement faire l’opération inverse : sortir la liste des départements pour une même région.

// Code proposé par Le Caphar http://www.lepotlatch.org
$liste_regions = array (
	"Alsace" => array(67,68),
	"Aquitaine" => array(24,33,40,47,64),
	"Auvergne" => array ("03",15,43,63),
	"Basse-Normandie" => array (14,50,61),
	"Bourgogne" => array (21,58,71,89),
	"Bretagne" => array (22,29,35,56),
	"Centre" => array (18,28,36,37,41,45),
	"Champagne-Ardenne" => array ("08",10,51,52),
	"Corse" => array(20),
	"DOM-TOM" => array(97),
	"Franche-Comté" => array (25,39,70,90),
	"Haute-Normandie" => array (27,76),
	"Ile de France" => array(75,77,78,91,92,93,94,95),
	"Languedoc-Roussillon" => array(11,30,34,48,66),
	"Limousin" => array(19,23,87),
	"Lorraine" => array (54,55,57,88),
	"Midi-Pyrénées" => array("09",12,31,32,46,65,81,82),
	"Nord / Pas-de-Calais" => array(59,62),
	"Pays de la Loire" => array (44,49,53,72,85),
	"Picardie" => array ("02",60,80),
	"Poitou-Charentes" => array (16,17,79,86),
	"PACA" => array("04","05","06",13,83,84),
	"Rhône-Alpes" => array ("01","07",26,38,42,69,73,74)
);

// Renvoie la région à partir du code postal ou du numéro de département
function region($codepostal) 
{
		global $liste_regions;
		$departement = substr($codepostal,0,2);
		
		foreach($liste_regions as $region => $liste_dep) 
		{
			if (in_array($departement, $liste_dep))
			{
				return $region;
			}
		}		
}
print region(35170); 
// Renvoie Bretagne

3. Convertir une date SQL (YYYY-MM-DD) en date lisible

Les bases de données SQL formatent les champs date sous une forme peu explicite pour les utilisateurs français. J’ai pour habitude de convertir tous ces champs dans un format de date plus lisible, soit long (31 décembre 2006), soit court (31/12/2006).

// Renvoie une date en français à partir d'une date SQL (YYYY-MM-DD)
// Code proposé par Le Caphar http://www.lepotlatch.org
function date_fr ($date,$court = FALSE) 
{
	// Format court 12/08/2006
	if ($court == TRUE)
	{
		return substr($date,8,2) . "/" . substr($date,5,2) . "/" . substr($date,0,4);
	}
	
	// Format long 12 août 2006
	$mois_conv = array (
		"01" => "janvier",
		"02" => "février",
		"03" => "mars",
		"04" => "avril",
		"05" => "mai",
		"06" => "juin",
		"07" => "juillet",
		"08" => "août",
		"09" => "septembre",
		"10" => "octobre",
		"11" => "novembre",
		"12" => "décembre"
	);
	if (substr($date,8,2) != "00") 
	{
		$datefr['jour'] = substr($date,8,2);
	}
	if (substr($date,5,2) != "00") 
	{
		// Majuscule au mois s'il n'y a pas de jour défini (00)
		if (!$datefr['jour']) 
		{
			$datefr['mois'] = ucfirst($mois_conv[substr($date,5,2)]);
		}
		else
		{
			$datefr['mois'] = $mois_conv[substr($date,5,2)];
		}
	}
	if (substr($date,0,4) != "0000") 
	{
		$datefr['annee'] = substr($date,0,4);
	}	
	
	if ($datefr) 
    {
		$date = join (" ", $datefr);
		return $date;
	}
}

print date_fr("2006-12-31") ;
// Renvoie 31 décembre 2006

4. Vérifier une adresse e-mail saisie par un utilisateur

Les formulaires de collecte d’e-mails sont sujets à deux problèmes majeurs. D’un côté, il y a les utilisateurs tête-en-l’air ou les novices qui saisissent systématiquement http://monadresse@free.fr. De l’autre il y a les robots spammeurs qui envoient des caractères ésotériques pour tromper le formulaire et récupérer l’e-mail du webmestre. Une simple expression régulière permet de vérifier que l’e-mail est bien construit (attention, elle ne dira pas si l’adresse elle-même est valide…).

// Vérifie la validité de l'email
// Code proposé par Le Caphar http://www.lepotlatch.org
function est_email ($adresse) { 
	$reg = "^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]*[.][a-z]{2,4}$";
	$email = ereg($reg,$adresse);
	if ($email) 
	{
		return TRUE;
	}
}

if (!est_email("http://caphar@lepotlatch.org")) 
{
	print "Ce n'est pas un e-mail";
}

// Renvoie "Ce n'est pas un e-mail"

5. Couper un texte à 100 caractères sans couper un mot

La fonction substr() permet certes de tronquer une chaîne de caractères, mais rien n’est plus désagréable que de voir des mots coupés en d… Comme ça par exemple. Pour éviter cela, cette fonction (pompée sur le Web) coupe sur un espace. C’est plus propre

// Coupe un texte à $longueur caractères, sur les espaces, et ajoute des points de suspension...
// Code proposé par Le Caphar http://www.lepotlatch.org
function tronque($chaine, $longueur = 120) 
{
 
	if (empty ($chaine)) 
	{ 
		return ""; 
	}
	elseif (strlen ($chaine) < $longueur) 
	{ 
		return $chaine; 
	}
	elseif (preg_match ("/(.{1,$longueur})\s./ms", $chaine, $match)) 
	{ 
		return $match [1] . "..."; 
	}
	else 
	{ 
		return substr ($chaine, 0, $longueur) . "..."; 
	}
}
print tronque("Ceci n'est pas un tuyau",12);
// Renvoie Ceci n'est pas...

6. Retourner une ou plusieurs lignes de la base de données en une seule instruction

Lorsqu’on travaille régulièrement avec des bases SQL, on est amené à multiplier les $sql = mysql_query() qu’on parcourt ensuite avec des mysql_fetch_assoc pour créer des tableaux de données, en créant des variables intermédiaires qu’on n’utilise qu’une fois. J’ai personnellement identifié deux usages principaux qui représentent 90% de mes requêtes, et je leur ai créé chacun une fonction en une ligne qui crée les tableaux associatifs voulus :
– ramener une seule ligne identifiée généralement par son id : j’utilise la fonction mysql_ligne()
– ramener une série de lignes de la base dans un tableau, qu’on peut ensuite traiter à la chaîne avec un foreach : j’utilise la fonction mysql_tableau()

// Retourne une seule ligne dans un tableau $array['champ 1']
// Code proposé par Le Caphar http://www.lepotlatch.org
function mysql_ligne($requete,$erreur=NULL)
{
	$result = mysql_query($requete) OR DIE ("Erreur " . $erreur);
	$array = mysql_fetch_assoc($result) ;
	return $array;
}

$article = mysql_ligne("SELECT titre FROM articles WHERE id=8 LIMIT 1");

print $article['titre'];
// Renvoie par ex. "10 fonctions PHP"

// Retourne à partir d'une requête MySQL toutes les lignes dans un tableau $array[ $champ_identifiant ]['champ 1']
// Le plus souvent, le champ identifiant sera le champ id, ce qui donnera $array[123][...]
function mysql_tableau($requete,$champ_identifiant="id",$erreur=NULL)
{
	$results = mysql_query($requete) OR DIE ("Erreur" . $erreur);
	while ($result = mysql_fetch_assoc($results)) 
	{ 
		if ($result[$champ_identifiant]) 
		{ 
			$array[ $result[$champ_identifiant] ] = $result; 
		}
		else 
		{
			$array[] = $result;
		}
	} 
	return $array;
}

$articles = mysql_tableau("SELECT id, auteur FROM articles ORDER BY id DESC");
foreach ($articles as $article)
{
	print $article['id'] . ' : ' . $article['auteur'] . ',';
}
// Renvoie par ex.  8 : Le Caphar, 6 : Toto

7. Retourner une seule valeur dans une ligne de la base de données

Parfois on ne souhaite obtenir qu’une seule colonne pour une ligne dans toute une table. Par exemple, je veux, en plein milieu d’une chaîne print "", insérer le nom d’un collègue dont l’id est le 62… Cette fonction repose sur mysql_ligne() qu’elle complète. Attention : dès qu’il faut obtenir plusieurs colonnes sur une même ligne, mieux vaut faire un tableau avec mysql_ligne(), car chaque requête est gourmande en ressources serveur.


// Ramène la valeur de la colonne $col de la table $table sur la ligne où where= $where 
// La valeur unique est ramenée sous forme de string
// Code proposé par Le Caphar http://www.lepotlatch.org

function mysql_valeur($table,$col,$where)
{
	$result = mysql_ligne("SELECT $col FROM $table WHERE $where LIMIT 1"); 
	return $result[$col];
}

print "L'employé" . mysql_valeur("repertoire","nom","id=62") . "est là";
// Renvoie "L'employé DUPONT est là"

8. Supprimer tous les accents d’une chaîne

Celui-ci a été outrageusement pompé de Arto Bendiken. Faites-lui un gros bisou de ma part pour cette fonction indispensable.

// Retire les accents de la chaîne 
// Code par Arto Bendiken http://bendiken.net/snippets/php
function sans_accent($text){
$trans = get_html_translation_table(HTML_ENTITIES); // Place les entités dans un tableau
foreach ($trans as $literal =>$entity){ // Crée deux tableaux, un pour la forme accentuée, l'autre sans accents
   if (ord($literal)>=192){ // Ne concerne pas les caractères comme les fractions, guillemets, etc...
     $replace[]=substr($entity,1,1); //Récupère le 'E' de la chaîne '&Eaccute' etc.
     $search[]=$literal;}} //Renvoie la lettre accentuée
return str_replace($search, $replace, $text);}

print sans_accent("Belvédère");
// Renvoie Belvedere

9. Mettre en chaîne accentuée en majuscules

PHP est assez réfractaire aux langues accentuées. La fonction strtoupper est ainsi incapable de changer la casse des minuscules accentuées pour en faire des majuscules simples (non accentuées). Ma fonction utilise tout simplement la fonction précédente sans_accent() pour supprimer les accents avant.

//Convertit la chaîne en majuscules, et passe les minuscules accentuées en majuscules non accentuées
// Code proposé par Le Caphar http://www.lepotlatch.org

function majuscules ($chaine) 
{
	return strtoupper(sans_accent($chaine));
}

print majuscules ("L'épopée du Würlitzer");
// Renvoie L'EPOPEE DU WURLITZER

10. Faire un lien automatique sur les adresses e-mails en toutes lettres

Je suis souvent amené à utiliser des textes saisis dans un formulaire par des utilisateurs et contenant des adresses e-mail. A la relecture, il est pratique de convertir automatiquement ces adresses en lien mailto: cliquables. Ce’st possible, grâce aux expressions régulières :

// Convertit les adresses e-mail texte en liens cliquables
// Code proposé par Le Caphar http://www.lepotlatch.org

function liens_email($texte)
{
	$pattern = "/([._a-zA-Z0-9-]*@[.a-zA-Z0-9-]*)/";
	$replace = "<a href=\"mailto:$1\">$1</a>";		  
	$string = preg_replace($pattern, $replace, $texte);	
	return $string;
}

print liens_email("Contactez l'auteur caphar@lepotlatch.org");
// Renvoie Contactez l'auteur caphar@lepotlatch.org

J’ai des scrupules vis-à-vis du logiciel libre. J’en consomme des paquets, j’exploite et j’apprends grâce aux dons de cette communauté, mais je n’ai jamais réellement rendu la pareille. J’aimerais vraiment faire partager tous les projets sur lesquels je travaille, les ouvrir à tout le monde. Hélàs ça demande beaucoup de temps de rendre ses outils universels et compréhensibles. J’ai du pain sur la planche. En guise d’apéritif, voici ma petite contribution aux développeurs PHP, une série de fonctions que j’ai développé pour résoudre pas mal de problèmes qui se posent au quotidien. J’espère qu’elles seront utiles à d’autres que moi.

1. Trouver le nom d’un département à partir de son numéro

2. Trouver la région à laquelle appartient un département
3. Convertir une date SQL (YYYY-MM-DD) en date lisible
4. Vérifier une adresse e-mail saisie par un utilisateur
5. Couper un texte à 100 caractères sans couper un mot
6. Retourner une ou plusieurs lignes de la base de données en une seule instruction
7. Retourner une seule valeur dans une ligne de la base de données
8. Supprimer tous les accents d’une chaîne
9. Mettre en chaîne accentuée en majuscules
10. Faire un lien automatique sur les adresses e-mails en toutes lettres

J’ai des scrupules vis-à-vis du logiciel libre. J’en consomme des paquets, j’exploite et j’apprends grâce aux dons de cette communauté, mais je n’ai jamais réellement rendu la pareille. J’aimerais vraiment faire partager tous les projets sur lesquels je travaille, les ouvrir à tout le monde. Hélàs ça demande beaucoup de temps de rendre ses outils universels et compréhensibles. J’ai du pain sur la planche. En guise d’apéritif, voici ma petite contribution aux développeurs PHP, une série de fonctions que j’ai développé pour résoudre pas mal de problèmes qui se posent au quotidien. J’espère qu’elles seront utiles à d’autres que moi.

1. Trouver le nom d’un département à partir de son numéro

Rien de plus simple que de trouver le nom du département à partir de son numéro ou du code postal. Il suffit d’avoir la table de correspondance qu’on garde en global ou qu’on inclut dans une fonction (comme dans cet exemple) :

 // La fonction prend les deux premiers numéros passés en argument // Code proposé par Le Caphar http://www.lepotlatch.org function departement($codepostal) {     $nom_departement = array ( 		"01" => "Ain", 		"02" => "Aisne", 		"03" => "Allier", 		"04" => "Alpes-de-Haute Provence", 		"05" => "Hautes-Alpes", 		"06" => "Alpes Maritimes", 		"07" => "Ardèche", 		"08" => "Ardennes", 		"09" => "Ariège", 		"10" => "Aube", 		"11" => "Aude", 		"12" => "Aveyron", 		"13" => "Bouches-du-Rhône", 		"14" => "Calvados", 		"15" => "Cantal", 		"16" => "Charente", 		"17" => "Charente-Maritime", 		"18" => "Cher", 		"19" => "Corrèze", 		"20" => "Corse", 		"21" => "Côte d'Or", 		"22" => "Côtes d'Armor", 		"23" => "Creuse", 		"24" => "Dordogne", 		"25" => "Doubs", 		"26" => "Drôme", 		"27" => "Eure", 		"28" => "Eure-et-Loire", 		"29" => "Finistère", 		"30" => "Gard", 		"31" => "Haute-Garonne", 		"32" => "Gers", 		"33" => "Gironde", 		"34" => "Hérault", 		"35" => "Ille-et-Vilaine", 		"36" => "Indre", 		"37" => "Indre-et-Loire", 		"38" => "Isère", 		"39" => "Jura", 		"40" => "Landes", 		"41" => "Loir-et-Cher", 		"42" => "Loire", 		"43" => "Haute-Loire", 		"44" => "Loire-Atlantique", 		"45" => "Loiret", 		"46" => "Lot", 		"47" => "Lot-et-Garonne", 		"48" => "Lozère", 		"49" => "Maine-et-Loire", 		"50" => "Manche", 		"51" => "Marne", 		"52" => "Haute-Marne", 		"53" => "Mayenne", 		"54" => "Meurthe-et-Moselle", 		"55" => "Meuse", 		"56" => "Morbihan", 		"57" => "Moselle", 		"58" => "Nièvre", 		"59" => "Nord", 		"60" => "Oise", 		"61" => "Orne", 		"62" => "Pas-de-Calais", 		"63" => "Puy-de-Dôme", 		"64" => "Pyrenées-Atlantiques", 		"65" => "Hautes-Pyrenées", 		"66" => "Pyrenées-Orientales", 		"67" => "Bas-Rhin", 		"68" => "Haut-Rhin", 		"69" => "Rhône", 		"70" => "Haute-Saône", 		"71" => "Saône-et-Loire", 		"72" => "Sarthe", 		"73" => "Savoie", 		"74" => "Haute-Savoie", 		"75" => "Paris", 		"76" => "Seine-Maritime", 		"77" => "Seine-et-Marne", 		"78" => "Yvelines", 		"79" => "Deux-Sèvres", 		"80" => "Somme", 		"81" => "Tarn", 		"82" => "Tarn-et-Garonne", 		"83" => "Var", 		"84" => "Vaucluse", 		"85" => "Vendée", 		"86" => "Vienne", 		"87" => "Haute-Vienne", 		"88" => "Vosges", 		"89" => "Yonne", 		"90" => "Territoire de Belfort", 		"91" => "Essonne", 		"92" => "Hauts-de-Seine", 		"93" => "Seine-Saint-Denis", 		"94" => "Val-de-Marne", 		"95" => "Val-d'Oise" 	); 	$departement = substr($codepostal,0,2);
return $nom_departement[$departement]; } print departement(35170); // Renvoie Ille-et-Vilaine

2. Trouver la région à laquelle appartient un département

Là encore, rien de sorcier : il suffit de chercher pour quelle région le département fait partie de la liste. Si on place la liste des régions dans un tableau global, on peut facilement faire l’opération inverse : sortir la liste des départements pour une même région.

// Code proposé par Le Caphar http://www.lepotlatch.org $liste_regions = array ( 	"Alsace" => array(67,68), 	"Aquitaine" => array(24,33,40,47,64), 	"Auvergne" => array ("03",15,43,63), 	"Basse-Normandie" => array (14,50,61), 	"Bourgogne" => array (21,58,71,89), 	"Bretagne" => array (22,29,35,56), 	"Centre" => array (18,28,36,37,41,45), 	"Champagne-Ardenne" => array ("08",10,51,52), 	"Corse" => array(20), 	"DOM-TOM" => array(97), 	"Franche-Comté" => array (25,39,70,90), 	"Haute-Normandie" => array (27,76), 	"Ile de France" => array(75,77,78,91,92,93,94,95), 	"Languedoc-Roussillon" => array(11,30,34,48,66), 	"Limousin" => array(19,23,87), 	"Lorraine" => array (54,55,57,88), 	"Midi-Pyrénées" => array("09",12,31,32,46,65,81,82), 	"Nord / Pas-de-Calais" => array(59,62), 	"Pays de la Loire" => array (44,49,53,72,85), 	"Picardie" => array ("02",60,80), 	"Poitou-Charentes" => array (16,17,79,86), 	"PACA" => array("04","05","06",13,83,84), 	"Rhône-Alpes" => array ("01","07",26,38,42,69,73,74) ); // Renvoie la région à partir du code postal ou du numéro de département function region($codepostal) { 		global $liste_regions; 		$departement = substr($codepostal,0,2); 		foreach($liste_regions as $region => $liste_dep) 		{ 			if (in_array($departement, $liste_dep)) 			{ 				return $region; 			} 		} } print region(35170); // Renvoie Bretagne 

3. Convertir une date SQL (YYYY-MM-DD) en date lisible

Les bases de données SQL formatent les champs date sous une forme peu explicite pour les utilisateurs français. J’ai pour habitude de convertir tous ces champs dans un format de date plus lisible, soit long (31 décembre 2006), soit court (31/12/2006).

// Renvoie une date en français à partir d'une date SQL (YYYY-MM-DD) // Code proposé par Le Caphar http://www.lepotlatch.org function date_fr ($date,$court = FALSE) { 	// Format court 12/08/2006 	if ($court == TRUE) 	{ 		return substr($date,8,2) . "/" . substr($date,5,2) . "/" . substr($date,0,4); 	} 	// Format long 12 août 2006 	$mois_conv = array ( 		"01" => "janvier", 		"02" => "février", 		"03" => "mars", 		"04" => "avril", 		"05" => "mai", 		"06" => "juin", 		"07" => "juillet", 		"08" => "août", 		"09" => "septembre", 		"10" => "octobre", 		"11" => "novembre", 		"12" => "décembre" 	); 	if (substr($date,8,2) != "00") 	{ 		$datefr['jour'] = substr($date,8,2); 	} 	if (substr($date,5,2) != "00") 	{ 		// Majuscule au mois s'il n'y a pas de jour défini (00) 		if (!$datefr['jour']) 		{ 			$datefr['mois'] = ucfirst($mois_conv[substr($date,5,2)]); 		} 		else 		{ 			$datefr['mois'] = $mois_conv[substr($date,5,2)]; 		} 	} 	if (substr($date,0,4) != "0000") 	{ 		$datefr['annee'] = substr($date,0,4); 	} 	if ($datefr)     { 		$date = join (" ", $datefr); 		return $date; 	} } print date_fr("2006-12-31") ; // Renvoie 31 décembre 2006 

4. Vérifier une adresse e-mail saisie par un utilisateur

Les formulaires de collecte d’e-mails sont sujets à deux problèmes majeurs. D’un côté, il y a les utilisateurs tête-en-l’air ou les novices qui saisissent systématiquement http://monadresse@free.fr. De l’autre il y a les robots spammeurs qui envoient des caractères ésotériques pour tromper le formulaire et récupérer l’e-mail du webmestre. Une simple expression régulière permet de vérifier que l’e-mail est bien construit (attention, elle ne dira pas si l’adresse elle-même est valide…).

// Vérifie la validité de l'email // Code proposé par Le Caphar http://www.lepotlatch.org function est_email ($adresse) { 	$reg = "^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]*[.][a-z]{2,4}$"; 	$email = ereg($reg,$adresse); 	if ($email) 	{ 		return TRUE; 	} } if (!est_email("http://caphar@lepotlatch.org")) { 	print "Ce n'est pas un e-mail"; } // Renvoie "Ce n'est pas un e-mail" 

5. Couper un texte à 100 caractères sans couper un mot

La fonction substr() permet certes de tronquer une chaîne de caractères, mais rien n’est plus désagréable que de voir des mots coupés en d… Comme ça par exemple. Pour éviter cela, cette fonction (pompée sur le Web) coupe sur un espace. C’est plus propre

// Coupe un texte à $longueur caractères, sur les espaces, et ajoute des points de suspension... // Code proposé par Le Caphar http://www.lepotlatch.org function tronque($chaine, $longueur = 120) { 	if (empty ($chaine)) 	{ 		return ""; 	} 	elseif (strlen ($chaine) < $longueur) 	{ 		return $chaine; 	} 	elseif (preg_match ("/(.{1,$longueur})\s./ms", $chaine, $match)) 	{ 		return $match [1] . "..."; 	} 	else 	{ 		return substr ($chaine, 0, $longueur) . "..."; 	} } print tronque("Ceci n'est pas un tuyau",12); // Renvoie Ceci n'est pas... 

6. Retourner une ou plusieurs lignes de la base de données en une seule instruction

Lorsqu’on travaille régulièrement avec des bases SQL, on est amené à multiplier les $sql = mysql_query() qu’on parcourt ensuite avec des mysql_fetch_assoc pour créer des tableaux de données, en créant des variables intermédiaires qu’on n’utilise qu’une fois. J’ai personnellement identifié deux usages principaux qui représentent 90% de mes requêtes, et je leur ai créé chacun une fonction en une ligne qui crée les tableaux associatifs voulus :
– ramener une seule ligne identifiée généralement par son id : j’utilise la fonction mysql_ligne()
– ramener une série de lignes de la base dans un tableau, qu’on peut ensuite traiter à la chaîne avec un foreach : j’utilise la fonction mysql_tableau()

// Retourne une seule ligne dans un tableau $array['champ 1'] // Code proposé par Le Caphar http://www.lepotlatch.org function mysql_ligne($requete,$erreur=NULL) { 	$result = mysql_query($requete) OR DIE ("Erreur " . $erreur); 	$array = mysql_fetch_assoc($result) ; 	return $array; } $article = mysql_ligne("SELECT titre FROM articles WHERE id=8 LIMIT 1"); print $article['titre']; // Renvoie par ex. "10 fonctions PHP" // Retourne à partir d'une requête MySQL toutes les lignes dans un tableau $array[ $champ_identifiant ]['champ 1'] // Le plus souvent, le champ identifiant sera le champ id, ce qui donnera $array[123][...] function mysql_tableau($requete,$champ_identifiant="id",$erreur=NULL) { 	$results = mysql_query($requete) OR DIE ("Erreur" . $erreur); 	while ($result = mysql_fetch_assoc($results)) 	{ 		if ($result[$champ_identifiant]) 		{ 			$array[ $result[$champ_identifiant] ] = $result; 		} 		else 		{ 			$array[] = $result; 		} 	} 	return $array; } $articles = mysql_tableau("SELECT id, auteur FROM articles ORDER BY id DESC"); foreach ($articles as $article) { 	print $article['id'] . ' : ' . $article['auteur'] . ','; } // Renvoie par ex.  8 : Le Caphar, 6 : Toto 

7. Retourner une seule valeur dans une ligne de la base de données

Parfois on ne souhaite obtenir qu’une seule colonne pour une ligne dans toute une table. Par exemple, je veux, en plein milieu d’une chaîne print "", insérer le nom d’un collègue dont l’id est le 62… Cette fonction repose sur mysql_ligne() qu’elle complète. Attention : dès qu’il faut obtenir plusieurs colonnes sur une même ligne, mieux vaut faire un tableau avec mysql_ligne(), car chaque requête est gourmande en ressources serveur.

 // Ramène la valeur de la colonne $col de la table $table sur la ligne où where= $where // La valeur unique est ramenée sous forme de string // Code proposé par Le Caphar http://www.lepotlatch.org function mysql_valeur($table,$col,$where) { 	$result = mysql_ligne("SELECT $col FROM $table WHERE $where LIMIT 1"); 	return $result[$col]; } print "L'employé" . mysql_valeur("repertoire","nom","id=62") . "est là"; // Renvoie "L'employé DUPONT est là" 

8. Supprimer tous les accents d’une chaîne

Celui-ci a été outrageusement pompé de Arto Bendiken. Faites-lui un gros bisou de ma part pour cette fonction indispensable.

// Retire les accents de la chaîne  // Code par Arto Bendiken http://bendiken.net/snippets/php function sans_accent($text){ $trans = get_html_translation_table(HTML_ENTITIES); // Place les entités dans un tableau foreach ($trans as $literal =>$entity){ // Crée deux tableaux, un pour la forme accentuée, l'autre sans accents    if (ord($literal)>=192){ // Ne concerne pas les caractères comme les fractions, guillemets, etc...      $replace[]=substr($entity,1,1); //Récupère le 'E' de la chaîne '&Eaccute' etc.      $search[]=$literal;}} //Renvoie la lettre accentuée return str_replace($search, $replace, $text);} print sans_accent("Belvédère"); // Renvoie Belvedere 

9. Mettre en chaîne accentuée en majuscules

PHP est assez réfractaire aux langues accentuées. La fonction strtoupper est ainsi incapable de changer la casse des minuscules accentuées pour en faire des majuscules simples (non accentuées). Ma fonction utilise tout simplement la fonction précédente sans_accent() pour supprimer les accents avant.

//Convertit la chaîne en majuscules, et passe les minuscules accentuées en majuscules non accentuées // Code proposé par Le Caphar http://www.lepotlatch.org function majuscules ($chaine) { 	return strtoupper(sans_accent($chaine)); } print majuscules ("L'épopée du Würlitzer"); // Renvoie L'EPOPEE DU WURLITZER 

10. Faire un lien automatique sur les adresses e-mails en toutes lettres

Je suis souvent amené à utiliser des textes saisis dans un formulaire par des utilisateurs et contenant des adresses e-mail. A la relecture, il est pratique de convertir automatiquement ces adresses en lien mailto: cliquables. Ce’st possible, grâce aux expressions régulières :

// Convertit les adresses e-mail texte en liens cliquables // Code proposé par Le Caphar http://www.lepotlatch.org function liens_email($texte) { 	$pattern = "/([._a-zA-Z0-9-]*@[.a-zA-Z0-9-]*)/"; 	$replace = "<a href=\"mailto:$1\">$1</a>"; 	$string = preg_replace($pattern, $replace, $texte); 	return $string; } print liens_email("Contactez l'auteur caphar@lepotlatch.org"); // Renvoie Contactez l'auteur caphar@lepotlatch.org 
Outil de référencement professionnel - essai gratuit Ce contenu a été publié dans Développement PHP, avec comme mot(s)-clé(s) , , , , . Vous pouvez le mettre en favoris avec ce permalien.

25 réponses à 10 fonctions PHP-MySQL que j’utilise tous les jours

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *