php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2007

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 13.05.2007, 22:39  
Erfahrener Benutzer
 
Registriert seit: 08.03.2005
Beiträge: 475
Plague
Standard Rechnungsnummerngenerator

Hallo,

ich habe folgende Funktion geschrieben:
PHP-Code:
function get_rechnungsnr() {
    
$con mysql_connect($_SESSION['db_host'], $_SESSION['db_user_system'], $_SESSION['db_passwort']);
    
mysql_select_db($_SESSION['db_system_data']);
    
$sql "SELECT COUNT(`id`) FROM `objekt` WHERE `Datum` = now()";
    
$result mysql_query($sql);
    
$res = @mysql_fetch_array($result);
    
$x date("dmY") . ($res[0] + 1);
    
mysql_close($con);
    return 
$x;

Der Aufbau der Nummer sieht so aus, dass am Anfang das aktuelle Datum (Tag, Monat, Jahr) steht und danach die anzahl der Einträge in der Datenbank, die an diesem Datum erstellt wurden.

Ich finde das alles andere als elegant und vor allem ist das auch Fehleranfällig. Denn wenn gleichzeitig 2 Einträge stattfinden (und das kann ja mal schnell vorkommen), bekommt man zwei mal die gleiche Nummer.
Gibt es da noch eine Möglichkeit über die ich das verhindern kann?

Bei ORACLE gibt es ja die Sequence. Sowas gibt es bei MySQL nicht, oder?

Gruß
Thomas
Plague ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 13.05.2007, 23:18  
Moderator und Wett-König
 
Benutzerbild von dr.e.
 
Registriert seit: 21.05.2008
Beiträge: 3.633
PHP-Kenntnisse:
Fortgeschritten
dr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblick
dr.e. eine Nachricht über Skype™ schicken
Standard

Hallo Plague,

ich finde deine Variante an sich schon seltsam. Die ID mit Datum zu versehen ist eine gute Idee, aber dann mit der Anzahl der Einträge, die an diesem Tag erstellt wurden? Damit müsstest du ja bei jeder Bestellung alle anderen Bestellungen des Tages updaten und hast trotzdem keine Eindeutigkeit erreicht. Warum verwendest du kein auto_increment-Feld? Für die Anzeige kannst du dann mit CONCAT_WS() sowas wie

YYYY-MM-DD-ID

generieren, wenn du das unbedingt haben möchtest.
__________________
Viele Grüße,
Dr.E.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1. Think about software design before you start to write code!
2. Discuss and review it together with experts!
3. Choose good tools (-> Adventure PHP Framework (APF))!
4. Write clean and reusable software only!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
dr.e. ist offline  
Alt 14.05.2007, 10:18  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

SELECT COUNT(id) ist auch an sich schon mal falsch. Wenn schon SELECT MAX(id) + 1.
Zergling-new ist offline  
Alt 14.05.2007, 10:43  
Erfahrener Benutzer
 
Registriert seit: 08.03.2005
Beiträge: 475
Plague
Standard

Sequencen gibt es wirklich nicht in mySQL oder?
Plague ist offline  
Alt 14.05.2007, 11:18  
Erfahrener Benutzer
 
Registriert seit: 13.08.2007
Beiträge: 1.976
KingCrunch befindet sich auf einem aufstrebenden Ast
KingCrunch eine Nachricht über ICQ schicken KingCrunch eine Nachricht über AIM schicken KingCrunch eine Nachricht über MSN schicken KingCrunch eine Nachricht über Yahoo! schicken
Standard

Was spricht schlicht gegen sowas?
Code:
Kundennummer - Rechnungstag - lfd-KundenrechnungsId
Hmm ... Mit den dritten Teil, kann man sogar auffn Tag verzichten ^^
__________________
Nicht jeder Fehler ist ein Bug.
KingCrunch ist offline  
Alt 14.05.2007, 12:31  
Erfahrener Benutzer
 
Registriert seit: 08.03.2005
Beiträge: 475
Plague
Standard

Die Rechnung wird nicht in einer Datenbank gespeichert!

Wobei das gar nicht so doof ist... Vielleicht mache ich das...

Danke schon mal...!
Plague ist offline  
Alt 14.05.2007, 12:52  
Moderator und Wett-König
 
Benutzerbild von dr.e.
 
Registriert seit: 21.05.2008
Beiträge: 3.633
PHP-Kenntnisse:
Fortgeschritten
dr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblick
dr.e. eine Nachricht über Skype™ schicken
Standard

Hallo Plague,

Zitat:
Die Rechnung wird nicht in einer Datenbank gespeichert!

Wobei das gar nicht so doof ist... Vielleicht mache ich das...
D.h. du legst in der DB nur die Rechnungs-Nummer ab, nicht etwa die Positionen mit ihren Beziehungen auf die Produkte etc.? Wenn nicht, würde ich das schnell nachholen. Binärdaten (PDFs etc.) würde ich aber nicht in der DB speichern, sondern auf dem Filesystem mit einer losen Kopplung über den Datei-Namen.


Zitat:
Sequencen gibt es wirklich nicht in mySQL oder?
Es gibt wie bereits gesagt auto_increment. Wenn dir das nicht reicht und dir meine Vorgehensweise nicht taugt, kannst du ab MySQL 5.1 dazu ein stored procedure anlegen, das dir die Funktion zur Verfügung stellt.
__________________
Viele Grüße,
Dr.E.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1. Think about software design before you start to write code!
2. Discuss and review it together with experts!
3. Choose good tools (-> Adventure PHP Framework (APF))!
4. Write clean and reusable software only!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
dr.e. ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
rechnungsnummerngenerator, fakturierungsprogramm mit rechnungsnummerngenerator, rechnungssystem php.de, tag monat jahr als rechnungsnummer, php rechnungen in datenbank speichern oder als datei

Alle Zeitangaben in WEZ +1. Es ist jetzt 10:20 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.