× 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
SSD Interne M.2 NVMe PCIe 4.0 Samsung 980 PRO 2 To (avec dissipateur, 7000 Mo/s) à 173,24 € livré
173,24 € 250 € -31% @Amazon Allemagne

Amazon Espagne fait une promotion sur le SSD Interne M.2 NVMe PCIe 4.0 Samsung 980 PRO 2 To avec son dissipateur de chaleur qui passe à 168,60 € (avec la TVA ajustée). Comptez 4,64 € pour la livraison en France soit un total de 173,24 € livré. On le trouve ailleurs à partir de 250 €. Ce SSD offre des taux de transfert de 7000 Mo /s en lecture et 5100 Mo/s en écriture. Une excellente affaire. 

Notez qu'il est également compatible avec la console de jeux PS5.


Voir le bon plan
Opération 48H BD 2023 : sélection de bandes dessinées à 3 €
3 € @Fnac

Fnac participe à l'opération 48H BD 2023 où une douzaines de BD et de mangas vous sont proposés à 3 €. Jeunesse, Ado, Adulte, Manga, Fantastique, Aventure, Sport, Historique… Il y en a pour tous les goûts !

 

 


Voir le bon plan
Carte Graphique Sapphire Pulse Radeon RX 6700 XT 12 Go + Jeu PC The Last Of Us Part 1 à 399,95 €
399,95 € 469,95 € -15% @LDLC

LDLC fait une promotion sur la carte graphique Sapphire Pulse Radeon RX 6700 XT 12 Go qui passe à 399,95 € avec le code CHOC au lieu de 469,95 €. La carte graphique Sapphire PULSE Radeon RX 6700 XT 12GB est une carte graphique gaming qui est animée par l'architecture RDNA 2 destinée aux gamers exigeants. Elle est la carte graphique idéale pour une utilisation en 1440p avec des fréquences d'images ultra-élevées.


Voir le bon plan
Lego Star wars Casque du Capitaine Rex n°75349 à 52,48 €
52,48 € 69,99 € -25% @Amazon

Amazon fait une promotion sur le Lego Star wars Casque Clone Commander Cody n°75349 qui passe à 52,48 € grâce à un coupon à activer sur la page du produit. On le trouve ailleurs à 69,99 €. Rendez hommage à un valeureux commandant clone de la 501ème légion avec Le casque du Capitaine Rex LEGO Star Wars™ (75349). 854 pièces.


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
Station de charge portable Bluetti EB70 LiFePO4 716Wh/1000W à 449 €
449 € 799 € -44% @Geekbuying

Geebuying fait une belle promotion sur la station de charge portable Bluetti EB70 716Wh/1000W qui passe à 449 € grâce au code promo 7S0EQJPV. On la trouve ailleurs à partir de 799 €.

Cette Power Station offre une capacité de 716Wh et 4 sorties AC de 1000W à onde sinusoïdale pure. Elle peut alimenter des appareils de moins de 1000 W, tels que des ordinateurs portables, des drones, des petits congélateurs TV, des petits ventilateurs, etc. La batterie LiFePO4 supporte plus de 2500 cycles de charge. Elle fournit suffisamment de jus pour faire fonctionner les appareils essentiels pendant des heures, en fonction de la sortie réelle. Elle possède également 2 ports USB, deux ports USB-C PD de 100W et un port de charge sans fil 15W.


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