Peux tu mettre le code de ton controlleur Index stp ?
Peux tu mettre le code de ton controlleur Index stp ?
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 !
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 !
Dans ton bouton ? Comment ca ?
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
qui est le setLabel de mon bouton ...
Code : Sélectionner tout - Visualiser dans une fenêtre à part $form->submit->setLabel('Etape suivante =>');
bizarre bizarre ...
L'informatique, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
Voila le code que j'ai dans mon formulaire :
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
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);
Il me semble que cela est normal que ce qui m'est affiché soit XXX09000
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
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 !
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'; }
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 !
Et ben c'est pas gagné !!
juste une petite erreur qui persiste ...
j'ai fait cette fonction :
je lui passe ceci en paramètre :
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;
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 !
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
je lui donne ceci :
et il me renvoie :
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;
XXX08001
autre chose :
pour la nouvelle fonction c'est justemement ce que je cherche, retirer les 3 premiers caractères et ne prendre que les 5 derniers.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
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 !
Code php : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 $i = (int)substr($sequence, -3);
tu as mis $x
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 !
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 !
Je viens de tenter,
je pense à une chose du genre :
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...
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);
qu'en pensez vous ??
L'informatique, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
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
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager