Asselin Benoit Développement - Création et conception de sites internet - Amiens Somme Picardie Paris France

La fonction date() PHP traduite en français ( PHP, date )
01`02`2010

4 commentairesPoster un commentaire !
Tags: PHP

Cette fonction se comporte exactement de la même manière que la fonction date() en PHP, mais traduite en français.

function date_french($format, $timestamp = null) {
	$param_D = array('', 'Lun', 'Mar', 'Mer', 'Jeu', 'Ven', 'Sam', 'Dim');
	$param_l = array('', 'Lundi', 'Mardi', 'Mercredi', 'Jeudi', 'Vendredi', 'Samedi', 'Dimanche');
	$param_F = array('', 'Janvier', 'Février', 'Mars', 'Avril', 'Mai', 'Juin', 'Juillet', 'Août', 'Septembre', 'Octobre', 'Novembre', 'Décembre');
	$param_M = array('', 'Jan', 'Fév', 'Mar', 'Avr', 'Mai', 'Jun', 'Jul', 'Aoû', 'Sep', 'Oct', 'Nov', 'Déc');

	$return = '';
	if(is_null($timestamp)) { $timestamp = mktime(); }
	for($i = 0, $len = strlen($format); $i < $len; $i++) {
		switch($format[$i]) {
			case '\\' : // double.slashes
				$i++;
				$return .= isset($format[$i]) ? $format[$i] : '';
				break;
			case 'D' :
				$return .= $param_D[date('N', $timestamp)];
				break;
			case 'l' :
				$return .= $param_l[date('N', $timestamp)];
				break;
			case 'F' :
				$return .= $param_F[date('n', $timestamp)];
				break;
			case 'M' :
				$return .= $param_M[date('n', $timestamp)];
				break;
			default :
				$return .= date($format[$i], $timestamp);
				break;
		}
	}
	return $return;
}


Comment lire des données POST bruts en PHP ( flux, php://input )
09`09`2008

1 commentairePoster un commentaire !
Tags: PHP

Voici sûrement l'une des astuces les plus inutiles du moment. Comment accéder aux données POST bruts en PHP ? Il suffit de lire le flux d'entrée php://input de la manière suivante :

<form action="page-input.php" method="post">
	<p>
		<label for="text">Zone de texte :</label>
		<input type="text" name="text" id="text" />
	</p>
	
	<p><input type="submit" name="submit" value="Continuer" /></p>
</form>

<p><?php echo file_get_contents('php://input'); ?></p>

Ce qui retournera comme résultat :

text=bla+bla+bla&submit=Continuer

php://input ne fonctionnera pas si vous utilisez l'attribut enctype="multipart/form-data" dans votre balise <form action="" method="post">.

Documentation officielle : http://www.php.net/wrappers.php


Utiliser l'écriture Array sous forme Object en PHP ( PHP5, POO, ArrayAccess )
25`08`2008

3 commentairesPoster un commentaire !
Tags: PHP5 PHP

Comme annoncé la semaine dernière et les vacances se terminant, il est maintenant temps de remonter (un peu) le niveau de ce blog qui sombrait doucement mais sûrement dans le grand n'importe quoi.

L'astuce du jour n'est guère facile à expliquer en quelques lignes, un exemple sera à mon avis beaucoup plus clair.
Comment utiliser un tableau comme un pur objet ? ( à la sauce Java, si je puis m'exprimer ainsi )

// Ecriture PHP classique
$array = array(); // Ligne facultative
$array['key1'] = 'value 1';
$array['key2'] = 'value 2';
$array['key3']['key31'] = 'value 31';
...

Voici une écriture qui ne fonctionne qu'en PHP 5 :

// Ecriture PHP5 objet
$array = new ClassArray(); // Ligne obligatoire !
$array['key1'] = 'value 1';
$array['key2'] = 'value 2';
...

En soit, il n'y a absolument rien de révolutionnaire, mais le new crée l'instance de l'objet ClassArray() et vous pouvez constater que l'écriture reste un tableau et non un objet
$array->key1 = 'value 1';

Une question se pose sûrement dans votre cerveau qui bouillonne d'impatience : Qui a-t-il dans cette ClassArray() ? Une simple implémentation de ArrayAccess ( PHP5 only ), ce qui nous donne :

class ClassArray implements ArrayAccess {
	
	protected $_array = array();
	
	public function __construct() {
		$this->_array = func_get_args();
	}
	
	// En cas d'appel de la fonction isset()
	public function offsetExists($offset) {
		return isset($this->_array[$offset]);
	}
	
	// En cas d'appel de la valeur
	public function offsetGet($offset) {
		return $this->_array[$offset];
	}
	
	// En cas d'affectation de la valeur
	public function offsetSet($offset, $value) {
		return $this->_array[$offset] = $value;
	}
	
	// En cas d'appel de la fonction unset()
	public function offsetUnset($offset) {
		unset($this->_array[$offset]);
	}
	
}

Ensuite, libre à vous de modifier cette classe pour lui ajouter de nouvelles fonctionnalités...

Remarque importante : Si vous essayez de créer un tableau sur plusieurs dimensions, un message d'erreur se produira avec l'écriture suivante :

$array = new ClassArray();
$array['key3']['key31'] = 'value 31';

// Problème : Vous n'avez pas définit $array['key3'] ! l'écriture POO est beaucoup plus stricte ;)
// Solution :
$array = new ClassArray();
$array['key3'] = new ClassArray();
$array['key3']['key31'] = 'value 31';

Documentation officielle :
http://www.php.net/~helly/php/ext/spl/interfaceArrayAccess.html


function array2object(array $array) { ... } en PHP5 ( object, stdClass, php )
19`07`2008

Aucun commentairePoster un commentaire !
Tags: PHP PHP5

Cette fonction function array2object() n'est pas nouvelle en soit, mais voici une écriture récursive en PHP5 plus rigolote ( et surtout plus restrictive ) à utiliser.

La fonction ci-dessous ne fonctionne qu'en PHP 5 de part le typage du paramètre (array $array) ainsi on évite le contrôle is_array(). Toutefois, si vous envoyez une valeur qui n'est pas un tableau, une erreur de compilation se produira.

function array2object(array $array) {
	$object = new stdClass();
	foreach($array as $key => $value) {
		if(is_array($value)) {
			$object->$key = array2object($value);
		} else {
			$object->$key = $value;
		}
	}
	return $object;
}

Exemples d'utilisation :

$tableau[0] = 'Valeur 0';
$tableau[1] = 'Valeur 1';
$tableau['deux'] = 'Valeur 2';
$tableau['trois'] = 'Valeur 3';

$objet = array2object($tableau);

echo $objet->0;     // Ecriture incorrecte
echo $objet->{'1'}; // Ecriture correcte
echo $objet->deux;  // Ecriture classique
echo $objet->trois; // etc...

Comment retourner plusieurs valeurs depuis une fonction PHP ? ( function )
05`07`2008

4 commentairesPoster un commentaire !
Tags: PHP

Astuce du jour : Comment retourner plusieurs variables depuis une fonction PHP ?

Vous pouvez utiliser les tableaux array() ou les objets new stdClass() dans une variable et retourner la dite variable, toutefois cette écriture n'est pas forcément limpide lors d'une relecture de code.

Je vous propose une écriture assez souple et surtout beaucoup plus claire qui vous donnera une réelle impression de return avec X valeurs.

<?php

function retourner_plusieurs_valeurs() {
	$variable_n_1 = 'One';
	$variable_n_2 = 'Two';
	$variable_n_3 = '333';
	
	return array($variable_n_1, $variable_n_2, $variable_n_3);
}


list($variable_n_1, $variable_n_2, $variable_n_3) = retourner_plusieurs_valeurs();

?>


Formater un nombre au format monétaire ( money_format, php )
28`06`2008

Aucun commentairePoster un commentaire !
Tags: PHP

Cette astuce n'a absolument rien d'extraordinaire, mais peut être vous fera-t-elle découvrir les différentes manières de formater un nombre au format monétaire.

<?php

$number = 1234.567;


// Première méthode ( peu pratique )
echo sprintf('%.2f &euro;', $number); // 1234.57 €


// Seconde méthode ( plus simple mais non automatique )
echo number_format($number, 2, ',', ' ') . ' &euro;'; // 1 234,57 €


// Troisième méthode ( qui peut être automatisée )
setlocale(LC_MONETARY, 'en_US');
echo money_format('%n', $number); // $1,234.57

setlocale(LC_MONETARY, 'fr_FR');
echo money_format('%n', $number); // 1 234,57 Eu
echo money_format('%!n &euro;', $number); // 1 234,57 €

?>

Article inspiré du livre O'Reilly PHP Cookbook, Second Edition.


Enlever les magic_quotes de $_GET, $_POST, $_COOKIE, $_REQUEST ( php6 )
25`05`2008

Aucun commentairePoster un commentaire !
Tags: PHP

Voici une petite commande PHP qui vous permettra de désactiver ou plutôt de nettoyer les magic_quotes quand ces dernières sont activées ( et accessoirement de préparer votre code si la fonction get_magic_quotes_gpc() venait à disparaître dans PHP 6 ).

if(!function_exists('get_magic_quotes_gpc')) {
	// En prevision de PHP 6
	function get_magic_quotes_gpc() { return 0; }
}

if(get_magic_quotes_gpc()) {
	function undo_magic_quotes(&$array) {
		foreach($array as $key => $value) {
			if(is_array($array[$key])) {
				undo_magic_quotes($array[$key]);
			} else {
				$array[$key] = stripslashes($value);
			}
		}
	}
	
	undo_magic_quotes($_GET);
	undo_magic_quotes($_POST);
	undo_magic_quotes($_COOKIE);
	undo_magic_quotes($_REQUEST);
	undo_magic_quotes($_FILES);
}

Créer / convertir des adresses de sites internet HTTP en liens cliquables
23`03`2008

2 commentairesPoster un commentaire !
Tags: PHP Regex XHTML

La fonction ci-dessous vous permet par l'intérmédiaire des expressions régulières de convertir automatiquement les adresses de sites internet http://www.ab-d.fr/ en lien actif avec la balise <a href="http://www.ab-d.fr/" onclick="window.open(this.href); return false;">http://www.ab-d.fr/</a>.

Accessoirement, la fonction convertit aussi les adresses emails... libre à vous de rajouter d'autres fonctionnalités de remplacement grâce à la fonction preg_replace().

function texte2url($texte) {
	$patterns[0] = '/(https?:\/\/\S+)/i';
	$replacements[0] = '<a href="$1" onclick="window.open(this.href); return false;">$1</a>';
	
	$patterns[1] = '/(\S+@\S+\.\S+)/i';
	$replacements[1] = '<a href="mailto:$1">$1</a>';
	
	return preg_replace($patterns, $replacements, $texte);
}


Equivalent de parseInt en PHP avec preg_match (PHP, Regex, Javascript)
15`03`2008

5 commentairesPoster un commentaire !
Tags: PHP Regex

La fonction parseInt() en Javascript tansforme une chaîne de caractères en nombre entier et renvoie la valeur numérique de celle-ci comme résultat. Le plus proche équivalent en PHP est la fonction intval(). Toutefois, le résultat retourné me semble trop restrictif avec des chaînes de caractères ne débutant pas par un nombre. Les expressions rationnelles (ou expressions régulières) permettent de outre passer cette limitation. Pour ce faire, on utilise la fonction preg_match() :

function parseInt($string) {
//	return intval($string);
	if(preg_match('/(\d+)/', $string, $array)) {
		return $array[1];
	} else {
		return 0;
	}
}

echo parseInt("2008");
echo parseInt("soit 99.90 francs");
echo parseInt("www.w3.org");
echo parseInt("300 soldats spartiates");
echo parseInt("du texte brut...");

Ce script affichera comme résultat :
- 2008
- 99
- 3
- 300
- 0


$_SERVER['PHP_SELF'] et injection de code HTML (création site internet)
02`03`2008

Aucun commentairePoster un commentaire !
Tags: PHP XHTML Securite

Cette faille de sécurité n'est pas nouvelle en soit, mais il est parfois bon de faire un petit rappel. De manière générale, ne faites jamais confiance aux variables $_SERVER, $_COOKIE, mais aussi, $_GET, $_POST, $_REQUEST, $_FILES...

Exemple de faille avec <?php echo $_SERVER['PHP_SELF']; ?> dans la page php suivante :

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
   "http://www.w3.org/TR/html4/strict.dtd">

<html lang="fr">
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
	<title>$_SERVER['PHP_SELF']</title>
</head>
<body>
	<form action="<?php echo $_SERVER['PHP_SELF']; ?>" action="post">
		<fieldset>
			<legend>Ma FORM</legend>
			<p><input type="submit"></p>
		</fieldset>
	</form>
</body>
</html>

Si vous appelez la page ci-dessus avec le lien suivant :

http://www.monsite.com/page.php/"><script>alert('Injection!');</script>

vous verrez une belle fenêtre de dialogue Javascript "Injection!" ...

Pour remédier à cette faille de sécurité, pensez à toujours sécuriser vos variables avec une fonction du type htmlentities().


Comment créer une variable CSS - Cascading Style Sheets ?
06`02`2008

4 commentairesPoster un commentaire !
Tags: CSS PHP XHTML

La solution consiste n'ont pas à créer une variable CSS, mais à utiliser PHP pour créer des variables dans le code CSS. Pour ce faire, nous allons utiliser l'écriture simplifiée de
<?php echo $variable_css; ?>   en   <?= $variable_css ?> .


Page page.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
	"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
	
	<title>Variable CSS - Cascading Style Sheets</title>
	<link rel="stylesheet" type="text/css" href="style.php" />
</head>

<body>


<h1>Variable CSS - Cascading Style Sheets</h1>

<p class="color-1">Bloc de couleur n°1 - Variable CSS Cascading Style Sheets</p>

<p class="color-2">Bloc de couleur n°2 - Variable CSS Cascading Style Sheets</p>

<p class="color-3">Bloc de couleur n°3 - Variable CSS Cascading Style Sheets</p>


</body>

</html>


Page style.php et non style.css

<?php
header('Content-Type: text/css');

$color_0 = '#000000';
$color_1 = '#ff0000';
$color_2 = '#ff3300';
$color_3 = '#ff6600';

?>

* { font-family: sans-serif; }

h1 {
	padding: 5px;
	color: <?= $color_0 ?>;
	border: 5px solid <?= $color_2 ?>;
	background-color: <?= $color_3 ?>;
}

p.color-1 { color: <?= $color_1 ?>; }
p.color-2 { color: <?= $color_2 ?>; font-weight: bold; }
p.color-3 { color: <?= $color_3 ?>; font-style: italic; }


PHP 6 sera disponible le premier trimestre 2008 selon Rasmus Lerdorf
23`01`2008

Aucun commentairePoster un commentaire !
Tags: Actualites PHP

La nouvelle version de PHP devrait arriver durant le premier trimestre 2008 (mois de mars ?) selon son créateur Rasmus Lerdorf. L'annonce a été faite au cours du dernier Forum PHP à Paris.

Au menu, nous aurons le support Unicode et les namespaces, de meilleurs performances, toujours plus de sécurité (l'évidence même dirons certains), et... pour d'autres développeurs, une très mauvaise nouvelle: la suppression pur et simple des magic_quotes (l'utilisation de addslashes sera donc de rigueur pour vos requêtes SQL).

En attendant, la version 5.3 ne devrait pas tarder à sortir des cartons de PHP.net

Le chiffre du mois : En décembre 2007, les statistiques de diffusion de PHP 5 dans le monde ne représentaient toujours que 28 % ...


Fonction PHP trim() en JavaScript (prototype, function)
14`01`2008

Aucun commentairePoster un commentaire !
Tags: Javascript PHP

String.prototype.trim = function() {
	return this.replace(/^\s*|\s*$/g, '');
};
Exemple
var v_string = ' Hello World ! ';
document.writeln('"' + v_string.trim() + '"');	// "Hello World !"

PHP 4 s'arrête ! Point final prévu pour le 8/8/8
03`01`2008

Aucun commentairePoster un commentaire !
Tags: Actualites PHP

Le support de PHP4 est désormais arrêté avec la publication aujourd'hui de sa dernière version, la 4.4.8.

Cette nouvelle version, qui parait près de 8 mois après la précédente version, n'apporte pas de corrections majeures (corrections de bugs divers). A compter de ce jour, et ce jusqu'au 8 août 2008, seules des mises à jour de sécurité seront faites.

Source: PHP.net


Fonction PHP count() en JavaScript (prototype, function)
08`12`2007

Aucun commentairePoster un commentaire !
Tags: Javascript PHP

Array.prototype.count = function() {
	return this.length;
}

Exemples

var v_array = [ 5, 10, 15, 20, 25];
document.writeln(v_array.count());  // 5