Du schickst in der Datenbank den Wert "Präfix + 2 Buchstaben + snr".
In der Datenbank handelt es sich dann nicht mehr um eine numerische Zeichenfolge, sondern um eine alphanumerische Zeichenfolge. Da der "MAX"-Wert der mySql-Abfrage nicht vernünftig ausgewählt werden kann, funktioniert das Script nicht oder nur einmal.
Man müsst nur den numerischen Wert in der Datenbank erfassen und daher, wie in meinem ersten Skript, mit zwei Feldern arbeiten, einem numerischen Feld, auf dem wir die Schrittweite aufbauen.
Und ein Feld, das aus dem Präfix, den zufälligen Buchstaben und der Nummer besteht.
Tut mir leid, ich hatte mein 2. Skrip nicht genug getested.
Zu tun.
Das Feld snr umbenennen al "auftragsnummer" z.B.
Ein neues Feld hinzufügen (als 1. im Form z.B.) genannt "snr".
Den Skripe so umschreiben :
$this->execPieceByName('ff_InitLib');
$db = JFactory::getDBO(); // Zugriff auf die Datenbank
$db->setQuery('SELECT MAX(value) FROM #__facileforms_subrecords where name = "snr"'); // snr ist der Name des Feldes, das die Seriennummer erhält
$result = $db->loadResult();
$praefix = "P382";
if ( $result != '' ) {
$result = $result + 1; // Test ob das Datenbankfeld einen Wert enthält. Wenn ja, wird die Wert mit 1 erhöht
}
else {
$result = "00001"; // Wenn nicht, fangen wir mit "1" an
}
// Hier noch einbauen, dass bei Erreichen von "99999" wieder auf "0" gesetzt wird! !!!!!! da man immer die höchste Wert von der DB aufruft, ist das nicht machbar !!!!!
//zwei Zufallsbuchstaben:
$buchstaben = chr( mt_rand( 97 , 122 )).chr( mt_rand( 97 , 122 ));
$trennung = "-" ;
$strResult = sprintf("%05d", $result); // Wenn die Serienr weniger als 5 Ziffern
ff_setValue('snr', $result); // Seriennummer ins Feld "snr" senden
ff_setValue( 'auftragsnummer', $praefix.$buchstaben.$trennung.$strResult); // Präfix + Seriennummer in Feld "auftragsnummer" senden.
Das wir besser funktionieren
Das mit wieder auf 0 setzen wenn 99999 erreicht ist wird nicht so machbar da man immer erst die höchste Wert vom DB aufruft…
Hallo Eddy,
wieso arbeitest du überhaupt mit der "max()"-Funktion beim Auslesen aus der Datenbank? Kann man nicht einfach den letzten vorhandenen Eintrag "snr" (also aus dem letzten Datensatz) aus der Datenbank auslesen?
In dBase wäre das:
use datenbank // öffne db
go bottom // gehe zum letzten Datensatz
var_snr = datenbank->snr // feld snr in variable
var_snr_counter = subst(var_snr, -5) // die "Ziffern" (als String) extrahieren zum addieren...
Dann könnte das Skript ohne Änderungen bleiben, so, wie es bisher läuft!
Auch das "Abfangen" und Wiederbeginnen mit der Zählung wäre doch einfach nach dem Motto:
if var_snr_counter = "99999"
var_snr_counter = "00000"
endif
// und alles beginnt von vorne....
(diese Änderung natürlich VOR dem Addieren von "1", damit die Zählung wieder bei eins beginnt.)
---
Wie bekommt man "snr" aus dem letzten vorhandenen Datensatz aus der Datenbank, ohne den eigentlichen Inhaltswert zu betrachten?
Das wäre doch die einfachste Lösung, oder?
Wie mehrfach geschrieben: Ich habe keinen Plan von php/mysql etc. (leider)...
Ich weiß es nicht genau, aber ich denke, es gibt weder ein ersten noch ein letzten Datensatz in einer Datenbank ... Wir können die Tabelle nach Spalten sortieren und daher ist es nicht einfach, einen letzten Datensatz zu definieren.
Vielleicht mit dem Aufnahmedatum?
We help you to keep your costs under control. If you are a new member and purchased a form building tool from a different form vendor, then you'll get a 25% discount on our subscription plans.
How to receive the discount:
Send us a quick email to sales@crosstec.org with a proof of purchase (for example a paypal receipt), await payment instructions and enjoy your membership!
Live Support Chat Opened!
Join our Discord chat here and enter the Crosstec channels to receive live support and talk directly to the team!