Visualizzazione dei risultati da 1 a 8 su 8

Visualizzazione discussione

  1. #1

    Ciclo PHP molto complesso

    Salve a tutti, sono abbastanza nuovo al PHP e sto affrontando alcune problematiche molto toste.
    Vi spiego il mio problema che ormai mi assilla da due giorni e ancora non ho trovato una soluzione.
    Il risultato è un "cartellino online" delle ore lavorate al netto dell'inattività dell'utente. Vi spiego il funzionamento: la mattina l'utente fa "Avvio" su di una pagina e viene registrato un datalog, nel caso il mouse resti fermi per 10 minuti parte uno script che registra i minuti di inattività, al movimento del mouse vengono registrate i minuti di inattività in tabella, al termine del lavoro l'utente fa "Stop" e viene anche qui registrato un datalog. Il risultato come ho detto è cercare le ore lavorate al netto dell'inattività, e questo sono riuscito a farlo seppur con qualche difficoltà, con una sottrazione tra stop e avvio - il tempo di inattività. Il problema sorge quando gli utenti non fanno ciò che gli si era chiesto di fare, ossia premono "Start" o "Stop" più volte o "a caso". Infatti succede che se viene premuto START - STOP, poi di nuovo START - STOP, io a video ho due colonne che mi riportano la stessa data e il risultato (ad esempio 01/10/2015 1 ora - 1/10/2015 1 ora e mezza), ciò che io vorrei è la somma di queste ore lavorate e un controllo sulle azioni che fa l'utente perchè ci sono problemi anche nel caso in cui l'utente faccia START - START - STOP, il programma prende in considerazione solamente il secondo start. Inoltre vorrei che il punto di partenza sia sempre e solo lo start (capita a volta che parte l'inattività per colpa delle donne delle pulizie che muovono il muose e poi lo script parte, ma questi sono casi proprio eccezionali e poi ci penso). Purtroppo educare gli utenti è complicato vorrei risolvere il problema magari con un'indicazione da parte Vostra. Vi posto il codice sotto. A monte di tutto c'è una query che mi tira fuori i vari dati idoperatore, datalog, etc, poi me li vado a recuperare sotto.
    La logica che ho utilizzato: il programma entra e mette blank a tutti i campi fino a che non trova stesso operatore e stessa data e fa il check sulle azioni (da me nominate 1 - Start, 3 - Overtime che andrà ad autoincrementarsi , 4 - Stop). Sul 4 lui fa i calcoli necessari per tirarmi fuori il tempo e funziona benissimo. Ora stavo provando ad utilizzare 2 altre variabili azioneold e azionenew per dirgli se azioneold è diversa da azionenew fai che vai oltre, ma giuro che mi sono perso.
    Idee?



    $RsSql=$oConn->Query($strSql);
    if ($oConn->RecordCount>0)
    $nRec = $oConn->RecordCount;
    else
    $nRec = 0;

    $operatore1 = "";
    $ora1 = "";
    $data1 = "";

    $operatore0 = "";
    $ora0 = "";
    $data0 = "";
    //$nextstep = "1";
    //$primostep = "";
    $azioneold = "";

    /* $str1 = "prova";
    $str2 = "si";
    $pos = strpos($str1,$str2);
    echo $pos;
    */
    while(!$oConn->EOF) {

    $azionenew = $RsSql['azione'];
    //echo $azione ;
    $datafunk = "";
    $data = $RsSql['Data'];
    $cellaora = "";
    $operatore1 = $RsSql['nome'];
    $descrizione = $RsSql['Descrizione'];
    $pos = strpos($azione,$nextstep);
    //echo $pos."-".$nextstep."<br/>";



    SWITCH ($azionenew) {

    case 1:
    //if ( isset($pos) && !empty($pos) ) {
    //$nextstep = 3 || 4;
    if ($azionenew != $azioneold) {

    $datafunk1 = $RsSql['datafunk'];
    //$data1 = substr($RsSql['Data'], 0 , 10);
    $data1 = $RsSql['Data'];
    $overtime = "";
    }

    echo $azionenew;
    //}
    break;

    case 3:
    //if ($pos >0) {
    // $nextstep = 4;
    $overtime += $RsSql['Overtime'];
    echo $azionenew;
    //}

    break;

    case 4:
    //if ($pos >0) {
    //$primostep = 1;
    $descrizione = "Ore Lavorate";
    $datafunk = $RsSql['datafunk'];
    echo $azionenew;

    break;
    //}
    }

    if (($operatore1 == $operatore0) && ($data1 == $data0) && ($azionenew == 4) ) {
    //$stop = $datafunk;

    $lavorato = abs(strtotime($datafunk) - strtotime($datafunk1));
    $minutes = floor($lavorato / 60);
    $cellaora = $minutes - $overtime;
    $cellaora = substr(($cellaora / 60),0,4);
    $StrDati.=" <tr>";
    $StrDati.=" <td>".$RsSql['nome']."</td>
    <td>".$data0."</td>

    <td>".$descrizione."</td>
    <td>".$cellaora."</td>
    </tr>";
    }
    Ultima modifica di chinoknot; 21-10-2015 a 18:18

Tag per questa discussione

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.