Convertir un char en nombre

Résolu
cs_rudddy Messages postés 24 Date d'inscription dimanche 11 janvier 2004 Statut Membre Dernière intervention 11 mars 2007 - 17 oct. 2006 à 18:24
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 - 18 oct. 2006 à 18:28
Salut à tous,


 


dans un programme j'ai un id qui est incrémenté de la façon suivante :


id_fact varchar(10)


dans ces 10 caractères, les 4 premiers correspondent à l'année, les 4 suivants au numéro de facture de l'année et les 2 derniers correspondent à FA (facture) ou AV(avoir)


 


J'ai le problème suiavnt :


 


quand je crée une facture, je veux incrémenter le id.


disons que le dernier id est 20060233FA, le suivant devrait être 20060234FA


Le problème est que quand je découpe la string et que j'incrémente, je me retrouve avec 2006234FA, le 0 ayant sauté !!!


 


 


voici mon code :





$id_fact_prev=... // récupération de mon dernier id ds la BD
 $annee_prev=substr($id_fact_prev,0,4);
 $num_prev=substr($id_fact_prev,4,4);
 
 $annee_encours=Date('Y');
 if($annee_encours==$annee_prev) {
  $num_next=$num_prev++;
  $id_fact_next=$annee_encours.$num_next;
 }
 else{
  $id_fact_next=$annee_encours.'0001';
 }


 


Merci à tous

4 réponses

cs_rudddy Messages postés 24 Date d'inscription dimanche 11 janvier 2004 Statut Membre Dernière intervention 11 mars 2007
17 oct. 2006 à 22:22
Bonsoir tout simplement j'ai fait :

$id_fact_prev= ... 
// récupération de mon dernier id ds la BD
   $annee_prev=substr($id_fact_prev,0,4
);
   $num_prev=substr($id_fact_prev,4,4
);
   
   $annee_encours=Date('Y'
);
   if($annee_encours==$annee_prev
) {
    $num_next= $num_prev
+1;
  $num_next
=sprintf("%04d",$num_next <gras>);
    $id_fact_next =$annee_encours.$num_next
;
   }
   else{
    $id_fact_next=$annee_encours.'0001'
;
   } 

Et ca marche
3
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
17 oct. 2006 à 18:44
huuuu j'ai peur ^^

Ta requète déja doit être plus optimisé que ca :
j'appèle ton champ "ID" :

<?php

$sql = 'SELECT CONVERT(SUBSTR(id, 0,4),
UNSIGNED)
as annee, CONVERT(SUBSTR(id,4,4), UNSIGNED) as id_facture, SUBSTR(id,8,2) as lettre FROM ta_table';
$query = mysql_query($sql);
$data = mysql_fetch_array($query);

$annee = date('Y');
$output ( $annee (int) $data['annee'] ) ? (int) $data['annee'].(int) $data['id_facture']++ : $annee.'0001';

echo $output;

// Ex:
// ID de sortie de ta requète : 20041234AF
// $data['annee'] == 2004; $data['id_facture'] == 1234;
// Si date('Y') == 2004//      $output 2004 . (1234+1) 20041235;
// Sinon
//      $output = date('Y').'0001';
// FinSi

// Pas oublier de rajouter tes lettres :)
$finish = $ouput.$data['lettre'];

?>

Et voila :)
0
cs_rudddy Messages postés 24 Date d'inscription dimanche 11 janvier 2004 Statut Membre Dernière intervention 11 mars 2007
17 oct. 2006 à 22:13
Merci de ta réponse

mais quand tu écrit :$output 2004.(1234.1) 20041235;

C'est bien si c'est 1234 mais is tu as 20040001, si tu fais 2004(0001.1) tu auras : 20042 et pas 20040002 !!!!

Donc la question reste posée.
0
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
18 oct. 2006 à 18:28
ah ouais j'ai oublié le sprintf()...
au temps pour moi.
0
Rejoignez-nous