× Plantage du forum 28/03/2023 - Perte de messages - A lire
 > Tous les forums > Forum des Webmasters
 tester et remplacer un mot dans une phraseSujet résolu
Ajouter un message à la discussion
Page : [1] 
Page 1 sur 1
t671
  Posté le 10/12/2011 @ 12:20 
Aller en bas de la page 
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

Publicité
y.bli
 Posté le 10/12/2011 à 17:06 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  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 :

@+

t671
 Posté le 10/12/2011 à 18:09 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
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 !!!

y.bli
 Posté le 10/12/2011 à 20:23 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  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
midnightblue
 Posté le 12/12/2011 à 01:19 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
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 !

*µ*

t671
 Posté le 12/12/2011 à 12:32 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Effectivement,
je vais adopter la solution de y.bli.

Et midnightblue, je te remercie , car ma curiosité est comblée !!!!

A ++

Page : [1] 
Page 1 sur 1

Vous devez être connecté pour participer à la discussion.
Cliquez ici pour vous identifier.

Vous n'avez pas de compte ? Créez-en un gratuitement !
Recevoir PC Astuces par e-mail


La Lettre quotidienne +226 000 inscrits
Avec l'actu, des logiciels, des applis, des astuces, des bons plans, ...

Les bonnes affaires
Une fois par semaine, un récap des meilleurs offres.

Les fonds d'écran
De jolies photos pour personnaliser votre bureau. Une fois par semaine.

Les nouveaux Bons Plans
Des notifications pour ne pas rater les bons plans publiés sur le site.

Les bons plans du moment PC Astuces

Tous les Bons Plans
Lot de 3 malles de rangement Sundis Locker 60L à 32,90 €
32,90 € 70 € -53% @Amazon

Amazon propose actuellement le lot de 3 malles de rangement Sundis Locker 60L à 32,90 € au lieu de 70 €. Avec couvercle et poignées intégrées. Livraison gratuite.


Voir le bon plan
Ventirad Be quiet! Pure Rock 2 à 41,59 € livré
41,59 € 51 € -18% @Amazon Allemagne

Amazon Allemagne propose actuellement le ventirad Be quiet! Pure Rock à 35,58 €. Comptez 6,01 € pour la livraison en France soit un total de 41,59 € livré alors qu'on le trouve ailleurs à plus de 51 €. Une bonne affaire. Il offre un excellent rapport performances/prix avec une efficacité de refroidissement de 150W TDP, quatre caloducs 6mm, un ventilateur Pure Wings 2 120mm PWM et une conception pratique pour un montage depuis le dessus de la carte mère.


Voir le bon plan
Imprimante 3D Creality Ender 3 v2 Neo (nivellement auto, 220x220x250mm) à 209 €
209 € 350 € -40% @Geekbuying

Geekbuying fait une belle promotion sur la toute dernière imprimante 3D Creality Ender 3 v2 qui passe à 209 € avec le code NNNFDV2NEO. On la trouve ailleurs autour de 350 €. L'imprimante est expédiée depuis un stock Europe (en Pologne). Elle sera donc rapide et vous êtes sûr de ne pas avoir de douane. 

La Creality Ender 3 v2 Neo est l'une des machines les plus populaires actuellement sur le marché. Et pour cause. Elle dispose d'un volume d’impression de 220 x 220 x 250 mm, est équipée d'un plateau chauffant inspiré du BuildTak, d'un nouvel écran LCD 4.3 pouces et offre des fonctionnalités pratiques comme le nivellement automatique, la reprise de l'impression après une coupure de courant ou le conduit pour le filament étroit. L'imprimante 3D est facile à assembler. 

Si vous cherchez à vous lancer dans l'impression 3D, c'est l'imprimante qu'il vous faut !


Voir le bon plan
Thrustmaster TCA Sidestick Airbus Edition pour PC à 46,99 €
46,99 € 64,99 € -28% @Amazon

Amazon fait une promotion sur le joystick Thrustmaster TCA Sidestick Airbus Edition qui passe à 46,99 € au lieu de 64,99 € ailleurs. Il s'agit d'un une réplique ergonomique du manche Airbus, type A320/A320 Neo à échelle 1:1. Il dispose notamment d’une structure composée de 12 boutons d’actions ré-assignables pour une multitude de possibilités. La conception de la tête du joystick est à la fois polyvalente et modulaire grâce à ses éléments interchangeables. Avant chaque décollage, ajustez la configuration de votre manche de la manière la plus optimale : commandant de bord, co-pilote ou manche en position centrale pour les vols en avion en solitaire. 


Voir le bon plan
Boitier PC Corsair 4000D Airflow avec fenêtre à 104,80 €
104,80 € 139 € -25% @Cdiscount

Cdiscount fait une promotion sur le boitier PC Corsair 4000D Airflow avec fenêtre à 104,80 € au lieu de 139 € ailleurs. Ce boitier moyen Tour propose un câble management optimisé afin de favoriser un montage propre et rapide. Les câbles ne gênent pas la circulation du flux d'air et l'aspect visuel reste soigné. 2 ventilateurs inclus permettent un refroidissement parfait de la tour et de ses composants. En outre, les emplacements supplémentaires pour ventilateurs et systèmes de watercooling AIO offrent une grande polyvalence ainsi qu'une belle évolutivité au boîtier. 


Voir le bon plan
Tournevis de précision (61 pièces, informatique, électronique, téléphone, console) à 14,97 €
14,97 € 29 € -48% @Geekbuying

Geekbuying fait une promotion sur le coffret tournevis de précision (61 pièces) qui passe à 14,97 € au lieu de 29 €. Il contient tous les embouts pour démonter vos appareils électroniques, ordinateurs, téléphones, consoles de jeux, etc. Un arbre flexible est fourni pour atteindre les emplacements difficiles.


Voir le bon plan

Sujets relatifs
Dreamweaver impossible de tester index dans IE
editeur TinyMCE grande largeur texte dans page
Texte dans tableau
Bouton RSS automatique dans page annonce Google site
Résultat différent dans Google Trends et Google Keywords Planner
les caractères "é" et "à" se transforment en "?" dans les résultats Google
Logiciel pour remplacer Animation shop
Aller à la ligne dans une info bulle
Changement de compteur dans site Free
Changement de compteur dans mon site Free
Plus de sujets relatifs à tester et remplacer un mot dans une phrase
 > Tous les forums > Forum Forum des Webmasters