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 :

numéro séquentiel qui redémarre à 0 tous les mois


Sujet :

Langage PHP

  1. #21
    Membre émérite Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Points : 2 566
    Points
    2 566
    Par défaut
    Peux tu mettre le code de ton controlleur Index stp ?

  2. #22
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    380
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 380
    Points : 66
    Points
    66
    Par défaut
    le voici (je n'ai mis que la partie qui s'y réfère tout en précisant que j'ai mis la fonction dans le formulaire et non dans l'indexController).
    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
     
    	function commandeAction()
    	{
    		$this->view->title = "Liste des commandes";
    		$commande = new commandes();
    		$this->view->commande = $commande->fetchAll();
    	}
     
    	function ajoutercommandeAction()
    	{
    		$this->view->title = "Ajouter une commande";
    		$form = new Formulairecommande();
    		$form->submit->setLabel('Etape suivante =>');
    		$this->view->form = $form;
    			if ($this->_request->isPost()) 
    			{
    				$formData = $this->_request->getPost();
    				if ($form->isValid($formData)) 
    				{
    					$commande = new commandes();
    					$row = $commande->createRow();
    					$row->libelle_commande = $form->getValue('libelle_commande');
    					$row->date_commande = $form->getValue('date_commande');
    					$row->reglement_commande = $form->getValue('reglement_commande');
     
    				//	$numero_commande = $row->save();
    					$this->_redirect('/index/comfac/id/$id');
     
    				} 
    				else 
    				{
    					$form->populate($formData);
    				}
    			}
    	}
     
    	function modifiercommandeAction()
    	{
    		$this->view->title = "Modifier une commande";
    		$form = new Formulairecommande();
    		$form->submit->setLabel('Enregistrer');
     
    		$this->view->form = $form;
    		if ($this->_request->isPost()) 
    		{
    			$formData = $this->_request->getPost();
    			if ($form->isValid($formData)) 
    			{
    				$commande = new commandes();
    				$id = (int)$this->_request->getParam('id', 0);
    				$row = $commande->fetchRow('numero_commande ='.$id);
    				$row->libelle_commande = $form->getValue('libelle_commande');
    				$row->date_commande = $form->getValue('date_commande');
    				$row->reglement_commande = $form->getValue('reglement_commande');
     
    				$row->save();
    				$this->_redirect('/index/commande');
    			} 
    			else 
    			{
    			$form->populate($formData);
    			}
    		}
    		else 
    		{
    			$id = (int)$this->_request->getParam('id', 0);
    			if ($id > 0) 
    			{	
    				$commande = new commandes();
    				$commande = $commande->fetchRow('numero_commande='.$id);
    				$form->populate($commande->toArray());
    			}	
    		}
    	}
     
    		function consultercommandeAction()
    	{
    			$this->view->title = "Consultation de commande";
    			$commande = new commandes();
    			//récupération de l'id du commande
    			$id = (int)$this->_request->getParam('id');
    			//on selectionne les informations relatives au commande selectionné.
    			$this->view->commande = $commande->select_all_commande($id);
     
    			$comfac = new comfac();
    			$this->view->comfac = $comfac->select_all_piece_commande($id);
     
    	}
    L'informatique, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !

  3. #23
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    380
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 380
    Points : 66
    Points
    66
    Par défaut
    Comment savoir l'heure de son serveur ??
    ce que je ne comprends pas c'est pourquoi cette fonction qui est corecte me génère des erreurs au niveau du code suivant (comme mon bouton par exemple) ???
    L'informatique, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !

  4. #24
    Membre émérite Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Points : 2 566
    Points
    2 566
    Par défaut
    Dans ton bouton ? Comment ca ?

  5. #25
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    380
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 380
    Points : 66
    Points
    66
    Par défaut
    dans le post numéro 20 je notais que j'avais un problème avec une certaine ligne lorsque j'insérais une certaine valeur :
    le problème est situé sur cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $form->submit->setLabel('Etape suivante =>');
    qui est le setLabel de mon bouton ...
    bizarre bizarre ...
    L'informatique, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !

  6. #26
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    380
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 380
    Points : 66
    Points
    66
    Par défaut
    Voila le code que j'ai dans mon formulaire :

    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
     
    function incremente($sequence)
    {
    	$mois = date('n');
     
    	$x = substr($sequence, 0, 3);
     
    	$m = (int)substr($sequence, 3, 2);
    	$i = (int)substr($sequence, -3);
     
    	if($mois == $m)
    	return $x.str_pad($mois, 2, 0, STR_PAD_LEFT).str_pad($i+1, 3, 0, STR_PAD_LEFT);
     
    	$next_mois = ($mois == 12) ? '01' : str_pad($mois+1, 2, 0, STR_PAD_LEFT);
    	return $x.$next_mois.'000';
     
    }
    $sequence = 'XXX03058';
    $numero = incremente($sequence);
    J'ai testé toutes mes variables echo après echo et j'ai en retour ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    echo $mois; me donne 8
    echo $x; me renvoie XXX
    echo $m; me donne 3
    echo $i; me donne 58
    echo $x.str_pad($mois, 2, 0, STR_PAD_LEFT); me renvoi XXX08
    echo str_pad($i+1, 3, 0, STR_PAD_LEFT); me donne 059
    $x.str_pad($mois, 2, 0, STR_PAD_LEFT).str_pad($i+1, 3, 0, STR_PAD_LEFT); me donne XXX08059
    echo str_pad($mois+1, 2, 0, STR_PAD_LEFT); me renvoi 09
    echo 	echo $next_mois; me donne 09
    echo $x.$next_mois.'000'; me renvoi XXX09000
    Il me semble que cela est normal que ce qui m'est affiché soit XXX09000
    comme c'est ce qui lui est demandé de retourner ... ??? enfin j'ai peut être mal compris le fonctionnement

    Une idée ???
    beaucoup !
    L'informatique, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !

  7. #27
    Membre émérite Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Points : 2 566
    Points
    2 566
    Par défaut
    Bonjour, c'est normal

    Tu lui demande la sequence suivante de XXX03058. Or, la fonction teste si le mois récupéré (ici 3) est égal au mois en cours (8). Si c'est pas le cas, elle retourne le mois actuel +1 donc 9.

    Je pensais que tu traitais tes factures du mois dans un mois coulant pas après 6 mois

    Teste ca :

    Code php : 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
     
    function incremente($sequence)
    {
    	$mois = date('n');
     
    	$x = substr($sequence, 0, 3);
     
    	$m = (int)substr($sequence, 3, 2);
    	$i = (int)substr($sequence, -3);
     
    	if($mois == $m)
    	return $x.str_pad($mois, 2, 0, STR_PAD_LEFT).str_pad($i+1, 3, 0, STR_PAD_LEFT);
     
    	$next_mois = ($m== 12) ? '01' : str_pad($m+1, 2, 0, STR_PAD_LEFT);
    	return $x.$next_mois.'000';
     
    }

  8. #28
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    380
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 380
    Points : 66
    Points
    66
    Par défaut
    Effectivement, j'ai pas testé avec la bonne valeur dans l'exemple ...
    et après re re re re re lecture, je me suis appercu qu'il me manquait une parenthèse ...
    tu as raison !!!!!

    Sa fonctionne parfaitement !!!!

    Je risque d'être embétant mais maintenant je cherche la même fonction
    mais qui se contente de supprimer les 3 caractères devant (ici les XXX), de récupérer les 5 derniers et de les incrémenter de la même manière.

    je vais tenter de la faire, on véra bien ce que cela va donner !!!

    T'est un AS !!!!!


    Je tiens au courant si besoin !!!!


    Pour info j'ai réussi juste au moment ou tu as posté ...
    la fonction que j'utilise est celle ci :
    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
     
    function incremente($sequence){
     
            // Récupères le mois en cours sans les zéros (1 à 12)
    	$mois = date('n');
    	        // Récupéres les 3 premières lettres de ta séquence
    	$x = substr($sequence, 0, 3);
    	        // Récupères le mois et l'incrément et le caste en int donc perte des 0
    	$m = (int)substr($sequence, 3, 2);
    	$i = (int)substr($sequence, -3);
    	        // Si le mois en cours = le mois de la dernière séquence, on retourne la chaine avec le mois complété par un eventuel 0 à gauche et l'incrément +1 complété avec des eventuels 0 à gauche
    	if($mois == $m)
    	{
    	return $x.str_pad($mois, 2, 0, STR_PAD_LEFT).str_pad($i+1, 3, 0, STR_PAD_LEFT);
    	}
    	else
    	{
    	  // Sinon meme procédure mais on incrémente le mois au lieu de l'incrément
    	$next_mois = ($mois == 12) ? '01' : str_pad($mois+1, 2, 0, STR_PAD_LEFT);
    	}
    	return $x.$next_mois.'000';
     
    }
    $sequence = 'XXX08058';
    $test = incremente($sequence);	
    echo $test;
    L'informatique, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !

  9. #29
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    380
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 380
    Points : 66
    Points
    66
    Par défaut
    Et ben c'est pas gagné !!
    juste une petite erreur qui persiste ...

    j'ai fait cette fonction :
    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
     
    function incremente($sequence){
     
        	$mois = date('n');
    	$x = substr($sequence, 3, 5);
    	$m = (int)substr($x, 0, 2);
    	$i = (int)substr($x, -3);
    	if($mois == $m)
    	{
    	return $x.str_pad($mois, 2, 0, STR_PAD_LEFT).str_pad($i+1, 3, 0, STR_PAD_LEFT);
    	}
    	else
    	{
    	$next_mois = ($mois == 12) ? '01' : str_pad($mois+1, 2, 0, STR_PAD_LEFT);
    	}
    	return $x.$next_mois.'000';
     
    }
    $sequence = 'XXX08099';
    $test = incremente($sequence);	
    echo $test;
    je lui passe ceci en paramètre :
    XXX08099

    et il me retourne 0809908100 ...

    J'y suis presque !!!! pourquoi me répète t il 08099 ??
    L'informatique, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !

  10. #30
    Membre émérite Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Points : 2 566
    Points
    2 566
    Par défaut
    C'est parce que tu as changé les valeurs de

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $x = substr($sequence, 3, 5);
    $m = (int)substr($x, 0, 2);

    edit: substr($sequence, 3, 5); va te récupérer à partirr du 3ieme caractère sur une longueur de 5 caractères, c'est pas ce que tu veux

  11. #31
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    380
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 380
    Points : 66
    Points
    66
    Par défaut
    je lui donne ceci :
    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
     
    function incremente($sequence)
    {
    	$mois = date('n');
    	$x = substr($sequence, 0, 3);
    	$m = (int)substr($sequence, 3, 2);
    	$i = (int)substr($x, -3);
    	if($mois == $m)
    	{
    	return $x.str_pad($mois, 2, 0, STR_PAD_LEFT).str_pad($i+1, 3, 0, STR_PAD_LEFT);
    	}
    	else
    	{
    	 $next_mois = ($mois == 12) ? '01' : str_pad($mois+1, 2, 0, STR_PAD_LEFT);
    	}
    	return $x.$next_mois.'000';
     
    }
    $sequence = 'XXX08099';
    $test = incremente($sequence);	
    echo $test;
    et il me renvoie :
    XXX08001

    autre chose :
    edit: substr($sequence, 3, 5); va te récupérer à partirr du 3ieme caractère sur une longueur de 5 caractères, c'est pas ce que tu veux
    pour la nouvelle fonction c'est justemement ce que je cherche, retirer les 3 premiers caractères et ne prendre que les 5 derniers.

    Y'a quelque chose que je ne fais pas comme il faut !!!

    L'informatique, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !

  12. #32
    Membre émérite Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Points : 2 566
    Points
    2 566
    Par défaut
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $i = (int)substr($sequence, -3);

    tu as mis $x

  13. #33
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    380
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 380
    Points : 66
    Points
    66
    Par défaut
    Effectivement !! c'est bien sa !!

    fonctionnel, nikel, rien a dire !!!

    Toujours au top mon ami dis donc !!!!!!





    Problème
    L'informatique, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !

  14. #34
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    380
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 380
    Points : 66
    Points
    66
    Par défaut
    je n'ai pas fait attention, mais il y a quelque chose qui ne correspond pas avec ma recherche

    je cherche à faire une fonction qui reçoit en paramètres, un code à 8 caractères, et qui retire les 3 premiers.

    ensuite sur les 5 qui reste, 2 sont le mois actuel et les 3 derniers sont l'incrément. (à incrémenter de la même manière que précédemment avec remise à zéro de l'incrément lorsque l'on change de mois).

    j'aimerais que cette fonction me renvoi la chaine des 5 derniers chiffres, incrémentés de la manière citée précédemment.

    est-ce possible ??

    !!!
    L'informatique, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !

  15. #35
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    380
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 380
    Points : 66
    Points
    66
    Par défaut
    Je viens de tenter,
    je pense à une chose du genre :
    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
     
    function incremente($sequence){
     
        // Récupères le mois en cours sans les zéros (1 à 12)
       $mois = date('n');
      // Récupères les 5 derniers chiffres de la séquence
      $mois_increment = substr($sequence, 3, 8);
      // Récupères le mois et l'incrément et le caste en int donc perte des 0
      $m = (int)substr($mois_increment, 0, 2);
      $i = (int)substr($mois_increment, -3);
     
      if($mois == $m)
    	{
    	return str_pad($mois, 2, 0, STR_PAD_LEFT).str_pad($i+1, 3, 0, STR_PAD_LEFT);
    	}
    	else
    	{
    	 $next_mois = ($mois == 12) ? '01' : str_pad($mois, 2, 0, STR_PAD_LEFT);
    	}
    	return $next_mois.'000';
     
    }
    $code_dossier = 'XXX08186';
    $nouveau_code = incremente($sequence);
    Je suis en train d'effectuer les tests, par contre j'ai retiré l'incrément au mois dans le else, sinon j'avais un mois d'avance...

    qu'en pensez vous ??
    L'informatique, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !

  16. #36
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    625
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 625
    Points : 822
    Points
    822
    Par défaut
    Une version un peu simplifiée, à tester.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    function increm( $str ){
    	$mois = date( 'n' );
    	$val = array( $mois => -1 );
    	sscanf( $str , '%3s%2d%3d' , $ent , $m , $v );
    	$val[ $m ] = $v;
    	return sprintf( '%s%02s%03s' , $ent , $mois , ++$val[ $mois ] );
    }
     
    echo increm( 'ABC02003' ) . "\n";
    echo increm( 'CDE08005' ) . "\n";
    echo increm( 'DEF08000' ) . "\n";
    Pourfendeur de singletons en croisade

Discussions similaires

  1. [ZF 1.10] numéro séquentiel qui redémarre à 0 tous les mois
    Par cyrux dans le forum Zend Framework
    Réponses: 0
    Dernier message: 11/08/2010, 10h01
  2. [MySQL] Variable qui s'actualise tous les jours
    Par zathuros dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 03/11/2008, 13h22
  3. Réponses: 5
    Dernier message: 10/07/2008, 13h50
  4. Réponses: 4
    Dernier message: 25/06/2008, 14h57
  5. Réponses: 2
    Dernier message: 25/09/2006, 13h04

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