|
 Posté le 10/12/2011 @ 12:20 |
Astucien
| Bonjour,
Dans un formulaire, je récupère une date qui peut être de différent format : "10 décembre 2011", ou "10 DECEMBRE 2011", ou "avant le 10 decembre 2011", ou "après le 10 décembre 2011", ........... Soit dit, de différent format selon la saisie. Je voudrais récupérer uniquement le mois saisie, et l'enregistrer dans ma base sur 3 lettres. Donc, si décembre, j'enregistre DEC. Si Janvier, j'enregistre JAN ............. J'ai vu sur le net différentes façons de faire et je suis un peu perdu (str_replace, strpos,ereg, ...).
Quelle serait pour moi la meilleure expression à utiliser (avec exemples ....) ? 
J'ai commencé ceci :
$trouve = array("jan", "fev", "fév", "mar", "avr", "mai", "juin", "juil", "aout", "août", "sep", "oct", "nov", "dec", "déc"); // un tableau contenant diverses expression possible pour le mois
$result = strpos($date_naissance, $trouve); // J'ai trouvé l'expression à remplacer dans ma phrase "$date_naissance"
if $resut == "jan" { $resut = JAN; }
elseif (($resut == "fev") OR ($resut == "fév") ...........
Mais bien sur, ça ne fonctionne pas. Car $result ne me retourne pas une valeur, mais "Array" !!!! 
Comment pourrais-je faire ? 
Merci
|
|
|
|
|
|
Posté le 10/12/2011 à 17:06 |
Maître astucien | Message original par t671
Bonjour,
Dans un formulaire, je récupère une date qui peut être de différent format : "10 décembre 2011", ou "10 DECEMBRE 2011", ou "avant le 10 decembre 2011", ou "après le 10 décembre 2011", ........... Soit dit, de différent format selon la saisie. Je voudrais récupérer uniquement le mois saisie, et l'enregistrer dans ma base sur 3 lettres. Donc, si décembre, j'enregistre DEC. Si Janvier, j'enregistre JAN ............. J'ai vu sur le net différentes façons de faire et je suis un peu perdu (str_replace, strpos,ereg, ...).
Quelle serait pour moi la meilleure expression à utiliser (avec exemples ....) ?
Bonjour,
Avant d'aller plus loin dans ta solution, il est évident qu'il sera difficile de lister tout ce que quelqu'un peut imaginer pour remplir ton formulaire, sans compter les fautes d'orthographe, les lettres oubliées, les majuscules au début, les caractères accentués...
Je préfère, dans ce cas, utiliser une liste déroulante à 3 entrées (jour - mois - année). Au moins la variable récupérée est toujours valide.
Exemple :

@+ |
|
Posté le 10/12/2011 à 18:09 |
Astucien
| y.bli a écrit :
Bonjour,
Avant d'aller plus loin dans ta solution, il est évident qu'il sera difficile de lister tout ce que quelqu'un peut imaginer pour remplir ton formulaire, sans compter les fautes d'orthographe, les lettres oubliées, les majuscules au début, les caractères accentués...
Je préfère, dans ce cas, utiliser une liste déroulante à 3 entrées (jour - mois - année). Au moins la variable récupérée est toujours valide.
Exemple :

@+
Effectivement, j'y avait pensé ! Mais si la saisie doit être "avant 1 janvier 1786", ou "entre avril 1567 ezt décembre 1567", je fais comment ?
Si tu as la sdolution, je suis prenneur ....... 
J'avais pensé à ça, ou équivalent :
$mois1 = jan; $mois2 = JAN; $mois3 = fev; $mois4 = fév; $mois5 = FEV; $mois6 = mar; $mois7 = MAR; // etc ...........
$result = strpos($date_naissance, $mois1);
if ($result !== false) { $mois = JAN; }
$result = strpos($date_naissance, $mois2);
if ($result !== false) { $mois = JAN; }
$result = strpos($date_naissance, $mois3);
if ($result !== false) { $mois = FEB; } .......... 
Le problème c'est que c'est très long, et je pense qu'il y aurait plus simple de mettre les $mois1, $mois2, $mois3, $mois4, .......... dans un Array.
$mois = array("jan", "JAN", "fev", "fév", "FEV", "mar", "avr", "mai", "juin", "juil", "aout", "août", "sep", "oct", "nov", "dec", "déc");
Ensuite, avec une fonction style $result = strpos($date_naissance, $mois[]); => rechercher un des éléments de l'Array dans la chaine de caractère $date_naissance, et le résultat est $mois[xxx].
Mais je ne connais pas bien la manipulation des Array !!!  |
|
Posté le 10/12/2011 à 20:23 |
Maître astucien | t671 a écrit :
Effectivement, j'y avait pensé ! Mais si la saisie doit être "avant 1 janvier 1786", ou "entre avril 1567 ezt décembre 1567", je fais comment ?
Avec ma solution, tu peux toujours ajouter des champs de saisie à cocher: avant, entre, après, date exacte...
Pour l'année, comme il peut y en avoir beaucoup, ça peut être un champ à remplir
@+ Modifié par y.bli le 10/12/2011 20:26 |
|
Posté le 12/12/2011 à 01:19 |
Petit astucien
| La remarque de y.bli paraît pertinente pour assurer l'homogénéité du format des dates. A adapter à ton cas...
Pour ta manip' de tableaux.
<?php
$date_naissance="février"; // exemple d'entrée
$result=""; // Initialisation de $result
$trouve = array("jan", "fev", "fév", "mar", "avr", "mai", "juin", "juil", "aout", "août", "sep", "oct", "nov", "dec", "déc"); // ton tableau initial
// J'ai ajouté le tableau ci-dessous avec les sorties désirées et respectives par rapport au tableau trouve().
$enregistre = array("JAN", "FEV", "FEV", "MAR", "AVR", "MAI", "JUN", "JUL", "AOU", "SEP", "SEP", "OCT", "NOV", "DEC", "DEC");
// On parcourt les valeurs du tableau trouve().
for($i=0;$i<count($trouve);$i++) {
if(@eregi($trouve[$i],$date_naissance)) { // si la valeur du tableau se trouve dans $date_de_naissance
$result=$enregistre[$i]; // on affecte à $result la valeur respective du tableau enregistre(). break; // on sort de la boucle
}
}
echo $result; // affichage de la valeur à enregistrer.
?>
C'est plus court !
*µ* |
|
Posté le 12/12/2011 à 12:32 |
Astucien
| Effectivement, je vais adopter la solution de y.bli.
Et midnightblue, je te remercie , car ma curiosité est comblée !!!! 
A ++  |
|