• User Attivo

    Ricapitoliamo...

    Codice usato:

    [PHP]$sql="SELECT ora_utilizzo_script FROM ore_utilizzo_script WHERE id='$id'";
    $query = @mysql_query ($sql) or die (mysql_error());

    while ($row = mysql_fetch_array($query)) {

    $ora_ultimo_inserimento="$row[ora_utilizzo_script]"; 
    Function calcolaOre($prima,$seconda) 
    { 
        $vettore1=explode(":",$prima); 
        $vettore2=explode(":",$seconda); 
        $diff=mktime($vettore2[0], $vettore2[1], 0,1,1,2000) - mktime($vettore1[0], $vettore1[1],0,1,1,2000); 
        $minuti=floor($diff/60); 
        return $minuti; 
    } 
    $ora_attuale=date("G:i"); 
    $differenza=calcolaOre($ora_ultimo_inserimento,$ora_attuale); 
    if($differenza>60) 
    { 
     
    $deposito_aggiungivo = 3 * 2; 
    
    $sql="UPDATE ore_utilizzo_script SET ora_utilizzo_script=$ora_attuale WHERE id='$id'"; 
        $query = @mysql_query ($sql) or die (mysql_error()); 
    
    echo "
    $deposito_aggiungivo
    $ora_attuale";
     
    $sql="UPDATE soldi_utente SET deposito_soldi=$deposito_aggiungivo WHERE id='$id'"; 
        $query = @mysql_query ($sql) or die (mysql_error()); 
    } 
    else 
    { 
        header('Location: ../errore.php'); 
        exit; 
    } [/PHP]
    

    L'echo lo ho inserito per sapere che valori mi andava a scrivere... Ed ecco cosa mi dava la pagina internet dopo l'esecuzione del codice:

    6 14:48You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ':48 WHERE id='3'' at line 1
    

  • User Attivo

    Grazie, consultando altri topic ho trovato risposta al problema... Bastava mettere delle ' '... Ringrazio il forum perché si rivela sempre una grande fonte di informazione 🙂


  • ModSenior

    Mannaggia era colpa degli apici?


  • User Attivo

    Si... pultroppo si... Però ora facendo girare lo script ho notato una cosa... E' difficile da spiegare e quindi faccio un esempio...

    Ora sono le 12:35...
    Se l'orario precedente è 11:00 (quindi 1 ora e 25 minuti prima) lo script viene eseguito...
    Se l'orario precedente è 14:00 (quindi 1 ora e 25 minuti dopo [quindi è del giorno prima]) lo script mi invia alla pagina di errore..

    Quindi se il salvataggio è del giorno prima, non esegue la differenza in modo corretto. Se il salvataggio è dello stesso giorno viene eseguito correttamente.


  • ModSenior

    Purtroppo non ho fatto i test quindi non saprei... visto che nel campo del database ci potresti salvare la data in formato now quindi estesa.
    Potresti effettuare il controllo di restrizione solo se il giorno in cui si fa la richiesta è diverso da quello salvato in database.
    In caso sia lo stesso giorno allora controlli i minuti di differenza.


  • User Attivo

    Il codice che mi hai fornito fa una vera e propria sottrazione (orario attuale - orario ultimo inserimento) e se l'orario precedente è minore di quello attuale la differenza sarà positiva mentre al contrario sarà negativa... Quindi basta mettere che che la differenza in valore assoluto deve essere maggiore di 60... Ora come ora l'if considera vero solo se la differenza è maggiore di 60 e è positiva... Ora la domanda è... Come si fa a considerare il 60 come un valore assoluto??


  • ModSenior

    In che senso valore assoluto?
    Se è negativo diventa positivo?


  • User Attivo

    Nel senso che guardiamo cosa facciamo fare all'"if"

    if($differenza>60)

    Se la differenza è un numero negativo darà errore...
    Se la differenza è un numero positivo e maggiore di 60 farò eseguire lo script...


  • ModSenior

    Beh ma questo accade solo quando il giorno è diverso o sbaglio?


  • User Attivo

    Allora... Per capire cosa nn va ho messo un echo di tutte le variabili...

    [PHP]
    echo "$differenza";
    [/PHP]

    Con varie prove ho visto che assume valori negativi... e nonostante maggiori di 60 l'if non lo riconosce perché vede un - prima del 60... Basta mettere che l'if non legga il possibile - prima del numero e il codice dovrebbe funzionare 🙂


  • ModSenior

    Basta che funzioni, mi raccomando fai tutti i test delle possibilità che ci sono.


  • User Attivo

    OK testato e funziona... grazie 1000 ancora... E alla prossima 😄