[PHP] Non calcola l'ultimo record inserito

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

Max61

Utente Attivo
2 Mar 2014
760
4
18
Salve ho ancora bisogno dell'aiuto del forum, vado a spiegare: ho 2 campi ($tot_oreferiali e $tot_orefestive) tramite query calcolo la loro somma e aggiorno il campo $max_ore.
Il problema nasce quando inserisco nel db il primo record, infatti in questo caso non calcola nulla, mentre quando inserisco il secondo record mi calcola il primo è così via. Praticamente calcola sempre i record già presenti nel db, è possibile fargli calcolare anche quello in fase di inserimento?
Allego codice utilizzato:
PHP:
$query = "SELECT *, (SUM(tot_oreferiali) + SUM(tot_orefestive)) AS Tot_Ore_Fatte FROM tblorario where nominativo='$nominativo' AND matricola = '$matricola'";
$result = mysql_query($query);
$row = mysql_fetch_assoc($result);
$max_ore = $row['Tot_Ore_Fatte']; 
mysql_query("UPDATE tblorario SET max_ore = $max_ore WHERE nominativo = '$nominativo' AND matricola = '$matricola'");
il campo $max_ore dovrebbe assumere il valore della somma (SUM(tot_oreferiali) + SUM(tot_orefestive)) AS Tot_Ore_Fatte, invece lo fa dal secondo record inserito nel db, praticamente il conteggio non è mai corretto per difetto.
Grazie per l'aiuto
Max61
 
Credo che in ordine di cose dovresti fare una cosa del genere!
  • Insert
  • Select
  • Update
  • Select
PHP:
/**PARTE PRESENTE*/
$query = "SELECT *, (SUM(tot_oreferiali) + SUM(tot_orefestive)) AS Tot_Ore_Fatte FROM tblorario where nominativo='$nominativo' AND matricola = '$matricola'";
$result = mysql_query($query);
$row = mysql_fetch_assoc($result);
$max_ore = $row['Tot_Ore_Fatte'];
mysql_query("UPDATE tblorario SET max_ore = $max_ore WHERE nominativo = '$nominativo' AND matricola = '$matricola'");

/**FINE*/
/**AGGIUNGERE*/
$query = "SELECT *, (SUM(tot_oreferiali) + SUM(tot_orefestive)) AS Tot_Ore_Fatte FROM tblorario where nominativo='$nominativo' AND matricola = '$matricola'";
$result = mysql_query($query);
Ma non mi sembra il massimo!
 
Grazie della dritta, appena ho un po'di tempo lo provo, anche se come dici te non è il massimo io di meglio non so fare, l'importante che i risultati siano corretti.
Ciao e grazie
 
ciao Max,
tutto il codice che hai postato può essere sostituito da un'unica query che ti riporto in dettaglio,
PHP:
mysql_query("
UPDATE o
SET o.max_ore =
(
  SELECT SUM(s.tot_oreferiali) + SUM(s.tot_orefestive)
  FROM tblorario s
  WHERE s.nominativo = o.nominativo AND s.matricola = o.matricola
)
FROM tblorario AS o
WHERE o.nominativo = '$nominativo' AND o.matricola = '$matricola'
");
attento ad "o" ed "s"

questa query va eseguita
immediatamente dopo le "insert" fatte nella tabella "tblorario"
ed immediatamente dopo le "update" che dovessero agire sulle colonne oggetto della somma della tabella citata
altrimenti avresti valori non coerenti

ho però qualche pensiero sulla logicità della query stessa,

é ad alta probabilità di incoerenze che potrebbero derivare anche da aggiornamenti "manuali"

non ha una definizione temporale, per cui,
se nella tabella ci fossero anni e mesi diversi, il risultato é un unico valore che aggiorna tutti i record, a parità di nominativo e matricola, stampando un cartellino orologio mensile, o tabella mensile, non avresti i valori dettagliati

il valore potrebbe essere presente nella stessa "insert" o "update" e potrebbe riferirsi allo stesso periodo temporale del record inserito/modificato, in modo da evitare incoerenze

ma tu conosci le necessità ed hai sicuramente ben valutato
 
Ultima modifica:
Grazie Marino 51, domani penso di provare il codice che hai postato, oggi purtroppo lo passo in ospedale da mio padre ricoverato e sto scrivendo dal cellulare.
Con questo programma devo contare le ore feriali e festive di ogni persona e nell'anno ognuno non deve superare la quota di 180, per questo ho fatto una query che lancio prima dell'insert è se supera lancio un echo e un exit, per cui non può fare altre ore. Però visto che ne parliamo mi è sorto un dubbio, ed è questo: poniamo che una persona abbia fatto nell'anno 179 ore quando va a caricare un altra giornata di lavoro supera le 180 ore che però verranno conteggiate al successivo giorno lavorativo, quando in fase di insert scatta il controllo delle ore fatte, non prima. Giusto?
Te che ne pensi?
Grazie
Max61
 
con l'augurio che tuo padre si rimetta bene e in fretta,

fatto nell'anno 179 ore quando va a caricare un altra giornata di lavoro supera le 180 ore che però verranno conteggiate al successivo giorno lavorativo
come ben sai, tutto dipende dal codice che sviluppi,
nel caso delle 179 ore, potresti fare un controllo prima dell'insert
e successivamente gestire al meglio il valore da memorizzare

prova ad indicare cosa deve succedere se eccede le 180 ore oltre all' "echo" (cosa ne fai delle ore in più)
e posta il codice che ci ... ragioniamo

in gamba, e cura il babbo !
 
Grazie Marino51, il babbo sta migliorando e salvo complicazioni a metà settimana lo dovrebbero dimettere.
Prima dell'insert faccio un controllo cosi
PHP:
$sql   = "SELECT id, nominativo, mese, (SUM(tot_oreferiali) +
SUM(tot_orefestive)) AS Tot_Ore_Fatte FROM tblorario WHERE nominativo =
'{$nominativo}' and matricola = '{$matricola}' and max_ore > 179";
     $query = mysql_query($sql) or die(mysql_error());

     if (mysql_result($query, 0) > 0) {
     }
     elseif (mysql_result($query, 0) == 0) {
         echo "<b><br><i><br><span
style=\"color:blue\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<span style=\"color:red; font-size: 14pt\">Attenzione, la combinazione
digitata: <span style=\"color:blue\"><br><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
Nominativo:&nbsp;&nbsp;". $nominativo ."<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
Matricola:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;". $matricola ."<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
Ore fatte:&nbsp;&nbsp;". $max_ore = $row['Tot_Ore_Fatte'] ."</span><br><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
risulta in archivio!</span><span style=\"color:red; font-size: 14pt\">
<hr />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<br><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<span style=\"color:red; font-size: 14pt\">Torna...&nbsp;&nbsp;<input
style='color:blue' type='button' value='      Back       '
onclick='history.go(-1);return true;'></form>";
     }
Ciao
Max 61
 
La prima parte del codice che ho postato dove fa la verifica delle ore è relativa al progetto, la seconda è di un altro programma che fa una verifica simile ma lo adatto al progetto.
Le ore in più non andrebbero fatte, stavo pensando di organizzare qualcosa del tipo far visualizzare ad oguno nella fase di digitazione oraria il totale ore fatte, in modo da regolarsi.
Che ne pensi?
 
Buongiorno Marino51, ti invio la pagina di inserimento completa perchè mi sono perso.
Oltre al calcolo delle ore fatte troverai anche il calcolo degli importi che variano da livello a livello e da ore feriali a ore festive.
Il calcolo degli importi, come per quello delle ore avviene correttamente dal secondo record in poi, quindi una volta risolto il problema del conteggio delle ore contavo di risolverlo in modo analogo e quindi non l'ho nemmeno mensionato nel post.
Grazie per la pazienza
Max61
 

Allegati

ho riguardato la prima parte che contiene i controlli, riducendo un po' il codice per capire meglio,
ho modificato anche il controllo delle 180 ore,
la somma (feriale+festivo) dei valori inseriti, sommata al totale calcolato nel db non deve superare le 180 ore,
nel caso le 180 ore fossero superate, viene generato l'errore,
questo prima di qualunque insert nel db, ovvero, in questo modo, non saranno mai presenti nominativi con più di 180 ore
attento però al limite temporale che non vedo nelle query

ti lascio il codice che ho tentato di rendere più leggibile, in esso ho trovato molte "require, insert" che ho lasciato perché non conosco il contenuto ....
PHP:
<!--FORMATTA LA PAGINA ARIAL-->     
</FONT></P>
<FONT FACE="Arial">
<!--FINE FORMATTA LA PAGINA ARIAL--> 

<?php
session_start();

require_once 'LOG.php';           // richiamo lo script responsabile del file LOG
require_once 'Connessione.php';   // connessione al database

$db= 'tblorario';

$db = mysql_connect($host, $user, $password) or die ("Impossibile connettersi al server");
echo " ";

mysql_select_db($database, $db) or die ("impossibile connettersi al database");
echo " ";

//RECUPERA IL NOME DI CHI SI LOGGA-->

require_once 'Connessione.php';

$table = 'users';

$myconn =  new mysqli($host, $user, $password);
if ($myconn->connect_error) { die("Connection failed: " . $myconn->connect_error); }

$myconn->select_db($database);

require_once 'config.php';
require_once 'Connessione.php';
$resulttblusers = mysql_query("select user_name from users") or die(mysql_error());

$row = mysql_fetch_array($resulttblusers);
 
?>

<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">

<?php
require_once 'config.php';
require_once 'Connessione.php';
$resulttblusers = mysql_query("select user_name from users") or die(mysql_error());

$row = mysql_fetch_array($resulttblusers);

//FINE RECUPERA IL NOME DI CHI SI LOGGA-->

$annocalcolo=date("Y");

mysql_select_db($database, $db) or die ("impossibile connettersi al database");
echo " ";

$mese = $_POST['mese'];
$anno = $_POST['anno'];

//INIZIO PER IL CAMBIO DI APOSTROFO
$nominativo= $_POST['nominativo'];
$nominativo=str_replace($nominativo, " ' ", " '' ");
$nominativo=eregi_replace("'","&lsquo;","$nominativo"); // SCRIPT
//FINE PER IL CAMBIO DI APOSTROFO

//CONVERTE LE PRIME LETTERE DI OGNI PRIMA PAROLA IN MAIUSCOLO
$nominativo = mysql_real_escape_string(htmlspecialchars($_POST['nominativo']));
$nominativo = htmlentities($_POST['nominativo']);
$nominativo = addslashes($_POST['nominativo']);
$nominativo = ucfirst(strtolower($nominativo));
$nominativo = ucwords($nominativo);

$orain_feriale  = $_POST['orain_feriale'];
$oraout_feriale = $_POST['oraout_feriale'];
$orain_festive  = $_POST['orain_festive'];
$oraout_festive = $_POST['oraout_festive'];
$matricola      = $_POST['matricola'];
$livello        = $_POST['livello'];
$data           = date("d-m-Y", strtotime($_POST['data']));

// --------------------------------------------------------------------------------------- controlli
function msgErr($str)
{
    echo str_repeat("<br>",6).str_repeat("&nbsp;",48)
         . "<left><b><span style='color:white; font-size: 16pt'>"
         . "<span style='color:blue height:1; width:1; background-color:red'>&nbsp;"
         . $str
         . "&nbsp;</span>".str_repeat("&nbsp;",8)
         . "<input type='button' value='         Back         ' onclick='history.back(1)'></left>";
    exit;   
}

if ($orain_feriale > 0 && !$oraout_feriale)
    { msgErr("Digita uscita straordinario feriale!!!"); }

if (!$orain_feriale && $oraout_feriale > 0)
    { msgErr("Digita ingresso straordinario feriale!!!"); }

if ($orain_festive > 0 && !$oraout_festive)
    { msgErr("Digita uscita straordinario festivo!!!"); }

if (!$orain_festive && $oraout_festive > 0)
    { msgErr("Digita ingresso straordinario festivo!!!"); }

if (!$orain_feriale && !$oraout_feriale && !$orain_festive && !$oraout_festive)
    { msgErr("Nessun orario digitato!!!"); }

if (!$nominativo && !$matricola && !$livello)
    { msgErr("Non hai digitato: Nome, Matricola e Livello!!!"); }
 
if (!$nominativo && !$matricola && $livello > 0)
    { msgErr("Non hai digitato il nominativo e la matricola!!!"); }
 
if (!$nominativo && !$livello && $matricola > 0 )
    { msgErr("Non hai digitato il nome e il livello 1!!!"); }

if ($nominativo > 0 && !$livello && !$matricola)
    { msgErr("Non hai digitato il livello 2!!!"); }

if (!$nominativo && $matricola > 0 && $livello > 0)
    { msgErr("Non hai digitato il nome!!!"); }

if ($nominativo > 0 && $matricola > 0 && $livello > 0)
    { msgErr("OK!!!"); }

if ($orain_feriale > 0 && !$oraout_feriale > 0 && !$orain_festive > 0 && !$oraout_festive > 0)
    { }


//VERIFICA SE HA FATTO 180 ORE

$nominativo = mysql_real_escape_string($nominativo);
$matricola  = mysql_real_escape_string($matricola);

$tot_oreferiali = date("H.i", strtotime($oraout_feriale) - strtotime($orain_feriale) - 3600);               
$tot_orefestive = date("H.i", strtotime($oraout_festive) - strtotime($orain_festive) - 3600);

$tot_ore = $tot_oreferiali + $tot_orefestive;

$db = mysql_connect($host, $user, $password) or die ("Errore nella connessione.");
mysql_select_db($database, $db) or die ("Errore nella selezione del database.");

$query = "SELECT ( SUM(tot_oreferiali) + SUM(tot_orefestive) ) AS Tot_Ore_Fatte FROM tblorario where nominativo='$nominativo' AND matricola = '$matricola'";
$result = mysql_query($query);
$row = mysql_fetch_assoc($result);
$max_ore = $row['Tot_Ore_Fatte'];

$tot_ore = $tot_oreferiali + $tot_orefestive + $max_ore;

if ($tot_ore > 180)
    { msgErr("Hai gi&aacute; fatto $tot_ore ore di straordinario superando le 180"); }

// FINE VERIFICA SE HA FATTO 180 ORE//
?>
 
Grazie per la dritta, per fare un codice così pulito io da autodidatta non so nemmeno da che parte cominciare.
La parte funziona perfettamente, ma rimane sempre l'altra parte di codice dove calcola le ore e i costi, il fatto è che non riesco a far contare tutti i record:
allego codice che utilizzo, magari quando hai tempo me lo aggiusti...
PHP:
//RECUPERO COSTI B1
require "Connessione.php";
$table = "b1";
/* impostiamo la query*/
$sqlquery = "SELECT * FROM $table";
$result = mysql_query($sqlquery);
$number = mysql_num_rows($result);
$i = 0;
if ($number < 1) {
  print "<center><p>La ricerca non ha prodotto nessun risultato (LIVELLO B1)</p></center>";
}else{
  while ($number > $i) {
    $costo_feriale = mysql_result($result,$i,"costo_feriale");
    $costo_festivo = mysql_result($result,$i,"costo_festivo");
    $i++;
  }
}
//FINE RECUPERO COSTI B1

/* LIVELLO B1*/
    $livello = $_POST['livello'];
    if ($livello == 'B1' && $orain_feriale >0 && !$orain_festive){
        $tot_oreferiali = date("H.i", strtotime($oraout_feriale) - strtotime($orain_feriale) - 3600) . " ore feriali lavorate<br />\n";              
        $costooraferiale = $costo_feriale;
    ?>
    <input type="text" name="costooraferiale" value="<?php echo $costooraferiale; ?>" style="color:black; font-family:arial; font-size: 14pt"; maxlength="5" size="5" placeholder="" readonly>
    <?php
    $costototferiale = $tot_oreferiali * $costooraferiale;
    $livello = $_POST['livello'];
} elseif ($livello == 'B1' && $orain_festive >0 && !$orain_feriale) {
        $tot_orefestive = date("H.i", strtotime($oraout_festive) - strtotime($orain_festive) - 3600) . " ore festive lavorate<br />\n";
        $costoorafestivo = $costo_festivo;
    ?>
    <input type="text" name="costoorafestivo" value="<?php echo $costoorafestivo; ?>" style="color:black; font-family:arial; font-size: 14pt"; maxlength="5" size="5" placeholder="" readonly>
    <?php
    $costototfestivo = $tot_orefestive * $costoorafestivo;  
        $livello = $_POST['livello'];
} elseif ($livello == 'B1' && $orain_feriale >0 && $livello == 'B1' && $orain_festive >0) {
        $tot_oreferiali = date("H.i", strtotime($oraout_feriale) - strtotime($orain_feriale) - 3600) . " ore feriali lavorate<br />\n";
        $costooraferiale = $costo_feriale;
        ?>
        <input type="text" name="costooraferiale" value="<?php echo $costooraferiale; ?>" style="color:black; font-family:arial; font-size: 14pt"; maxlength="5" size="5" placeholder="" readonly>
        <?php
        $costototferiale = $tot_oreferiali * $costooraferiale;
        $tot_orefestive = date("H.i", strtotime($oraout_festive) - strtotime($orain_festive) - 3600) . " ore festive lavorate<br />\n";
        $costoorafestivo = $costo_festivo;
    ?>
    <input type="text" name="costoorafestivo" value="<?php echo $costoorafestivo; ?>" style="color:black; font-family:arial; font-size: 14pt"; maxlength="5" size="5" placeholder="" readonly>
    <?php
    $costototfestivo = $tot_orefestive * $costoorafestivo;
    }
    /* FINE LIVELLO B1*/  
   
   
    //RECUPERO COSTI B2
require "Connessione.php";
$table = "b2";
/* impostiamo la query*/
$sqlquery = "SELECT * FROM $table";
$result = mysql_query($sqlquery);
$number = mysql_num_rows($result);
$i = 0;
if ($number < 1) {
  print "<center><p>La ricerca non ha prodotto nessun risultato (LIVELLO B2)</p></center>";
}else{
  while ($number > $i) {
    $costo_feriale = mysql_result($result,$i,"costo_feriale");
    $costo_festivo = mysql_result($result,$i,"costo_festivo");
    $i++;
  }
}
//FINE RECUPERO COSTI B2

/* LIVELLO B2*/
    $livello = $_POST['livello'];
    if ($livello == 'B2' && $orain_feriale >0 && !$orain_festive){
        $tot_oreferiali = date("H.i", strtotime($oraout_feriale) - strtotime($orain_feriale) - 3600) . " ore feriali lavorate<br />\n";              
        $costooraferiale = $costo_feriale;
    ?>
    <input type="text" name="costooraferiale" value="<?php echo $costooraferiale; ?>" style="color:black; font-family:arial; font-size: 14pt"; maxlength="5" size="5" placeholder="" readonly>
    <?php
    $costototferiale = $tot_oreferiali * $costooraferiale;
    $livello = $_POST['livello'];
} elseif ($livello == 'B2' && $orain_festive >0 && !$orain_feriale) {
        $tot_orefestive = date("H.i", strtotime($oraout_festive) - strtotime($orain_festive) - 3600) . " ore festive lavorate<br />\n";
        $costoorafestivo = $costo_festivo;
    ?>
    <input type="text" name="costoorafestivo" value="<?php echo $costoorafestivo; ?>" style="color:black; font-family:arial; font-size: 14pt"; maxlength="5" size="5" placeholder="" readonly>
    <?php
    $costototfestivo = $tot_orefestive * $costoorafestivo;  
        $livello = $_POST['livello'];
} elseif ($livello == 'B2' && $orain_feriale >0 && $livello =='B2' && $orain_festive >0) {
        $tot_oreferiali = date("H.i", strtotime($oraout_feriale) - strtotime($orain_feriale) - 3600) . " ore feriali lavorate<br />\n";
        $costooraferiale = $costo_feriale;
    ?>
        <input type="text" name="costooraferiale" value="<?php echo $costooraferiale; ?>" style="color:black; font-family:arial; font-size: 14pt"; maxlength="5" size="5" placeholder="" readonly>
        <?php
        $costototferiale = $tot_oreferiali * $costooraferiale;
        $tot_orefestive = date("H.i", strtotime($oraout_festive) - strtotime($orain_festive) - 3600) . " ore festive lavorate<br />\n";
        $costoorafestivo = $costo_festivo;
    ?>
    <input type="text" name="costoorafestivo" value="<?php echo $costoorafestivo; ?>" style="color:black; font-family:arial; font-size: 14pt"; maxlength="5" size="5" placeholder="" readonly>
    <?php
    $costototfestivo = $tot_orefestive * $costoorafestivo;
    }
    /* FINE LIVELLO B2*/  


$db = mysql_connect($host, $user, $password);
if ($db == FALSE)
die ("Errore nella connessione.");
mysql_select_db($database, $db)
or die ("Errore nella selezione del database.");

$nominativo = mysql_real_escape_string($nominativo);
$matricola = mysql_real_escape_string($matricola);

 // Variabile in cui accumulare le somme
$totale = 0;

// "Preparazione" delle query
$queries = array();
$queries[] = "SELECT *, (SUM(costototferiale) + SUM(costototfestivo)) AS Tot_costo FROM tblorario";

// Esecuzione delle query ed aggiornamento della somma
foreach ($queries as $query) {
    $result = mysql_query($query);
    $row = mysql_fetch_assoc($result);
    $totale += $row['Tot_costo'];
    echo "<br>totale costo ", $totale;

$impegno_costo=$totale;

mysql_query("UPDATE tblcapitolo SET costo_totale = '$impegno_costo'");
mysql_query("UPDATE tblcapitolo SET tblcapitolo.residuo = tblcapitolo.impegno-tblcapitolo.costo_totale");

}

    $query = "INSERT INTO tblorario (nominativo, orain_feriale, oraout_feriale, orain_festive, oraout_festive, tot_oreferiali, tot_orefestive,
    matricola, livello, data, mese, anno, costooraferiale, costototferiale, costoorafestivo, costototfestivo, impegno_costo, max_ore)
           
            VALUES ('$nominativo', '$orain_feriale', '$oraout_feriale', '$orain_festive', '$oraout_festive', '$tot_oreferiali', '$tot_orefestive',
                    '$matricola', '$livello', '$data', '$mese', '$anno', '$costooraferiale', '$costototferiale', '$costoorafestivo',
                    '$costototfestivo', '$impegno_costo', '$max_ore')";
 
   // invio la query
   $result = mysql_query($query);
 
   // controllo l'esito
   if (!$result) {
                //die("<span style=\"color:red: font-size: 20pt\"Errore nell'inserimento. Riprova...</span>" . mysql_error());              
   }
 
   mysql_query("
UPDATE o
SET o.max_ore =
(
  SELECT SUM(s.tot_oreferiali) + SUM(s.tot_orefestive)
  FROM tblorario s
  WHERE s.nominativo = o.nominativo AND s.matricola = o.matricola
)
FROM tblorario AS o
WHERE o.nominativo = '$nominativo' AND o.matricola = '$matricola'
");
   
   
     header('location:../views/Orario_Insert.php');//reindirizza alla pag
?>
Grazie infinite
Max61
 
"// FINE VERIFICA SE HA FATTO 180 ORE//"
terminati i controlli e superati con successo, dovresti fare l'"insert" del record con i nuovi orari

nel tuo script vedo solo in fondo la chiamata di "Orario_Insert.php'",
secondo me è in posizione sbagliata,
anziché chiamare uno script in questo modo,
devi eseguire l'operazione di "insert" come detto

nel momento in cui il record è stato correttamente inserito,
tutte le select successive dovrebbero estrarre tutti i dati, compreso l'ultimo

prova questa modifica e fai sapere
 
Buongiorno, più tardi ci provo, però volevo dirti che Orario_Insert.php è la form dove vengono inserite le ore;
E strutturato così: Orario_Insert.php > InserisciOrario.php > Orario_Insert.php, pronto per inserire altri orari. Te l'ho voluto precisare perché non volevo che traesse in inganno la parola insert.
Max61
 
Ciao Marino51, ho provato a mettere la query di insert dopo il controllo delle 180 ore, ma così non mi calcola ne il totale ore e nemmeno il costo orario; io il programma l'avevo pensato così:
-controllo dei dati immessi dall'utente (orari, e campi non compilati), ed è la parte che mi hai aggiustato te;
-in base hai dati immessi andare a leggere nel db i costi orari in base al livello e calcolare il totale della giornata distinto tra ore feriali e ore festive;
-sommare i costi feriali e/o festivi e aggiornare la tabella tblcapitolo dove c'è l'importo massimo da spendere a cui verrà sottratto il costo giornaliero
-poi faccio l'insert del record
-mhhhhhh..mi sono accorto mentre scrivevo questi passaggi che così non potrà mai leggere il record appena inserito perchè è l'ultima cosa che fa prima di uscire e tornare nella form di inserimento orario, QUINDI E' QUI CHE DOBBIAMO AGIRE, RECUPERARE I DATI E RICALCOLARLI?
Mi sto perdendo...
Qualche idea?
Grazie
Max61
 

Discussioni simili