Numerare automaticamente campo numerico

  • Creatore Discussione Creatore Discussione Max61
  • Data di inizio Data di inizio

Max61

Utente Attivo
2 Mar 2014
760
4
18
Buongiorno, sono alle prese con un altro problema, come da titolo vorrei numerare il campo numerico 'Num_Prog' automaticamente all'apertura della pagina aumentando di uno il numero maggiore presente nel DB nell'anno in corso, al cambio dell'anno vorrei che il campo Num_Prog ripartisse da 1.

Allego codice dell'input campo Num_Prog:
PHP:
<span class="tip"><strong>Numero Pratica &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input type="text" name="Num_Pratica" value="<?php echo $Num_Pratica; ?>" style="color:black; font-family:arial; font-size: 11pt"; maxlength="6" size="3" placeholder="" required>

Grazie per l'aiuto
Max61
 
Da quale funzione viene valorizzato $Num_Pratica?
 
Ultima modifica:
Ciao, nel frattempo sono riuscito a fare qualcosa, sono riuscito a numerarlo automaticamente, leggendo il DB e incrementando di 1.
Mi rimane la gestione della numerazione nell'anno, cioè che riparta dal numero 1 al 01/01.
Allego codice:
PHP:
//NUMERAZIONE AUTOMATICA
$Num_Pratica = "";
$query = "SELECT Num_Pratica, MAX(Num_Pratica) FROM tblsinistri"; 
	 
$result = mysql_query($query) or die(mysql_error());
$Num_Pratica +1;

// Print out result
while($row = mysql_fetch_array($result)){
	
        $ultimonumero_nelDB="".$row['MAX(Num_Pratica)'];
	$Num_Pratica=$ultimonumero_nelDB + 1;

 }
//FINE NUMERAZIONE AUTOMATICA

Grazie
Max61
 
Prova così
PHP:
$query = "SELECT `id`, `anno`, `Num_Pratica`, COUNT(anno) AS conta FROM `tblsinistri` GROUP BY `anno`";  
      
$result = mysql_query($query) or die(mysql_error()); 


// Print out result 
while($row = mysql_fetch_array($result)){ 
     $conta = row['conta'];
	 $anno = date('Y', time());


	for($conta = 1; $conta <= $conta; $conta++)
	{
		echo $conta . ") Numero Pratica " . $row['Numero_Pratica'] . "<br>";
	}

}

Semplicemente è più pulito.

Vedi cosa ti da
 
Ho provato il tuo codice, ma la pagina non si ferma più, si aggiorna continuamente, siamo arrivati al record:
195480) Numero Pratica 1
partendo da
1) Numero Pratica 1
e ancora non si ferma

Ciao
Max61
 
Ultima modifica:
PHP:
//NUMERAZIONE AUTOMATICA
$Num_Pratica = "";
$query = "SELECT Num_Pratica, MAX(Num_Pratica) FROM tblsinistri";

$result = mysql_query($query) or die(mysql_error());

$AnnoCorrente = date("Y");

if ($AnnoCorrente > $AnnoScrittoNelDB) {
  $Num_Pratica = "1";
}
else {

  $Num_Pratica +1;
  
  // Print out result
  while($row = mysql_fetch_array($result)) {
    
    $ultimonumero_nelDB="".$row['MAX(Num_Pratica)'];
    $Num_Pratica=$ultimonumero_nelDB + 1;
    
  }
}
//FINE NUMERAZIONE AUTOMATICA

prova così, la variabile $AnnoScrittoNelDB dovrebbe riportare l'anno scritto nel database.
 
Ciao, ho provato il tuo codice funziona se disattivo la compilazione automatica del campo 'AnnoSinistro' con l'anno corrente, quindi il campo 'AnnoSolare' che ho creato (viene aggiornato automaticamente con una query UPDATE all'apertura della pagina) che quindi sarà sempre uguale al campo 'AnnoSinistro', vanificando ($AnnoSinistro > $AnnoSolare):


Non so se mi sono spiegato quindi allego codice:

PHP:
//NUMERAZIONE AUTOMATICA
$Num_Pratica = "";
$query = "SELECT Num_Pratica, MAX(Num_Pratica) FROM tblsinistri";

$result = mysql_query($query) or die(mysql_error());

//VALORIZZO I CAMPI DATA
$AnnoSinistro=date("Y");
$Data_Richiesta_Utente =date("d-m-Y");
//FINE VALORIZZO I CAMPI DATA

if ($AnnoSinistro > $AnnoSolare) {
  $Num_Pratica = "1";
}
else {

  $Num_Pratica +1;
  
  // Print out result
  while($row = mysql_fetch_array($result)) {
    
    $ultimonumero_nelDB="".$row['MAX(Num_Pratica)'];
    $Num_Pratica=$ultimonumero_nelDB + 1;
    
  }
}
//FINE NUMERAZIONE AUTOMATICA

Ciao Max61
 
Ciao, ma scusa la variabile $annosolare è quella scritta nel database giusto?

Adesso, lui controlla che l'anno corrente sia maggiore a quello scritto nel database e riparte da 1.
Da quello che ho capito il problema è che te aggiorni il database all'apertura della pagina, quindi il controllo dell'if diventa falso.
Potresti risolvere facendogli aggiornare l'anno solo dopo aver controllato if ($AnnoSinistro > $AnnoSolare), il problema è che se te hai più utenti il problema si ripropone.
Avendo un numero pratica, si potrebbe assegnare un nome utente ad un anno, quindi lui controlla sia il nome utente o un parametro univoco e poi controlla l'anno.

Esempio: Giovanni 2014

Potresti mettere anche nome, cognome e anno, fammi sapere se c'è un parametro univoco non replicabile che salvi nel dabase.

Se postassi il link della pagina o spieghi esattamente cosa deve fare e quando sarebbe molto più semplice aiutarti. :D
 
Ultima modifica:
Cerco di spiegarmi:
vorrei automatizzare la numerazione delle pratiche (campo Num_Pratica) incrementandolo di 1 ad ogni inserimento, questo fino al 31/12, dal 01/01 vorrei che la numerazione ripartisse da 1.
Avrei anche la necessità di poter aggiungere nell'anno X una pratica relativa all'anno X-1 e che incrementasse le pratiche di quell'anno.
Esempio: anno 2014 le pratiche inserite sono 1520, a gennaio 2015 le pratiche inserite sono 80, arriva una pratica che si riferisce all'anno 2014, sarà la numero 1521 e non la 81.
Con la speranza di essermi spiegato ti ringrazio e saluto
Max61
 
ok, quindi possiamo fargli salvare 2015-1 con il numero in grassetto riguardante il numero della pratica.

Giusto?
 
Quindi vorresti associare l anno al numero di pratica se non ho capito male. Io l avevo pensato diversamente ma puo essere una soluzione. Mi fai un esempio?
Grazie
Max61
 
PHP:
//recupero l'anno corrente.
$AnnoSinistro=date("Y");

//recupero la data corrente.
$Data_Richiesta_Utente =date("d-m-Y");

//query mysql di ricerca anno.
$sql_cerca = mysql_query("SELECT * FROM tblsinistri  WHERE (Num_Pratica LIKE '%" . $AnnoSinistro . "%');

//corrispondenze trovate
$trovati = mysql_num_rows($sql_cerca);

//se ci sono risultati incremento il numero della pratica.
if($trovati > 0) {
  
  $Num_Pratica +1;
  
  // Print out result
  while($row = mysql_fetch_array($result)) {
    
    $ultimonumero_nelDB="".$row['MAX(Num_Pratica)'];
    $Num_Pratica=$ultimonumero_nelDB + 1;
    
  }
}
// Se non trovo corrispondenza setto il numero della pratica a 1.
else {
  $Num_Pratica = "1";

//qui aggiorni il DB aggiungendo l'anno e il numero della pratica.
}

Naturalmente io non conosco il nome delle colonne o delle tabelle, quindi controlla che siano corretti.
Il problema è che se tu volessi fare questo controllo per ogni utente, servirebbe un altro dato univoco come il nome.
 
Ultima modifica:
Ciao e grazie, ho provato il tuo codice, ma mi da questo errore:
Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\GestioneSinistri\views\Sinistro_Insert.php on line 249

ecco il codice su quella riga
PHP:
//corrispondenze trovate
$trovati = mysql_num_rows($sql_cerca);

Max61
 
Ultima modifica:
c'è qualcosa di sbagliato
PHP:
$sql_cerca = mysql_query("SELECT * FROM tblsinistri  WHERE (Num_Pratica LIKE '%" . $AnnoSinistro . "%');
controllo di aver dato i nome corretti delle tabelle e delle colonne.
 
E' tutto corretto, l'unica cosa che ho dovuto aggiungere è " alla fine del codice prima della parentesi chiusa
PHP:
$sql_cerca = mysql_query("SELECT * FROM tblsinistri  WHERE (Num_Pratica LIKE '%" . $AnnoSinistro . "%' ");
ma mi da l'errore...forse è quello? Ma se senza il codice non va
 
$sql_cerca = mysql_query("SELECT * FROM tblsinistri WHERE (Num_Pratica LIKE '%" . $AnnoSinistro . "%' ");

ma la parola in maiuscolo è il nome della colonna dove è riportato l'anno?
 
ciao Max,
è chiarissimo come vuoi ottenere la numerazione delle pratiche
ma non è chiaro come definisci che una pratica appartiene all'anno "x"
quale campo associato alla pratica definisce l'anno di appartenenza ? questo campo come è definito nel db ovvero quale formato ha ?
ciao
Marino
 
$sql_cerca = mysql_query("SELECT * FROM tblsinistri WHERE (Num_Pratica LIKE '%" . $AnnoSinistro . "%' ");

ma la parola in maiuscolo è il nome della colonna dove è riportato l'anno?
No la colonna dove e' riportato l anno e' $AnnoSinistro, mentre $Num_Pratica e' il numero progressivo delle pratiche. Ciao
 
Ultima modifica:
Ciao Marino, nella fase di compilazione della pagina dei dati ci sono tra gli altri i campi $AnnoSinistro e $Num_Pratica, $AnnoSinistro è valorizzato all'apertura della pagina da questo codice
PHP:
$AnnoSinistro=date("Y");
$Num_Pratica vorrei che fosse valorizzato automaticamente in modo progressivo all'apertura della pagina da 1 a ∞ nel periodo che va dal 01/01 al 31/12 dell'anno X, mentre nell'anno X+1 vorrei che la numerazione ripartisse da 1.
Il formato del campo $AnnoSinistro è: int(4)
Chiedi se non sono stato chiaro
Ciao
Max61
 

Discussioni simili