Cahier de notes

Objectifs

Cette recherche réunit mon expérience de la réalisation de sites en ligne, et des modèles de programmation, afin de me souvenir de mes galères et me faciliter les créations futures.

Je consacre le bas de page au bêtisier du «net» pas net.

Fonctionnement d'un site

Technique client-serveur

Un site est hébergé par un ordinateur, le serveur.
Un navigateur est installé sur un ordinateur individuel, le client.
Le navigateur adresse une demande au site, via le client, puis le serveur.
Le site traite la demande et expédie la réponse au navigateur, via le serveur, puis le client.
Le navigateur affiche le site à l'écran de son ordinateur.

La réponse du site est une succession d'instructions de mise en page et de contenus. Les instructions sont rédigées dans un langage de programmation baptisé html.
Le navigateur utilise les instructions pour l'affichage des contenus.

Cette répartition des tâches est contraignante.
La méconnaître est, pour le concepteur de sites, source d'erreurs.
Il doit savoir que :
- le résultat à l'écran peut varier selon le client et le navigateur;
- si la technique client-serveur implique un dialogue, le site doit envoyer au client les données dont il aura besoin plus tard, avec les questions complémentaires, et faire en sorte que le client les lui renvoie, avec les nouvelles réponses, pour reprendre là où il s'était arrêté.

html

HTML, HyperText Markup Language. Markup signifie balisage. Hypertext fait allusion à des liens, inimaginables dans un texte traditionnel, permettant, entre autres, d'ouvrir d'autres fenêtres, d'afficher des images fixes et animées et de diffuser des sons. L'interprétation de ce langage est une des fonctions du navigateur.

Exemple de ce que reçoit le navigateur



et du résultat, après interprétation



Cet exemple illustre comment le langage html, grâce à des balises, entre <>, permet au navigateur d'afficher la définition du mot résolution.

<p> est une balise indiquant un rectangle et la manière de l'encadrer.
<font> est une balise demandant des caractères rouges.
<b> est une autre balise pour des caractères gras.
<u> est une autre balise pour des caractères soulignés.
<i> est une autre balise pour des caractères italiques.

La règle d'une balise est appliquée à tout le contenu suivant, jusqu'à la balise de fin, </font>, </b>, ...

Cet exemple montre aussi qu'un affichage html, on parle de page html, contient à la fois le contenu et le langage de mise en page.

Cliquer, pour lire les principes d'html, mise en page, balises.

Programmation de site

PHP
Pré Hypertexte Processeur.
Langage de programmation permettant la préparation de pages html.
Les programmes en php sont exécutés sur le serveur.

Modèles de programmation

Nouveaux sites

Tous mes sites récents ont un principe commun et une structure par type de client.

Par principe, la page occupe toute la largeur possible de l'écran, sans débordement, afin d'éviter les déplacements horizontaux insupportables, métros ou glissements.
Les pages conçues pour un oi ont une largeur de 1560 pa et celles pour un asel de 950 pa.

La structure pour un oi comprends trois parties.
Un en-tête, bandeau, menu,
le corps de page,
la devise.

La structure pour un asel comprends une seule page avec des liens pour circuler à l'intérieur et passer d'une page à l'autre.

Pour créer un nouveau site, je modifie la copie d'un existant.

Squelette de programme

Beaucoup de mes appli actuelles mettent à jour des bases de données à 1, ou 2, niveau de table. Par exemple un repas de Régime, niveau supérieur, nive_supe, est composé d'aliments, niveau inférieur, nive_inf.

Par exemple la table des aliments, alim, a 2 champs, alim_nom, la clef, et alim_poin.

Pour disposer d'un squelette facile à adapter, je respecte certaines règles générales.
1)Les noms des champs ne sont pas ceux qu'ils ont dans la table, mais leur position dans la table et le niveau de celle-ci, en prévision des màj à 2 niveaux.
Pour alim, 2 champs, j'utilise clef_prim_nive_infe, champ1_nive_infe, champ2_nive_infe.
Je concentre le lien avec la table réelle dans les requêtes sql. L'utilisation de noms génériques, ailleurs, facilite grandement la création du programme.
2)Pour créer un aliment, je dois préciser son nom, clef primaire. Pour modifier et supprimer un aliment, il faut d'abord la sélectionner.
La sélection a lieu en 2 temps. La filtration puis le choix. La filtration consiste à préciser des chaînes de caractères et de réduire la liste des possibilités aux enregistrements qui les contiennent. Le choix peut être opéré en cochant une option, par la technique select/option de html. La clef primaire de la table apparaît, dès lors 2 fois. Sous forme de liste d'options, pour le choix, et de champ de formulaire pour saisir un code ou un filtre.
3)La sélection est déclenchée par le bouton sele_nive_infe. La filtration est systématique, sur base du contenu des 2 champs. Le choix est déclenché par la présence d'une clef_prim_nive_infe. Cette clef existe si j'ai choisi une option, ou si la filtration ne laisse qu'un enregistrement. Le programme regi_v2_alim.php est un bon modèle pour une màj à 1 niveau. regi_v2_repa.php convient bien pour les màj à 2 niveaux.

Modules de programmation

Un programme est un assemblage de modules, le plus souvent récurrents. Par exemple, l'image légendée, les images côte à côte, ...

Pour me faciliter l'existence, je réunis les modules dans une page, avec exemple concret et possibilité de copie du code.

Modules de programmation

Arreu arreu bele bele

Le journal des conneries

J'hésitais, jusqu'à présent. J'avais bien relevé des tas d'anomalies, depuis ces dizaines d'années de réalisations de sites, mais pas au point d'en faire une anthologie. En ce 21 décembre 2022, je constate un changement qui me convainc de passer à l'acte.

Il était un petit navigateur

Un sosie fera bien l'affaire
Je programme un lien a href='https://yvesdelehaye.eu/note_v2_gere2.php' où gere2 est une erreur. gere2 n'existe pas. Par contre, gere existe.
Dans ce cas, Chrome enchaîne, comme si rien n'était, avec gere.
Bravo pour l'insécu et évitons les quasi homonymes.

target='_blanck'
Depuis toujours, j'utilise le paramètre target='_blanck' pour ouvrir un site dans un nouvel onglet. Sans doute avais je copié cette orthographe étonnante, je ne sais plus où. Toujours est il que ça marchait très bien, jusqu'à aujourd'hui. Depuis ce matin, 21/12/22, je constate que ça ne fonctionne plus et qu'il faut remplacer blanck par blank. Pourquoi les informaticiens surréalistes de Chrome ont ils décidé, subitement, de ne plus tolérer cette faute ?

Nouvelle version de php

Le 9 janvier, je reçois un courriel d'Ionos m'informant que la version de php, 7.4, que j'utilise n'est plus maintenue et que je dois passer à la 8.0, au moins, pour tous mes sites.
Le changement de version est très simple, ce n'est pas le premier, mais celui-ci réserve de désagréables surprises.
En trois mots, erreur, régressions et durcissement.

Boucle while
C'est une faute indiscutable de la part des programmeurs de php. Une boucle vide interrompt, purement et simplement, la suite du programme.

php8_while2.jpg

Avant


php8_while1.jpg

Après





Au début du programme, la page est censée présenter le formulaire vide.
La sélection d'option est vide, comme tout le reste.
En 7.4, avec une boucle vide rien ne se passe, la suite est exécutée normalement et le formulaire apparaît complètement.



















En 8.2, la boucle vide interrompt la suite du programme, avec le résultat visible à gauche.
Pour éviter cette anomalie, il faut s'assurer du nombre d'options à afficher.
Cette modification du programme est, bien entendu, totalement inutile.


La suite n'est pas une erreur mais d'une utilité discutable.

Opérateur mathématique
En 7.4, $A * $B ne pose aucun problème. Si les variables n'existent pas, le programme ignore l'opération.
En 8.2, il faut s'assurer que les variables sont numériques avant de faire exécuter l'opération. Dans le cas contraire, php interrompt le programme par une fin anormale.

Syntaxe des noms de variables
En 7.4, php traite indifféremment $_POST[nom] et $_POST['nom'].
En 8.2, les apostrophes prévues officiellement sont exigées. Dans le cas contraire, php interrompt le programme par une fin anormale.

Vecteurs alphabétiques
En 7.4, php traite indifféremment array(A,B,C) et array('A','B','C').
En 8.2, les apostrophes prévues officiellement sont exigées. Dans le cas contraire, php interrompt le programme par une fin anormale.

Erreur d'insertion dans une base de données
En 7.4, le programme commande une insertion et reçoit une confirmation, négative si l'enregistrement existe déjà.
En 8.2, php interrompt le programme par une fin anormale. Il faut donc programmer deux accès à la base de donnée. Il faut 1° s'assurer de l'inexistence avant de 2° commander l'insertion. Procédure totalement injustifiée.

Avertissement d'absence de variable
En 7.4, $_POST['nom'], ou $_GET['nom'], ou $_COOKIE['nom'], inexistant n'entraîne aucune réaction.
En 8.2, php avertit par un message sybillin, à propos d'un vecteur indéfini, undefined array 'nom'. Il faut donc programmer un test d'existence de ces variables, par un isset(), avant de tester leurs valeurs. Procédure totalement injustifiée.

Haut

T.M.

L'homme ne peut que garder les pieds sur Terre. Malheur à lui si Terre ne le supporte plus !