le format d'une date

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : le format d'une date

Re: le format d'une date

par olvlvl » 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.

Re: le format d'une date

par spacy59 » 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

Re: le format d'une date

par sirakawa » 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

Re: le format d'une date

par damien_55 » 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

le format d'une date

par spacy59 » 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