le format d'une date

Eléphanteau du PHP | 11 Messages

19 févr. 2013, 12:35

Bonjour

Je suis en train de creer un formulaire d'inscription ou l'on peut rentrer sa date de naissance sous un format JJ/MM/AAAA

Donc je pensé utilisé un preg_match mais je ne sais pas le faire fonctionner ..

mon motif est celui la : $motif = '#([0-9]{2})/([0-9]{2})/([0-9]{4})$#';

Ce que je cherche a faire est que si l'utilisateur entre un mauvais format de date , un message d'erreur apparaissent

Voici mon code php actuel de mon formulaire

Code : Tout sélectionner

<?php if (isset($_POST['register'])) { extract($_POST); $pseudo = mysql_real_escape_string(htmlspecialchars(ltrim(strip_tags($pseudo)))); $password = mysql_real_escape_string(htmlspecialchars(ltrim(strip_tags($password)))); $email = mysql_real_escape_string(htmlspecialchars(ltrim(strip_tags($email)))); $prenom = mysql_real_escape_string(htmlspecialchars(ltrim(strip_tags($prenom)))); $age = mysql_real_escape_string(htmlspecialchars(ltrim(strip_tags($age)))); $url = mysql_real_escape_string(htmlspecialchars(ltrim(strip_tags($url)))); $motif = '#([0-9]{2})/([0-9]{2})/([0-9]{4})$#'; if (empty($pseudo)) { $erreur[] ="Veuiller saisir un pseudo"; }elseif (strlen($pseudo) > 15) { $erreur[]= 'Votre pseudo ne doit pas contenir plus de 15 caractères'; }elseif (strlen($pseudo) < 3) { $erreur[]= 'Votre pseudo ne doit pas contenir moin de 3 caractères'; } if (empty($password)) { $erreur[] = "Veuillez saisir un password"; }elseif (strlen($password) < 4) { $erreur[] = "Votre password doit contenir au moin 4 caractères"; }elseif (strlen($password) > 10) { $erreur[] = "Votre password ne doit pas contenir plus de 10 caractères"; } if (empty($email)) { $erreur[] = "Veuillez saisir une adresse mail"; }elseif (!filter_var($email,FILTER_VALIDATE_EMAIL)) { $erreur[] = "Veuillez saisir une adresse mail valide"; } foreach ($erreur as $erreurs) { echo "<strong>$erreurs</strong><br/>"; } }else{ echo "Veuillez remplir le formulaire"; } ?>
Donc je voudrait mettre le meme genre de condition.. si la date saisie est differente du motif alors on affiche une erreur

MErci pour ce qui seront m'expliquer cette fonction :D

Mammouth du PHP | 504 Messages

19 févr. 2013, 13:02

Oulala, compliqué ta methode.

Pourquoi ne pas faire 3 listes déroulantes qui tes données dans ta base

1- de 1 à 31
2- De 1 à 12
3- De 1970 à 2000 par exemple

Simple, rapide et valeurs de champ imposé donc pas d'erreurs possibles. :D

Mammouth du PHP | 2278 Messages

19 févr. 2013, 13:09

Oulala, compliqué ta methode.

Pourquoi ne pas faire 3 listes déroulantes qui tes données dans ta base

1- de 1 à 31
2- De 1 à 12
3- De 1970 à 2000 par exemple

Simple, rapide et valeurs de champ imposé donc pas d'erreurs possibles. :D
ça ne tient compte ni des différences de longueur de mois, ni des années bissextiles, et permet la saisie de dates fausses
Heureusement il existe checkdate :
http://www.php.net/manual/fr/function.checkdate.php
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Eléphanteau du PHP | 11 Messages

19 févr. 2013, 13:15

MErci pour ta reponse :)

Moi aussi l'idée est que je n'oblige pas l'utilisateur a entré sa date de naissance

Je n'ai que 3 champs obligatoires et si il sont pas rempli alors une erreur.

Image

la je viens de faire en sorte que si il choisi de mettre l'url de son site alors on verifie la validité

Code : Tout sélectionner

if ($url != filter_var($url,FILTER_VALIDATE_URL)) { $erreur[] = "Veuillez saisir une url valide"; }
maintenant je veut juste verifier que si il choisi de rentré une date donc soit en ecrit soit avec ta méthode verifier que le format est correct

Petit nouveau ! | 6 Messages

20 févr. 2013, 12:41

Plusieurs remarques :

1. Ne fait JAMAIS d'extract sur une source dont tu ne connais pas la provenance. Il suffit qu'un petit malin utilise le nom d'une variable présente dans ton code pour faire n'importe quoi.

2. mysql_real_escape_string(htmlspecialchars(ltrim(strip_tags($pseudo)))); C'est complètement inutile. Utilise "mysql_real_escape_string" lorsque tu souhaite enregistrer la valeur en base de données. Mais je te conseille vivement de te mettre à PDO et d'utiliser les requêtes préparées. Utilise "htmlspecialchars" lorsque tu veux afficher la données sur ta page. "strip_tags" n'a que rarement d'intérêt, surtout si tu utilises "htmlspecialchars" pour échapper les données que tu souhaite afficher. Pourquoi "ltrim" ? Utilise plutôt "trim" sur les chaines de caractères, cela te permettra de te débarrasser des caractères vides en début ET en fin de chaine.

3. Ton motif est correct même si celui-ci serait mieux: "#^(\d{2})/(\d{2})/(\d{4})$#". Si tu veux simplement vérifier le motif tu peux supprimer les parenthèses, elles ne sont utiles que lorsque tu souhaites "capturer" les valeurs. Définir un motif c'est bien, l'utiliser c'est mieux : if (preg_match($motif, $_POST['date_de_naissance'])) ...

4. C'est bien d'utiliser empty(), mais si tu supprime "extract" je te conseille la méthode suivante :
$params = $_POST + array
(
    'pseudo' => null,
    'password' => null,
    'email' => null,
    'prenom' => null,
    'age' => null,
    'url' => null
);

$pseudo = $params['pseudo'];
Comme cela tu n'as pas à t'embêter avec empty() puisque si une clé n'est pas présente dans $_POST, elle sera définie par l'union.