Pour partager cette vidéo sur les réseaux sociaux ou sur un site, voici son url :
Sujets que vous pourriez aussi aimer : 
Opérations sur les dates en PHP 
Dans cette 
formation Php , nous proposons de découvrir les subtilités de manipulation des informations de type 
date . Nous avions déjà utilisé la 
fonction Php date  mais dans sa version la plus simple. Aujourd'hui, nous allons découvrir quelles possibilités sont offertes pour les besoins de sites Internet. Et à ce titre, nous proposerons une mise en pratique fort utile. Elle consistera à 
uploader sur le serveur des fichiers image , tout en leur attribuant des noms explicites et forcément uniques. L'enjeu consiste à préserver l'intégrité des fichiers proposés, pour ne pas risquer de les écraser au fur et à mesure des 
upload .
Sources et présentation de la problématique 
Comme toujours, nous proposons de débuter les manipulations depuis des sources proposées au téléchargement depuis le 
site bonbache.fr .
La décompression conduit au 
fichier index.php  de la page Web principale. Elle est accompagnée de ses ressources externes dans les sous dossiers.
Double cliquer sur le sous dossier commun  pour afficher son contenu, 
Vous y trouvez les 
parties communes  développées en 
Php  dans des fichiers externes. Nous avions mis en place et démontré l'intérêt de ce procédé dans une précédente formation afin d'
optimiser la construction des pages d'un site Web . Les appels sont réalisés grâce à la 
fonction Php include . Nous le constaterons bientôt.
Revenir à la racine du dossier de décompression, 
Puis, double cliquer sur le sous dossier photos  pour afficher son contenu, 
Vous constatez la présence de quelques images. Elles serviront de tests pour nos tentatives d'upload avec identifications uniques.
Pour réaliser les actions nécessaires à la découverte de la 
manipulation des dates en PHP , nous devons émuler notre projet. Et pour l'émuler, comme nous l'avons appris dans les formations précédentes, nous devons le référencer dans 
EasyPhp .
Il s'agit dans un premier temps de prélever son adresse depuis l'explorateur Windows. Puis, dans 
EasyPhp , il convient de l'ajouter par le 
bouton add directory . Dès lors, il faut lui attribuer un nom dans la zone 
working directory name  et coller son adresse dans la zone 
working directory path . Enfin, il ne reste plus qu'à cliquer sur le 
bouton Save .
Désormais, il ne nous reste plus qu'à cliquer sur son lien sur l'interface pour accéder à sa page d'accueil, soit celle du 
fichier index.php .
Comme vous le remarquez, notre interface Web propose des 
contrôles Html  pour interagir avec l'internaute. Ainsi, on note la présence d'une 
zone de texte  pour attribuer un nom à la photo. On note également la présence d'un 
contrôle Html de type File  pour proposer un fichier placé sur le disque dur local, celui de l'internaute qui se connecte au serveur. Enfin, le 
bouton Envoyer  permet de soumettre les données. En effet, comme vous le savez et comme nous l'avons appris, toutes les informations à transmettre au serveur doivent être encapsulées dans un 
formulaire Html . Nous allons constater tout cela.
A la racine du dossier de décompression, cliquer avec le bouton droit de la souris sur le fichier index.php , 
Dans le menu contextuel, choisir de l'ouvrir avec un éditeur tel que le Notepad++, 
Tout d'abord vous notez les imbrications de code par appel des parties communes en entête grâce à l'
instruction Php Include .
<?php 
Ensuite, à partir de la ligne 29 pour un éditeur Notepad, vous notez l'imbrication des contrôles destinés à l'internaute, encapsulés dans un 
formulaire Html .
...<form id="formulaire" name="formulaire" enctype="multipart/form-data" method="post" action="index.php">  
Celui-ci possède l'
identifiant formulaire . Sa méthode de soumission est 
Post  pour ne pas passer par l'Url. La page de réception est l'actuelle page de développement, soit 
index.php . Nous réaliserons donc des allers-retours serveur plus communément connus sous le nom de 
PostBack .
Vous notez de même la présence de son attribut tout à fait particulier 
enctype . Il est indispensable pour transmettre des données riches tels que des fichiers multimédias, donc pour l'
upload de photos .
Plus bas dans le code, à partir de la ligne 43 pour un éditeur Notepad, figure la section qui nous intéresse pour commencer.
... 
Ces deux calques d'identifiants respectifs 
colonne_gauche  et 
colonne_droite  représentent les deux cadres de la partie centrale de la page Web. Nous allons les exploiter pour coder nos premières instructions à la découverte de cette fameuse 
fonction date .
La fonction Php date 
Nous l'avions découverte lors de la première 
formation pour débuter la programmation en Php . Elle ne requiert qu'un seul paramètre. Mais les variantes de cet attribut sont nombreuses. Et selon cette valeur, le format de la date retournée peut changer du tout au tout. Nous proposons dans un premier temps de la répliquer telle que nous l'avions apprise.
Dans le premier calque d'identifiant colonne_gauche , créer la section de code Php  suivante : <?php 
Enregistrer les modifications et basculer sur le navigateur, 
Rafraîchir la page Web à l'aide de la touche F5 du clavier , 
Comme vous le constatez, la date du jour dynamique apparaît en effet dans sa forme la plus simple.
La valeur de l'attribut passé en paramètre a donc une incidence directe sur le format de sortie de la date produite par la 
fonction date . Nous allons le constater en réalisant quelques ajustements.
Revenir dans l'éditeur de code de la page Web, 
Dans la fonction date , remplacer le y minuscule  pour Year par un Y majuscule , 
Enregistrer les modifications et basculer sur le navigateur, 
Rafraîchir la page Web à l'aide de la touche F5 du clavier , 
Vous remarquez que nous avons ainsi augmenté la richesse de l'information sur l'année de la date. Elle s'affiche désormais dans sa version longue.
De la même façon, si nous passons le jour et le mois en majuscules 
date("D/M/Y") , nous obtenons les informations sous forme de texte anglais contracté (ex. Mon/Sep/2018). Mais dès lors, il manque la précision sur le jour exacte, son numéro dans le mois.
Adapter les attributs de la fonction date comme suit : date("D d/M/Y") , 
Enregistrer les modifications et basculer sur le navigateur, 
Rafraîchir la page Web à l'aide de la touche F5 du clavier , 
Nous obtenons l'information précise sur la date. Il s'agit d'ailleurs des mêmes techniques, à quelques détails près, que celles que nous exploitons dans les formats de date Excel pour enrichir l'information.
Nous pourrions aussi modifier sa forme en remplaçant les slashs par des tirets (date("D d-M-Y")). Si nous remplacions le 
D majuscule  par un 
F majuscule , nous obtiendrions le mois complet en texte anglais 
date("d F/M/Y") : 13 September/Sep/2018 .
Il est même possible d'atteindre la précision sur l'heure, les minutes et les secondes grâce aux attributs respectifs 
h, i et s  à mentionner à la suite dans la fonction.
Modifier l'attribut de la fonction date comme suit : date("d F/M/Y - h:i:s") , 
Enregistrer les modifications et basculer sur le navigateur, 
Rafraîchir la page Web à l'aide de la touche F5 du clavier , 
Si nous remplaçons le 
h minuscule  par un 
H majuscule , c'est l'horloge de 24H qui est considérée et non celle de 12H, comme sur l'exemple illustré par la capture. Le 03 de 3 heures serait remplacé par le 15 pour 15 heures.
Nous n'allons pas passer en revue toutes les déclinaisons d'attributs qu'il est possible de construire pour obtenir des formats de date et d'heure spécifiques. L'extrait de code ci-dessous, à tester dans un navigateur, offre un résumé plutôt concis :
echo("<br /><br />Matin ou après midi : <br />"); 
Opérations sur les dates 
Les opérations sur les dates, comme les comparaisons notamment, ne sont pas si triviales que cela en revanche. Finalement, la variable stockée n'est autre qu'une chaîne de texte dont on peut manipuler l'aspect. Nous allons devoir exploiter une 
fonction Php  capable de convertir explicitement la chaîne en objet de date pour la manipuler.
Passer l'instruction de test echo précédente en commentaire, 
En dessous, déclarer deux dates au format date, comme suit : $date1 = "19/11/2018"; $date2 = "18/12/2018"; 
La première est donc une date antérieure à la seconde. Nous souhaitons les comparer avec une 
instruction conditionnelle If que nous avions apprise en Php , pour aboutir à cette conclusion.
Après la déclaration de variables, ajouter le test suivant : if($date1>$date2) 
Enregistrer les modifications et basculer sur le navigateur, 
Rafraîchir la page Web à l'aide de la touche F5 du clavier , 
Comme vous le remarquez, la conclusion entreprise en 
PHP  est erronée. La comparaison entre les deux dates a échoué. La raison est simple. 
Php  n'a pas comparé deux dates mais deux chaînes de texte.
Nous devons donc exploiter une 
fonction Php  capable de convertir une chaîne de caractères pour l'interpréter comme une date et ainsi réaliser les comparaisons. Cette 
fonction  se nomme 
strtotime . Littéralement elle signifie texte (str) en (to) date (time).
Revenir dans l'éditeur de code et adapter l'instruction conditionnelle comme suit : $date1 = "19/11/2018"; $date2 = "18/12/2018";strtotime( $date1) >strtotime( $date2) ) 
Enregistrer les modifications et basculer sur le navigateur, 
Rafraîchir la page Web à l'aide de la touche F5 du clavier , 
Cette fois, comme vous le constatez, les dates sont inversées. Elles ont correctement été comparées.
Il est même possible de calculer la 
différence entre deux dates  et de choisir la forme du résultat, en nombre de jours par exemple. Pour cela, il faut exploiter la 
fonction Php date_diff . Mais pour son calcul, elle requiert que les dates soient explicitement déclarées comme des 
objets de type date , grâce à la 
fonction date_create . De plus, ces dates doivent être passées au format anglais (Année/Mois/Jour).
Revenir dans l'éditeur de code de la page Web, 
Après l'instruction conditionnelle, ajouter les lignes Php suivantes : $date1 = date_create("2018/11/19"); $date2 = date_create("2018/12/18"); 
Comme vous le constatez, la 
variable $interval  est convertie en objet de programmation, du fait de son affectation par la 
fonction date_diff . Et dans la 
syntaxe Php , nous n'utilisons pas le point (.) pour appeler les propriétés et méthodes de l'objet, comme en 
Javascript . Il s'agit du tiret suivi du symbole supérieur (->). C'est ainsi que nous appelons la 
propriété format  de l'
objet $interval . Cette dernière, selon les attributs qui lui sont passés, permet d'ajuster la mise en forme de la différence calculée (En nombre de jours ici).
Enregistrer les modifications et basculer sur le navigateur, 
Rafraîchir la page Web à l'aide de la touche F5 du clavier , 
Comme vous le remarquez, le calcul de la différence réalisé par notre 
code Php  est tout à fait juste.
Nommer les fichiers de façon unique 
L'enjeu pour un 
site Web dynamique  consiste à pouvoir proposer de nouvelles rubriques, régulièrement agrémentées de fichiers comme des images. Le risque est qu'un même nom soit attribué à un fichier déjà uploadé sur le serveur. Dans ce cas, l'image est écrasée et l'illustration de la rubrique ne correspond plus. Cet enjeu est d'autant plus important pour un 
site Internet  qui propose à ses membres d'enrichir le contenu par Upload. La solution consiste donc à attribuer un nom de fichier forcément unique avant l'envoi et l'inscription en base de données. C'est tout naturellement la 
fonction Php date  qui va nous aider à atteindre ce but.
Nous proposons de prélever le titre donné par l'internaute dans un premier temps. Nous devons purger la chaîne des espaces et accents. Puis, nous proposons de lui additionner un suffixe unique comprenant la date complète détaillée jusqu'à la seconde précise de l'action. Pour purger cette chaîne, nous proposons d'exploiter un code existant, dans un fichier externe situé dans le 
sous dossier local fonction . Ce fichier se nomme 
traitement_chaine.php . Deux 
fonctions  sont offertes.
La première (supprAccents) supprime les accents. La seconde (supprSpeciaux) remplace les caractères spéciaux, problématiques dans les noms de fichiers.
Nous nous contentons ici de les exploiter sans approfondir les explications. Nous devons nous concentrer sur l'objectif principal. Dans un premier temps, il s'agit d'ajouter la référence à ce fichier externe en entête de code. Ainsi, nous pourrons appeler et exploiter ses fonctions.
Revenir dans l'éditeur de code de la page Web, 
Tout en haut du code, dans la section Php, ajouter l'imbrication suivante : <?php include("fonction/traitement_chaine.php");  
Comme nous l'avons démontré précédemment, les fichiers multimédias sont proposés dans les sources. Ils sont stockés dans le 
sous dossier photos . Nous proposons, après avoir finalisé le 
code Php , de simuler les actions en les uploadant dans le sous dossier images.
Ensuite donc, nous coderons les instructions réceptionnant les valeurs transmises dans le calque de droite, d'
identifiant colonne_droite . Le 
contrôle Html input file  est particulier. On accède à ses valeurs comme dans un 
tableau de variables . L'image est stockée en mémoire sous un nom d'attribut particulier 
tmp_name , auquel il faut accéder.
Dans le calque d'identifiant colonne_droite , ajouter la section de code Php  suivante : ...<?php  
Nous effectuons tout d'abord un test d'existence sur le nom donné à la photo. Il doit être saisi dans le contrôle Html nommé 
titrep . Si sa valeur existe, nous en concluons que l'image a bien été sélectionnée et soumise. Dans ce cas, nous engageons donc le traitement. La 
fonction Php addslashes  est importante pour les bases de données notamment. Elle permet d'ajouter un caractère d'échappement, l'antislash (\), devant chaque apostrophe. L'apostrophe est en effet un caractère spécial problématique pour les noms de fichiers et insertions en base de données. Puis, nous désignons le contrôle Input File par son nom ($_FILES['photo']) et récupérons le nom temporaire de l'image stockée dans la deuxième dimension de ce tableau (['tmp_name']). Nous stockons ce nom de fichier dans la 
variable $nom_photo_tmp . Enfin, nous affichons l'ensemble concaténé à titre de test, grâce à la 
fonction Php echo .
Enregistrer les modifications et basculer sur le navigateur Web, 
Rafraîchir la page à l'aide de la touche F5 du clavier , 
Choisir une image dans le sous dossier photos en cliquant sur le bouton du contrôle Input File , 
Saisir un titre cohérent dans la zone de texte, 
Puis, cliquer sur le bouton Envoyer  pour transmettre ces données, 
Comme vous le constatez, nous parvenons à réceptionner les éléments nécessaires à la manipulation du fichier Multimédia. Ce nom temporaire devra être exploité pour réaliser la sauvegarde finale de l'image sur le serveur.
Mais avant cela, il s'agit de purger le titre pour proposer des noms de fichiers corrects, sans accents et sans espaces notamment. Pour cela, nous allons exploiter les fonctions externes, dont nous avons imbriqué le fichier par la fonction include.
Revenir dans l'éditeur de code de la page Web, 
Avant l'instruction echo, ajouter le traitement suivant : if(isset($_POST["titrep"]))$le_titre = trim(supprSpeciaux(supprAccents(utf8_decode($le_titre))));  
La 
fonction Php trim  permet de supprimer les espaces résiduels situés en début et fin de chaîne. La 
fonction utf8_decode  est exploitée pour interpréter les accents selon le système d'encodage en vigueur de la page Web. Enfin, les 
fonctions supprSpeciaux et supprAccents  sont appelées pour réaliser les traitements que nous avons évoqués. Comme toutes ces fonctions sont imbriquées les unes dans les autres, il s'agit de fermer autant de parenthèses que nous en avons ouvertes. Au final, c'est la 
variable $le_titre  qui subit tous ces traitements en cascade.
Enregistrer les modifications et basculer sur le navigateur Web, 
Comme nous avons précédemment soumis le formulaire (PostBack), il n'est pas possible de rafraîchir la page. Nous devons la recharger.
Cliquer dans la barre d'adresse du navigateur, 
Puis, enfoncer la touche Entrée du clavier  pour la recharger intégralement, 
Choisir une photo, saisir un titre et cliquer sur le bouton Envoyer , 
Comme vous le constatez, nous avons parfaitement réussi à purger le titre. Les espaces ont été remplacés par des tirets. Les accents et l'apostrophe ont disparu. Cette désignation est désormais tout à fait appropriée pour un nom de fichier.
Néanmoins à ce stade, rien ne nous assure qu'un nom exactement similaire ne soit proposé à l'avenir. Nous devons donc le rendre unique en le suffixant d'une information de date, détaillée jusqu'à la seconde près, pour le jour et l'heure en cours.
Pour simplifier la problématique, nous partons du principe que toutes les extensions sont du type.jpg. Mais avec les fonctions que nous avons déjà abordées, notamment 
strripos  pour trouver l'emplacement de la dernière occurrence, ici le point, il serait trivial de considérer n'importe quelle extension.
Revenir dans l'éditeur de code de la page Web, 
Avant l'instruction echo, ajouter le traitement Php suivant : if(isset($_POST["titrep"]))$le_titre = $le_titre.date("y-m-d-h-i-s").".jpg";  
Enregistrer les modifications et basculer sur le navigateur Web, 
Cliquer dans la barre d'adresse du navigateur, 
Puis, enfoncer la touche Entrée du clavier  pour la recharger intégralement, 
Choisir une photo, saisir un titre et cliquer sur le bouton Envoyer , 
Comme vous le remarquez, nous obtenons en effet un nom explicite, suffixé d'une partie codée unique.
Cet upload ou sauvegarde sur le serveur se réalise très simplement grâce à la 
fonction Php Copy , dès lors que tous les éléments sont réunis. Elle requiert en premier paramètre le nom de la photo à copier. Nous l'avons stocké dans la 
variable $nom_photo_tmp . En second paramètre, elle requiert le chemin complet du fichier. Il s'agit du titre unique que nous venons de recomposer, soit de la 
variable $le_titre .
Revenir dans l'éditeur de code de la page Web, 
Puis remplacer l'instruction echo par les deux lignes Php suivantes : if(isset($_POST["titrep"]))copy($nom_photo_tmp, "images/".$le_titre);  
Nous exploitons donc la 
fonction Php copy . Nous n'oublions pas de concaténer le nom du fichier au sous dossier local sur le serveur (images/) pour la copie. Nous en profitons pour vérifier le bon déroulement de l'upload en désignant l'image depuis son nouvel emplacement afin de l'afficher dans une 
balise Html img . Ce traitement est réalisé par concaténation comme toujours.
Enregistrer les modifications et basculer sur le navigateur Web, 
Cliquer dans la barre d'adresse du navigateur, 
Puis, enfoncer la touche Entrée du clavier  pour la recharger intégralement, 
Choisir une photo, saisir un titre et cliquer sur le bouton Envoyer , 
Comme vous le constatez, nous parvenons en effet à restituer la photo uploadée sur le serveur, dans le sous dossier images. Pour en avoir la preuve, vous pouvez cliquer avec le bouton droit sur la photo et choisir Informations sur l'image, dans le menu contextuel. Vous y découvrez le nom unique attribué au fichier à l'emplacement désigné sur le serveur. A l'avenir, c'est ce nom qui devra être exploité pour l'inscription en base de données. Nous serons ainsi en mesure de restituer toutes les informations sur demande internaute, par 
requêtes Sql .