Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Convertir un char en nombre [ Divers / Aide & documentation ] (rudddy)

mardi 17 octobre 2006 à 18:24:46 | Convertir un char en nombre

rudddy

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


mardi 17 octobre 2006 à 18:44:46 | Re : Convertir un char en nombre

FhX

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 :)


mardi 17 octobre 2006 à 22:13:14 | Re : Convertir un char en nombre

rudddy

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.

mardi 17 octobre 2006 à 22:22:11 | Re : Convertir un char en nombre

rudddy

Réponse acceptée !
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
);
    
$id_fact_next=$annee_encours.$num_next
;
   }
   else{
    
$id_fact_next=$annee_encours.'0001'
;
   } 


Et ca marche

mercredi 18 octobre 2006 à 18:28:34 | Re : Convertir un char en nombre

FhX

ah ouais j'ai oublié le sprintf()...
au temps pour moi.



Cette discussion est classé dans : annee, id, num, fact, prev


Répondre à ce message

Sujets en rapport avec ce message

PHP : problèmes d'affichage en utilisant plusieurs requetes [ par vir76 ] Voici mon problème :Je dispose de 3 requêtes :la première me permet de visualiser les dotations pour chaque sousdirection$rq="SELECT T_ANNEE.ANNEE_ANN affichage d'une requête comportant de deux autres requêtes [ par vir76 ] Je dispose de 3 requêtes :la 1ère :$requête fournitures="SELECT T_ANNEE.ANNEE_ANNEE, T_SOUSDIRECTION.ID_SOUSDIRECTION, T_SOUSDIRECTION.SOUSDIRECTION_N Jointure entre 2 tables mysql [ par dj-smoye ] Bonjour tlm,   Voilà j'ai un soucis avec la requête ci-dessous: SELECT    D1.id_users  AS User1_Id,    D1.num_obj   AS User1_ObjectId,   D2.id_u visualisation d'une requête avec calcul [ par vir76 ] Salut tout le monde, voici mon problème, j'espère que mes explications vont être claires.Je dois afficher un tableau regroupant un nom de sousdirectio Encore un mystère de l'Ouest [ par mikito ] Bon mon pb est simple : voici ma requete: "SELECT * FROM `produit`, `produittempo` WHERE produit.id != produittempo.idd;"Explication du probleme :j'ai PROBLEME VARIABLE... [ par jeuneprog ] Bonjour à tous,J'ai un probleme tout betes mais j'espere que vous pourriez m'eclairer car sa fait trop longtemps que je cherche et là je commence a et AFFICHER UNE ID SVP :'( [ par jeuneprog ] Bonjour,Comment pourrais-je faire apparaitre l'id d'un message inserer dans mon forum avec une bdd svp?Merci à tous... nombre d'enregistrement a extraire [ par westsider ] bonjour,est ce ke je px extraire un nb precis d'enregistrement??par exemple les 5 derniers et les 5 premiers, sachant que les id sont pas en ordre, ca manier les nombres en fonction d'un membre connecté [ par Trigun222 ] Salut,J'utilise le scipt de az-php pour mon espace membre c'est à dire celà :session_start();$ya= "select * from jeu_membres where login='$login' and problème de mise à jour de base de données [ par rildspael ] Ben en fait maintenant j'ai refait ce code, je me suis concentré, j'ai tout analysé mais rien ne marche encore et je ne comprends pas : le voici :Donc


Nos sponsors

Sondage...

CalendriCode

Octobre 2008
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,281 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.