NoShade.net est en vente — Contactez nous si vous êtes intéressé
Le siteTutoriauxInterviews
icone RSS NoShade.net

Accueil » Tutoriaux » PHP » Chapitre 3.2 : Les fonctions + Dates et heures

Les tutoriaux Php

3.2 - Les fonctions + Dates et heures

Les fonctions

Nous avons vu dans le chapitre précédent comment faire passer des données dans des variables à travers les pages.
Nous allons maintenant nous intéresser aux fonctions de PHP.

Si vous avez bonne mémoire (et il en faut quand même un peu pour apprendre le PHP), nous avons déjà utilisé une fonction dans le chapitre 2.3 sur les conditions. Il s'agit de la fonction isset.

Concrètement, à quoi servent les fonctions?
Nous allons y aller en douceur et commencer par voir les plus basiques et utiles d'entre elles.
Mais sachez qu'il y en a pour tous les goûts :
- Transformer des caractères,
- Découper des phrases,
- Rediriger l'utilisateur à une adresse définie,
- Traiter des formats de dates,
- Récupérer le contenu d'un fichier externe à la page,
- Traiter nos calculs, faire des arrondis, ...

Il nous arrivera de cumuler plusieurs fonctions pour aboutir à certains résultats, ou carrément de créer nos propres fonctions, selon nos besoins. Mais pour ce second point... on en est pas vraiment encore là. ;)

Sachez qu'il existe une liste complète de ces fonctions, si vous voulez y jeter un oeil, il s'agit tout simplement du manuel PHP : http://fr.php.net/manual/fr.
Tapez dans le champ de recherche le nom de la fonction dont vous voulez obtenir des informations.
Vous pouvez également télécharger gratuitement le manuel complet de PHP, en Français sur ce même site.
Pour les utilisateurs de Mac OS X, un widget très pratique à également été crée pour chercher les fonctions PHP, et les afficher directement dans Dashboard, vraiment super utile!

Allez, on commence avec l'une d'entre elles.

include()

Include, à quoi cela vous fait-il penser? Au verbe "Inclure", peut-être? ;)
Hé bien c'est dans le mille! :D
Grâce à la fonction include(), nous allons pouvoir inclure des pages, à l'intérieur d'autres pages!
Je vais plutôt vous faire un petit croquis...

Schema

Voici un site, tout ce qui à de plus banal (ouah, le deuzigne ki tu!!).
- En haut, le nom du site, qui ne bouge jamais quelque soit la page, on l'appelle régulièrement "header" entre développeurs,
- En dessous, un menu, qui éventuellement peut afficher un contenu différent selon la page sur laquelle on n'est, mais qui dans ce cas restera fixe lui aussi,
- Vient ensuite le contenu de la page.

Alors, jusque maintenant, et si vous lisez ces pages, c'est à supposer que vous ne connaissiez pas PHP, et que donc, vous deviez répéter sur toutes vos pages ces trois choses.

Et lorsque vous deviez ajouter une rubrique dans le menu, c'était le drame, il vous fallait refaire des copier/coller dans chacune de vos pages, une galère sans nom, qui vous fera très bientôt regretter de ne pas vous être mis au PHP plus tôt! ^_^

Voici maintenant un autre croquis, qui illustre la structure de la page "index.php" de ce même site :

Schema

Dans notre fichier "index.php", nous avons donc, selon nos trois zones principales :
- Le titre du site qui est statique,
- Une ligne de PHP à la place du menu,
- Quelques lignes de PHP à la place du contenu au centre du site.

Le contenu du menu est placé dans un autre fichier "menu.php".
Le contenu de la page du site, lui, est réparti sous plusieurs fichiers.

Nous allons déjà apprendre à faire des include() simples avant de détailler la méthode utilisée pour intégrer un contenu différent en milieu de page.

Commencez par créer 5 nouvelles pages :
- index.php
- menu.php
- page_accueil.php
- page_produits.php
- page_contacts.php

Nous n'allons pas nous occuper de tout l'aspect graphique du site, nous ne sommes pas là pour cela, si le mini-site que nous allons faire là vous paraît très moche et un peu "noir et blanc", c'est normal, libre à vous de lui créer son petit fichier CSS si cela vous perturbe de trop! ;)

Donc! Le contenu de notre page "menu.php" sera par exemple celui-ci :

<p class="menu">Menu - Accueil - Produits - Nous contacter</p>

Hé oui, puis-que cette simple ligne va venir être "copiée" à l'intérieur du fichier "index.php" une fois que l'on aura déterminé : faire une include() de menu.php.
Nous ajouterons par la suite les liens dans ce menu.

Voyons maintenant le contenu des pages de contenu :
"page_accueil.php" contiendra :

<h1>Accueil du site</h1>
<p>Bienvenue sur notre site!</p>

"page_produits.php" contiendra :

<h1>Produits</h1>
<p>Voici notre gamme de produits.</p>

"page_contacts.php" contiendra :

<h1>Nous contacter</h1>
<p>Voici nos coordonnées.</p>

Maintenant, voyons comment se présente notre page "index.php" :

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
        <title>Le nom du site.com</title>
    </head>
<body>

    <!-- Titre du site -->
<h1>Le nom du site.com</h1>

    <!-- Inclusion du menu -->
<?php
    
include('menu.php');
?>
    <!-- Contenu de la page -->

<?php
    
if(isset($_GET["page"])) // Si il y a une variable $_GET demandant une page
    
{
        if(
$_GET["page"] == 'page_accueil.php'// Si la page demandée est "page_accueil.php"
        
{    include('page_accueil.php');    }   // Alors on l'inclut dans la page

        
elseif($_GET["page"] == 'page_produits.php'// Si la page demandée est "page_produits.php"
        
{    include('page_produits.php');    }    // Alors on l'inclut dans la page

        
elseif($_GET["page"] == 'page_contacts.php'// Si la page demandée est "page_contacts.php"
        
{    include('page_contacts.php');    }    // Alors on l'inclut dans la page

        
else // Sinon ce n'est pas une de ces pages là, on inclut "page_accueil.php"
        
{ include("page_accueil.php"); }
    }
    else 
// Si il n'y a aucune demande de page, c'est que le visiteur vient d'arriver sur le site
    
{
        include(
"page_accueil.php"); // On inclut donc la page d'accueil du site dans le contenu
    
}
?>


    <!-- Fin du contenu de la page -->

</body>
</html>

Ouch!
Voilà, on commence à voir des utilisations bien sympathiques des conditions, et des variables $_GET! ;)>
J'ai essayé de commenter un maximum le code pour que vous compreniez ce qu'il se passe.

Vous avez donc du en déduire que nous allons maintenant devoir créer des liens dans notre menu, contenant des variables $_GET! :)
Ré-ouvrez donc le fichier "menu.php" et ajoutez des liens aux différents noms de rubriques :

<p class="menu">Menu - <a href="index.php?page=page_accueil.php">Accueil</a> - <a href="index.php?page=page_produits.php">Produits</a> - <a href="index.php?page=page_contacts.php">Nous contacter</a></p>

Voilà, c'est tout prêt, essayez donc de cliquer sur les noms de rubriques, tout marche impeccablement bien! :)
Ne reste maintenant plus qu'à remplir le contenu des pages un peu mieux, et à créer une jolie interface, mais bon, le but de ce tutoriel n'est pas celui-ci. ;)

J'espère que vous avez bien compris l'utilité et le fonctionnement de cette fonction include(), si tel n'est pas le cas, relisez cette partie et relisez votre code, c'est très important car celle-ci vous fera gagner un temps considérable lors de la construction de votre site!

Par ailleurs, les plus attentifs auront remarqué que ce script ressemble fortement à celui du chapitre précédent sur les variables $_GET, mais en beaucoup mieux, puisqu'il fait face aux soucis que nous avions alors énumérés! :)

Le script d'inclusion de pages que nous avons vu là est assez simple, et à la mérite d'être sécurisé.
Nous aurions pu par exemple faire en sorte d'inclure n'importe quel fichier, sans détailler chaque pages, mais il faut savoir que cette technique n'est pas sécurisante, elle permet en effet à un visiteur malicieux d'inclure n'importe quel fichier, et de pouvoir ainsi faire exécuter de vilains petits scripts à l'intérieur de votre site!

header()

La fonction header() permet, elle, de rediriger en un clin d'oeil le visiteur sur une page définie.
En html, vous pouviez faire cela, mais avec un délai minimum d'une seconde d'attente.

Nous verrons certainement plus tard un cas concret d'utilisation de cette fonction, je ne me contenterais en attendant que de vous dire comment l'écrire :

<?php
    header
("Location: http://www.adressedusite.com");
?>

Vous pouvez donc rediriger vos visiteurs lorsqu'ils effectuent une action précise, ou simplement insérer cette simple ligne de code dans un fichier "index.php", que vous déposez dans le dossier "images" de votre serveur, pour pas qu'ils ne fouillent dedans. :)

round(), ceil() et floor()

Ces trois fonctions aux noms un peu tordus vont nous servir lorsque nous aurons à calculer des moyennes ou pourcentages de chiffres par exemple.
Si vous calculez par exemple dans une liste de jeux vidéos, le nombre de jeux Playstation et le nombre de jeux Nintendo que vous avez, et que vous souhaiteriez faire un pourcentage jeux Playstation / Nintendo. Vous risquez fortement de vous retrouver avec un résultat du genre "32,678765456898765 jeux Nintendo"... Ce n'est peut-être pas nécessaire, non? ;)

Voyons ensemble comment arrondir ce résultat, au nombre supérieur, inférieur, ou à X chiffres près.

En PHP, les virgules des nombres ( , ) sont donc des points ( . ), tout simplement comme en Anglais! :)
<?php
    $pourcentage 
'32.678765456898765';

    echo 
'Pourcentage : ' $pourcentage '<br />';
    echo 
'Arrondi au supérieur : ' ceil($pourcentage) . '<br />';
    echo 
'Arrondi au inférieur : ' floor($pourcentage) . '<br />';
    echo 
'Arrondi sans virgule : ' round($pourcentage) . '<br />';
    echo 
'Arrondi a 2 chiffres après la virgule : ' round($pourcentage2);
?>

Ce code retournera donc :

Pourcentage : 32.678765456898765
Arrondi au supérieur : 33
Arrondi au inférieur : 32
Arrondi sans virgule : 33
Arrondi a 2 chiffres après la virgule : 32.68

On écrit donc le nom de la fonction à utiliser, puis on entoure la valeur à traiter avec des guillemets (ici, la valeure est contenue dans une variable).
Dans le cas de la fonction round(), nous pouvons préciser le nombre de chiffres après la virgule que l'on souhaite, dans ce exemple, il a été fixé à deux chiffres après la virgule. On appele cela une "option" de la fonction.

Bon, je suppose que certains d'entre vous n'accrochent pas trop à cette partie, elle doit vous rappeler vos plus horribles professeurs de mathématiques, et les longues heures d'attente à gribouiller sur des feuilles blanches...
Certains vous auront peut être dit "Le code, c'est que des maths", je dirais que c'est un peu faux quand même, en réalité on ne fait de calculs en PHP qu'assez rarement, vous le verrez (à moins bien sûr de coder un système de gestion comptable... bref).

htmlentities()

La fonction htmlentities() (quel nom étrange), va beaucoup nous servir à partir du moment où nous attaquerons le chapitre sur les bases de données.
Elle à pour effet de transformer les caractères spéciaux tels que les accents ou les signes spéciaux en caractères HTML. Voici quelques exemples :

é deviendra &eacute;
à deviendra &agrave;
> deviendra &gt;
< deviendra &lt;
& deviendra &amp;
© deviendra &copy;

Nous appliquerons donc cette fonction à toutes nos variables $_POST et $_GET prochainement, non pas pour faire joli, mais tout simplement par sécurité.
Nous en reparlerons en temps voulu, une fois que vous aurez écrit vos premières requêtes MySQL pour que vous compreniez mieux. :)

time()

La fonction time() retourne l'heure actuelle en secondes depuis le 1er Janvier 1970, soit le début de l'époque UNIX.

Essayez donc d'afficher cette heure grâce à cette simple petite ligne de PHP :

<?php
    
echo time();
?>

Il en retournera donc un nombre de 10 chiffres, aussi appelé "Timestamp UNIX", qui ne sera jamais le même si vous rafraîchissez votre page, en effet, si vous avez bien suivi, ce nombre augmente d'une unité à chaque secondes qui s'écoulent.

Par exemple, à l'heure où j'écris ces lignes, le timestamp actuel est :

1156860260

Vous devez vous demander à quoi pourra bien servir ce nombre farfelu!?
En fait, par exemple si nous construisons un module d'actualités pour un site Internet, on enregistrera dans notre base de données, en plus du titre et du contenu de l'actualité en question, ce nombre là, qui définira sa date de mise en ligne.
Nous traiterons ensuite ce nombre grâce à PHP pour en tirer une date compréhensible par tous les lecteurs, en jours, mois, année, heures, minutes et secondes, et c'est justement le sujet de la seconde partie de ce chapitre! :)

Dates et heures

Nous allons maintenant apprendre à traiter une date au format Timestamp, pour demander à PHP de nous retourner une date réelle, au format jours/mois/année, heure:minutes:secondes.

Nous allons pour cela utiliser une nouvelle fonction : date().
C'est cette fonction qui permettra justement de transformer un Timestamp en date normale, du calendrier.

Reprenons pour cet exemple le Timestamp de tout à l'heure : 1156860260.

<?php
    $timestamp 
1156860260;

    echo 
date('d m Y'$timestamp);
?>

Ce qui retournera une fois traité par PHP :

29 08 2006

Pfiou! Dans quoi on s'embarque encore là?
Non, en fait, vous le verrez, on s'y fait vite, c'est pas si compliqué que ça!

Les lettres 'd m Y' définissent les formats de dates que l'on souhaite récupérer de notre Timestamp.
En voici quelques uns, les plus couramment utilisés :

d = Le jour du mois en deux chiffres, du 01 au 31
j = Le jour du mois sans le zéro devant, soit du 1 au 31
m = Le mois, du 01 au 12
n = Le mois, sans le zéro devant, soit du 1 au 12
Y = L'année en quatre chiffres, par exemple 2006
G = L'heure au format 24h, sans le zéro devant, donc de 0 à 23h
i = Minutes, soit de 00 à 59
s = Secondes, de 00 à 59

Cette liste n'est bien sur pas exhaustive, ne les retenez pas toutes, allez plutôt sur la page du manuel PHP sur la fonction date() où un tableau vous présentera toutes ces possibilités.

Bon, maintenant, on veut afficher la date comme ça :

29/08/2006 - 16 heures 04 minutes et 20 secondes

Là, il va falloir faire un truc un peu spécial, en effet, certaines lettres contenues dans les mots "heures", "minutes" et "secondes" donneront comme indication à PHP de nous retourner des formats de dates, et ça risque d'être un peu catastrophique...essayez toujours, vous verrez par vous-même! :D

Deux solutions s'offrent à nous.
La première consiste à demander à afficher l'heure (lettre "G"), à fermer notre fonction date(), à séparer cela du mot "heures" avec la concaténation, et ainsi de suite...

<?php
    $timestamp 
1156860260;

    echo 
date('d/m/Y - G'$timestamp) . ' heures ' . date('i'$timestamp) . ' minutes et ' . date('s'$timestamp) . ' secondes';
?>

C'est toute de même assez lourd, même si ce n'est pas faux.
Nous allons nous rappeler de ce que l'on disait lorsque l'on à appris à parer le problème des apostrophes/guillemets, à savoir de placer un antislash ( \ ) devant un caractère dont nous ne voulions pas que PHP se soucie (on appelle cela "échapper un caractère").

<?php
    $timestamp
= 1156860260;

    echo
date('d/m/Y - G \h\e\u\r\e\s i \m\i\n\u\t\e\s \e\t s \s\e\c\o\n\d\e\s', $timestamp);
?>

PHP retournera exactement la même chose, le code est différent, un peu moins long, c'est à voir selon ce que vous voulez obtenir, et comment vous préférez coder. :)

Si vous avez bien tout compris ce que nous avons dit, vous en déduirez donc facilement que, pour afficher l'heure actuelle sous la même forme, nous remplaceront tout simplement la valeur de la variable $timestamp par la fonction time(). ;)

Maintenant, vous vous demandez certainement "Et si je veux afficher le mois en Français?".

Là, c'est un peu plus compliqué.
Il va vous falloir pour cela créer votre propre fonction, à appliquer par dessus la fonction date(), pour transformer par exemple "1" en "Janvier", "2" en "Février" etc... Nous en parlerons dans le chapitre sur les fonctions où nous prendrons ce cas pour exemple.

Là encore, pour les utilisateurs de Mac OS X, je vous recommanderais un widget pour Dashboard très pratique, qui se nomme "Make My Day" et qui se télécharge ici.

Nous allons nous arrêter là pour ce qui est des dates et heures en PHP, et voir maintenant les Array.

Par : Legibe & Vinchz, le 5 septembre 2006

Sommaire du cours PHP

» Sommaire
» 1.1 Avant propos
» 1.2 Que faut'il pour faire du php?
» 2.1 Écrire du texte en PHP
» 2.2 Les commentaires, les variables et les calculs
» 2.3 Les conditions
» 2.4 La concaténation + Évaluation
» 3.1 Transmission de données
» 3.2 Les fonctions + Dates et heures
» 3.3 Les Arrays (tableaux) + les boucles
» 4.1 Les bases de données
» 4.2 Lecture dans une BDD
» 4.3 Enregistrer dans une BDD
» 4.4 Modifier le contenu d'une table
» 4.5 Supprimer du contenu dans une BDD
» 4.6 Statistiques
» 5.1 Les sessions et cookies
» 5.2 Exercice : Un système de login multi-membres