Ciao, a prescindere dalle altre cose di contorno, ci sono due "errori" nella logica di funzionamento da te usata.
- Il primo errore sta nell'uso non proprio corretto della funzione substr in questa riga:
Codice PHP:
$codice = substr($rw['codice'], -1);
Supponiamo che dal db ottieni una stringa del genere "2015.00009", per cui vai a prelevare il primo carattere a partire dalla fine della stringa, relativo al valore -1 che hai specificato nel substr. In questo caso $codice sarà uguale a "9".
Supponiamo, ora, che la stringa sia "2015.00010". Cosa ti aspetti che venga restituito usando quello stesso procedimento?
Chiaramente, il carattere prelevato dalla stringa è sempre l'ultimo, per cui $codice, in questo caso, sarà uguale a "0". Trai tu le conseguenze.
Per risolvere dovrai tener conto dell'intero codice di 5 cifre, non solo dell'ultima cifra.
Per cui, quella riga, dovrebbe piuttosto essere così:
Codice PHP:
$codice = substr($rw["codice"], -5);
In tal caso il valore restituito terrà sempre in considerazione tutte le 5 cifre del codice.
Tieni presente che, ai fini dei calcoli successivi, non ha importanza se il valore ha degli zeri iniziali.
- Il secondo errore sta nella costruzione della stringa:
Codice PHP:
$rw['codice'] = date("Y") . ".0000";
echo $rw["codice"] . ++$codice;
Supponiamo che $codice sia "9". Quando vai ad incrementarlo, diventerà "10", giusto? Ma in tal caso vai ad anteporre sempre una stringa di 4 zeri ("0000"), come se ti aspettassi che $codice fosse sempre di una sola cifra. Chiaramente, in questo caso, il risultato sarà invece un codice di 6 cifre ("000010"). E se, ad esempio, $codice fosse stato "950", avresti ottenuto "0000951". Va da se che il procedimento da te usato non ha molto senso.
Chiaramente la stringa da restituire può avere, davanti, un numero di zeri variabile a seconda della lunghezza del codice ottenuto.
Per risolvere puoi usare una delle funzioni sprintf o str_pad:
Soluzioni possibili:
Codice PHP:
$codice = substr($rw["codice"], -5);
echo date("Y") . sprintf(".%05d", ++$codice);
// OPPURE
echo date("Y") . "." . str_pad(++$codice, 5, "0", STR_PAD_LEFT);