PHP, an eine variable Zahl vorne Nullen hängen?
Hi,
Das Problem ist soweit mittels sprintf() gelöst.
Allerdings ist mein neues Problem nun, dass ab 009 nicht auf 010 springt sondern erst auf 001 und wieder auf 011. Im späteren Verlauf des Codes bzw. Programms wird die Nummer mit dem Datum verknüft und ausgegeben, vor der Ausgabe noch in einer Session gespeichert.
Also hier einmal die stark vereinfachte Routine:
$inhalt <- fopen(irgendwas.txt); #Zahl von TxT-Datei holen, angefangen bei n=1 und nach dem lesen wird n=n+1 gespeichert.
$inhalt = sprintf("%03d\n", $inhalt); #Nullen vornedrann
$rechnummer = $rechnummer."-".$datum; #Zahl mit Nullen und Datum verkünpfen
$_SESSION['r_id'] = $rechnummer; #Übergabe an die andere PHP-Datei
$rechnummer = $_SESSION['r_id'];
$html .= 'Nr.: '.$rechnummer.'</p>'; #Ausgabe
Najo, habe das auch mal mit einer If verzweigung versucht, um die jeweiligen "states" dementsprechend zu manipulieren, alos if( rechnummer < 10) dann häng vorne 2 Nullen drann usw. war aber nicht die Lösung von meinem Problem. Ich hab den verdacht das es bei der Sessionübergabe ein Problem gibt, bin noch nocht zum testen und debuggen gekommen. Vielleicht hat jemand von Euch eine Idee, würde mich freuen?
Gruß,
Phil
Das Problem ist soweit mittels sprintf() gelöst.
Allerdings ist mein neues Problem nun, dass ab 009 nicht auf 010 springt sondern erst auf 001 und wieder auf 011. Im späteren Verlauf des Codes bzw. Programms wird die Nummer mit dem Datum verknüft und ausgegeben, vor der Ausgabe noch in einer Session gespeichert.
Also hier einmal die stark vereinfachte Routine:
$inhalt <- fopen(irgendwas.txt); #Zahl von TxT-Datei holen, angefangen bei n=1 und nach dem lesen wird n=n+1 gespeichert.
$inhalt = sprintf("%03d\n", $inhalt); #Nullen vornedrann
$rechnummer = $rechnummer."-".$datum; #Zahl mit Nullen und Datum verkünpfen
$_SESSION['r_id'] = $rechnummer; #Übergabe an die andere PHP-Datei
$rechnummer = $_SESSION['r_id'];
$html .= 'Nr.: '.$rechnummer.'</p>'; #Ausgabe
Najo, habe das auch mal mit einer If verzweigung versucht, um die jeweiligen "states" dementsprechend zu manipulieren, alos if( rechnummer < 10) dann häng vorne 2 Nullen drann usw. war aber nicht die Lösung von meinem Problem. Ich hab den verdacht das es bei der Sessionübergabe ein Problem gibt, bin noch nocht zum testen und debuggen gekommen. Vielleicht hat jemand von Euch eine Idee, würde mich freuen?
Gruß,
Phil
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 481859
Url: https://administrator.de/contentid/481859
Ausgedruckt am: 19.11.2024 um 15:11 Uhr
17 Kommentare
Neuester Kommentar
Moin,
Je nach verwendetem DBMS kann man das direkt befindet SQL-Abfrage erledigen:
Für MS SQL kann man das REPLICATE() nutzen.
https://www.w3schools.com/sql/func_sqlserver_replicate.asp
Der erste Parameter wäre bei dir die „0“ und die Anzahl (zweiter Parameter) ermittelst du mit der Länge der Rechnungsnummer LEN()
MYSQL mag es ggf. ein Derivat für geben.
Alternativ die Zahl erst in PHP anpassen:
https://stackoverflow.com/questions/1699958/formatting-a-number-with-lea ...
Gruß
em-pie
P.S.
tue dir obendrein noch den Gefallen, und validiere die Werte zunächst. Nicht einfach Plain die Werte verwenden, die aus der DB/ einem Post/ einem Get kommen. Wenn dir jemand Murks mitgibt, kann das mal ganz schnell deine DB löschen.
P.P.S.
habe jetzt erst vernommen, dass du nicht von einer DB, sondern aus einer Textdatei kommst. Warum der Sprung 009 --> 001 -> 011 kommt, weiss ich nicht, dazu müssten man vermutlich deinen gesamten Code einmal Debuggen.
Je nach verwendetem DBMS kann man das direkt befindet SQL-Abfrage erledigen:
Für MS SQL kann man das REPLICATE() nutzen.
https://www.w3schools.com/sql/func_sqlserver_replicate.asp
Der erste Parameter wäre bei dir die „0“ und die Anzahl (zweiter Parameter) ermittelst du mit der Länge der Rechnungsnummer LEN()
Select
REPLICATE(0, 3 - LEN(Rechnungsnummer))
From
Invoices
MYSQL mag es ggf. ein Derivat für geben.
Alternativ die Zahl erst in PHP anpassen:
https://stackoverflow.com/questions/1699958/formatting-a-number-with-lea ...
Gruß
em-pie
P.S.
tue dir obendrein noch den Gefallen, und validiere die Werte zunächst. Nicht einfach Plain die Werte verwenden, die aus der DB/ einem Post/ einem Get kommen. Wenn dir jemand Murks mitgibt, kann das mal ganz schnell deine DB löschen.
P.P.S.
habe jetzt erst vernommen, dass du nicht von einer DB, sondern aus einer Textdatei kommst. Warum der Sprung 009 --> 001 -> 011 kommt, weiss ich nicht, dazu müssten man vermutlich deinen gesamten Code einmal Debuggen.
Moin,
Gruß,
Dani
Ich hab den verdacht das es bei der Sessionübergabe ein Problem gibt, bin noch nocht zum testen und debuggen gekommen. Vielleicht hat jemand von Euch eine Idee, würde mich freuen?
Es gibt in PHP die Funktion str_pad(). Damit solltest du die Prüfroutine sparen können und zugleich einen String aus der Integer machen. Somit dürfte auch die Sessionübergabe keine Rolle mehr spielen.Gruß,
Dani
Moin,
bei mir funktioniert es wie es soll. Nachstehend mein Beispiel Schnipsel:
Getestet unter PHP 7.2 und Apache2.
Resultat:
0000000009-2019
0000000010-2019
0000000011-2019
Gruß,
Dani
bei mir funktioniert es wie es soll. Nachstehend mein Beispiel Schnipsel:
<?php
$inhalt = 0;
$rechnungsnummer = 0;
// Lesen der Datei
$dateinamen = "rechnungsnrzaehler.txt";
$handle = fopen ($dateinamen, "r");
$inhalt = fread ($handle, filesize ($dateinamen));
fclose ($dateinamen);
$inhalt += 1;
// Schreiben des neuen Wertes
$handle = fopen ("rechnungsnrzaehler.txt", "w");
fwrite ($handle, $inhalt);
fclose ($dateinamen);
$rechnungsnummer = str_pad($inhalt, 10, "0", STR_PAD_LEFT);
$datum = date("Y");
echo $rechnungsnummer."-".$datum;
?>
Resultat:
0000000009-2019
0000000010-2019
0000000011-2019
Gruß,
Dani
Moin,
Ansonsten wirst du dich gedulden müssen. Muss kurzfristig zwei Kollegen vertreten und so wie es aussieht, wird das ne heiße Woche...
Gruß,
Dani
Naja, evtl. komm ich die Woche nochmal selber zum testen, wenn du aber nochmal paar minütchen Zeit hast würd mich das sehr freuen^^
könntest du mir dein Versuch zur Verfügung stellen? Dann hätte ich schon mal ein Gerüst und könnte dort den Fehler suchen.Ansonsten wirst du dich gedulden müssen. Muss kurzfristig zwei Kollegen vertreten und so wie es aussieht, wird das ne heiße Woche...
Gruß,
Dani
Moin,
Meine geschäftliche E-Mailadresse möchte ich an der Stelle ungern herausgeben.
Ich hab nun nun die datei1.php und datei2.php bei mir angelegt. Was mir noch nicht klar ist, welche Datei ruft die andere auf? Ich konnte weder eine Form mit GET/POST finden noch eine session_start().
Gruß,
Dani
Selbst bei den PN finde ich keine Option welche einen Dateiaustausch zulässt?
Du hast natürlich recht. Das geht hier leider nicht. Hab ich glatt mit einerr Plattform verwechselt... Meine geschäftliche E-Mailadresse möchte ich an der Stelle ungern herausgeben.
Ich hab nun nun die datei1.php und datei2.php bei mir angelegt. Was mir noch nicht klar ist, welche Datei ruft die andere auf? Ich konnte weder eine Form mit GET/POST finden noch eine session_start().
Gruß,
Dani