8797 sujets

Développement web côté serveur, CMS

Après avoir bien cherché dans la FAQ et sur les posts existants, je n'ai rien trouvé sur le formattage des variables en PHP.

Je m'explique : j'ai une liste d'adhérents pour laquelle les infos n'ont pas forcément été saisie avec la bonne casse (NOM), les bons espaces (n° de tél), etc ...
Je n'arrive pas à trouver un lien ou une petite aide pour arriver à transformer ces variables, et les afficher correctement.

Merci
Pour la validation de données côté serveur, tu peux utiliser les fonctions pcre (Perl Compatible Regular Expressions).

preg_match() entre-autres. La difficulté sera de trouver un bon motif de validation.

Il existe de bons tutos. Fais une recherche sur "expressions régulières" ou "regex"
Merci de ta réponse, mais est-ce une bonne solution de modifier les données directement sur le serveur plutôt que de les aranger lors de l'affichage ?

Par exemple pour afficher une date, conservé sur le serveur au format aaaa-mm-jj et affichée pour plus de lisibilité : jj-(mois en lettre)-aaaa.

Il me semble que conserver les données dans leurs formes la plus brute sur le serveur est intéressant, quitte à les modifier lors de l'affichage (si c'est possible !)

N'y connaissant pas grand chose encore, je ne fait que poser des questions qui pourront paraître absurdes, mais formatrice ... j'éspère.

Benjamin
ça dépend.

Par exemple pour un nom, tu as tout intérêt à le corriger côté serveur avant de le stocker.

Par contre pour une date, c'est vrai que ce serait mieux de le faire à l'affichage.

Mais dans les deux cas ça peut se faire côté serveur Smiley smile
Mieux vaut tout uniformiser dès l'insertion dans la BDD.
Pourquoi ? Parce que si on le fait à l'insertion, ça ne se fera qu'une fois, alors que si on le fait à l'affichage, ça se fera... à chaque affichage Smiley smile

Pour la date vaut mieux le format SQL DATE parce c'est optimisé pour, et que ça permet beaucoup d'opérations directement dans la requête d'affichage.


PS: Toutes mes excuses si tu n'utilises pas de base de données basé sur SQL Smiley cligne
Perso pour les dates je prends un timestamp (donc un INT) tout con sous mysql. On peut ensuite le transformer en date lisible via la fonction date() de PHP.
Pour créer une date avec un format corret tu peux utiliser la fonction time() ou mktime(). Je te laisse checker la doc.

Pour le reste de tes données, moi aussi je préfère uniformiser avant de stocker, mais ça dépend aussi des données. Un peu plus de précisions sur ton prob seraient donc les bienvenues Smiley smile
Il s'agit d'une liste d'adhérents, avec donc les noms en majuscules, les prénoms avec une majuscule au début, des numéro d'adhérents (xxx-xxx-xxx), des numéros de tél, et des dates de naissance.

Je suis allé voir les fonctions preg_match : les test sur les adresses e-mail par exemple marchent très bien.

Je suis en train de chercher comment forcer l'enregistrement en majuscule, avec juste une majuscule sur la première lettre, (ou après un tiret), et comment forcer l'affichage d'un tirer par exemple après 3 chiffres (n° d'adhérents de la forme xxx-xxx-xxx).

D'après ce que j'ai pu lire sur les divers tutoriaux/sites, je fais une première batterie de test en javascript pour que l'utilisateur n'ai pas à tout retaper en cas d'erreurs, et je refais les tests en PHP (preg_match) côté serveur pour être sûr que tout est bien entré (même pour ceux ayant désactivé javascript).

Merci de votre aide,
Benjamin
Bepimaco a écrit :
- - - - - -
Je suis en train de chercher comment forcer l'enregistrement en majuscule, avec juste une majuscule sur la première lettre, (ou après un tiret), et comment forcer l'affichage d'un tirer par exemple après 3 chiffres (n° d'adhérents de la forme xxx-xxx-xxx).
- - - - - - -


La première d'un texte en MAJ : $nom = ucfirst($nom);

La première de tous les mots en MAJ : $nom = ucwords($nom);

Le tiret : le plus simple est que le numéro d'adhérent soit directement généré au bon format.

S'il est généré sous forme xxxxxxxxx il faut découper : faire une boucle avec substr() par ex et concaténer avec insertion d'un tiret.

S'il est généré avec un caractère intercalaire autre xxxgxxxgxxx faire un ereg_replace().
Merci beaucoup pour tes réponses, elles me font avancer à grand pas.

Encore un petit truc (je suis pointilleux je sais, mais j'espère que ça pourra aussi aider d'autre personnes, j'ai pas trouvé de réponses sur Internet !)

Le numéro d'adhérent se compose donc des 3 fois 3 chiffres. Est-il possible de faire un peu comme le formulaire d'activation de Windows, c'est à dire que dès que 3 chiffres ont été entrés dans un premier textarea, le curseur se déplace tout seul vers un 2 ème, puis un troisième. Comme ça après, y'a plus qu'à faire un concaténation, et la saisie est "aidée" puisque destinée à des utilisateur non informaticiens.

Merci de votre aide
On peut faire cela avec un javascript : tester chaque "input type="text" " et donner le focus au suivant quand le premier a reçu le nombre de caractères demandé.

Mais le plus simple est de faire 3 "input type="text" " qui se suivent, chacun ne pouvant contenir que 3 caractères.

Cela fonctionnera même si javascript est désactivé.