IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Problème aec TRIM [PHP 5.2]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de ETVigan
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Avril 2010
    Messages
    660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2010
    Messages : 660
    Par défaut Problème aec TRIM
    J'ai un souci avec TRIM

    Voici mon code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $charlist = "-_" ;
    $date = $_POST['date'] ;
    var_dump($date); ;
    $date = trim($date,$charlist) ; // On débarasse la saisie d'éventuels délimiteurs.....
    var_dump($date);
    J'encode dans le champ date: 08-071954

    Les var_dump donnent:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    string(9) "08-071954" string(9) "08-071954" 
    string(2) "08" string(3) "-07" string(4) "1954"
    Càd que je n"utilise pas le trim comme je devrais mais ne vois pas ma faute !

    Rien dans le log.php

    Merci à ceusssss qui m'aideront à sortir de là....

  2. #2
    Membre émérite
    Inscrit en
    Juillet 2003
    Messages
    625
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 625
    Par défaut
    Bonjour,

    regarde du coté de preg_replace peut être

  3. #3
    Membre éclairé Avatar de ETVigan
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Avril 2010
    Messages
    660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2010
    Messages : 660
    Par défaut TRIM - preg_replace
    Cela me semble complique car le "-" n'est pas le seul caractère que je souhaite ôter.....

    Merci qaund mêrme

  4. #4
    Membre éclairé Avatar de ETVigan
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Avril 2010
    Messages
    660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2010
    Messages : 660
    Par défaut Trim Checkdate.....
    Je continue sans délimiteur car pas de solution maintenant.
    Après avoir ôter ceux-ci, je dois valider la date:

    Je fais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    var_dump(checkdate(07 , 08  , 1954));
    Hardcoded dans ma source et j'ai:

    Je pense que je vais breaké un petit peu... mais pas sur car quand j'ai qlqchose en tête....

  5. #5
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Un petit piège de PHP : 08 ne vaut pas 8.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  6. #6
    Membre éclairé Avatar de ETVigan
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Avril 2010
    Messages
    660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2010
    Messages : 660
    Par défaut Trim Checkdate.....
    Merci pour ta réponse, je nettoye convenablement:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    string(10) "08-07-1954" string(8) "08071954" 
    string(2) "08" string(2) "07" string(4) "1954"
    mais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    var_dump(checkdate(07 , 08  , 1954));
    $rc = checkdate($this->mm , $this->dd  , $this->yy) ;
    var_dump($rc) ;
    me renvoie:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    bool(false) bool(false)
    Suis un poil + loin.... mais je peux mieux faire, non ?

  7. #7
    Membre éclairé Avatar de ETVigan
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Avril 2010
    Messages
    660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2010
    Messages : 660
    Par défaut Checkdate: 08 => 8 en PHP
    Merci Sabotage....

    Et (je vais chercher) je fais quoi maintenant....
    Remplacer les blancs par "0" uniquement quand la zone à une longueur == 1 ??

    Ou qlqchose du genre ?

    Merci

  8. #8
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 422
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 422
    Par défaut
    Tu fais des erreurs d'étourderies

    Soit tu fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var_dump(checkdate(7 , 8  , 1954));
    Soit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var_dump(checkdate("07" , "08"  , "1954"));
    Au fait mon précédent message (notamment la dernière partie) ne t'a pas aidé ?

  9. #9
    Membre éclairé Avatar de ETVigan
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Avril 2010
    Messages
    660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2010
    Messages : 660
    Par défaut Checkdate: 08 => 8 en PHP
    Etourderie peut être, fatigué sans doute....

    Voici mon code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    	function validate()
    	{	$date = preg_replace('#[^0-9]#', '', $_POST['date']) ; // On débarasse la saisie d'éventuels délimiteurs.....
    		switch(strlen($date))					 // Longueur de la saisie 
    		{	case 6 : 	$format = '%2s%2s%2s' ; // Format JJMMYY
    						break ;
    					
    			case 7 : 	$format = '%2s%3s%2s' ; // Format JJMMMYY
    						break ;
    					
    			case 8 :    $format = '%2s%2s%4s' ;// Format JJMMYYYY
    						break ;
    					
    			case 9 :    $format = '%2s%3s%4s' ;// Format JJMMMYYYY
    						break ;
    						
    		}
    		list($this->dd, $this->mon, $this->yy) = sscanf($date, $format) ;
    		var_dump($this->dd) ;
    		var_dump($this->mon) ;
    		var_dump($this->yy) ;
    
    		if ( is_string($this->mon) )
    			$this->mm  = array_search($this->mon, $this->month); 
    		else
    			if ( is_int($this->mon) )
    				$this->mm = $this->mon ;
    			else
    				throw new Exception("class[DATE] - Bad char in [".$date."] !") 	;
    
    		 
    		return( checkdate($this->mm , $this->dd  , $this->yy) ? OK : DATE) ;  
    	}
    Dans celui-ci, je ne vois pas comment m'assurer que j'ai 7 ou 07 ou "07" ....

    Merci !

  10. #10
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 422
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 422
    Par défaut
    Tu n'utilises pas trim pour ce qu'il sait faire. Comme dit dans la doc "Supprime les espaces (ou d'autres caractères) en début et fin de chaîne"

    Donc un test cohérent serait de faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $charlist = "-_" ;
    $date = "-08-071954_";
    $date = trim($date,$charlist) ; 
    var_dump($date);
    Mais si tu veux supprimer les délimiteurs partout dans la chaine, tu peux utiliser une fonction de remplacement pour cibler certains caractères, exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $date = "-08-071954_";
     
    $cible = array('-','_');
    $remplacement = array('','');
    $date = str_replace($cible,$remplacement,$date);
    var_dump($date);
    Mais comme l'a signaler syl2095, preg_replace serait sans doute le plus intéressant dans ce cas de figure parce que tu pourrais par exemple ne garder que ce qui est constitué de chiffres
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $date = "-08-0719ad54_";
    $date = preg_replace('#[^0-9]#', '', $date);
    var_dump($date);

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème Trim() Accents
    Par menakikou dans le forum Langage SQL
    Réponses: 2
    Dernier message: 10/08/2009, 09h55
  2. Problème de linkage aec Ogg
    Par Kromagg dans le forum API graphiques
    Réponses: 2
    Dernier message: 03/02/2009, 21h13
  3. Problème avec la Fonction TRIM
    Par John81 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 03/01/2009, 11h29
  4. Réponses: 2
    Dernier message: 05/11/2007, 11h41
  5. Problème avec trim
    Par sqlnet dans le forum Oracle
    Réponses: 3
    Dernier message: 09/11/2005, 15h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo