• User Attivo

    Eh ma purtroppo non ho accesso al demone (credo si chiami cosi) cron. Ma io mi domando... in tutti i cms o forum c'è la data e tutto il database si aggiorna in base alla variabile temporale. Che sistema utilizzano? Non certo il cron visto che spesso è bloccato dal provider.


  • ModSenior

    Fanno un controllo su ogni pagina, di quando è stato lanciato lo script l'ultima volta, sistema che utilizza più risorse del server...


  • User Attivo

    Si ma tale controllo è comunque automatico immagino. Per fare il controllo o qualcuno visualizza la pagina o automatizza la sua esecuzione. Questo automatismo è sempre cron o sbaglio?


  • ModSenior

    Viene fatto sulle pagine, quando un visitatore entra in una pagina del cms lo script esegue anche questo controllo


  • User Attivo

    Quindi se non posso utilizzare cron (sto su Aruba e credo lo blocchi) o mi impegno ogni giorno a refreshare lo script o devo rinunciare. Giusto?


  • ModSenior

    Usi cron esterni... che si occupino loro di visitare una volta al giorno(o più volte) la tua pagina


  • User Attivo

    Ne conosci qualcuno? Sai conosco cron da ieri 🙂


  • ModSenior

    Basta cercare free cron su google 😉
    Se ne trova parecchi...


  • User Attivo

    Ok, ho trovato un servizio che pare essere molto valido. Adesso vorrei tornare un attimo sullo script perchè ho un problema. Farò degli esempi per cercare di farmi capire.

    Tabella ---> scadenze_clienti
    --Nome--Durata--
    Cliente1----90-----
    Cliente2----120----
    Cliente2----360----
    [php]$result = mysql_query("SELECT * FROM ".PREFIX."scadenze_clienti")
    or die(mysql_error());
    $row = mysql_fetch_array( $result );

    $days = $row['durata'];
    $cron = '1';
    $nuova_durata = $days - $cron;

    mysql_query("UPDATE ".PREFIX."scadenze_clienti SET durata='$nuova_durata'")
    or die(mysql_error());[/php]Il punto è che in questo modo tutti i valori nel campo Durata si equivalgono quindi 90, 120, 360 diventano 90, 90, 90. E' logico pensare di mettere nell'UPDATE un WHERE ma non so quale argomento porre.


  • ModSenior

    Ciao,

    puoi fare una sola query cosi:
    mysql_query("UPDATE ".PREFIX."scadenze_clienti SET durata=durata-1")

    In questo modo ti decrementa tutti di 1 😉


  • User Attivo

    @Kian said:

    Ok, ho trovato un servizio che pare essere molto valido. Adesso vorrei tornare un attimo sullo script perchè ho un problema. Farò degli esempi per cercare di farmi capire.

    Tabella ---> scadenze_clienti
    --Nome--Durata--
    Cliente1----90-----
    Cliente2----120----
    Cliente2----360----
    [php]$result = mysql_query("SELECT * FROM ".PREFIX."scadenze_clienti")
    or die(mysql_error());
    $row = mysql_fetch_array( $result );

    $days = $row['durata'];
    $cron = '1';
    $nuova_durata = $days - $cron;

    mysql_query("UPDATE ".PREFIX."scadenze_clienti SET durata='$nuova_durata'")
    or die(mysql_error());[/php]Il punto è che in questo modo tutti i valori nel campo Durata si equivalgono quindi 90, 120, 360 diventano 90, 90, 90. E' logico pensare di mettere nell'UPDATE un WHERE ma non so quale argomento porre.

    Perchè insistere così. Forse mi sfugge qualcosa perchè con un semplice while della tabella puoi decrementare, per ogni utente, il valore desiderato ed includere nello stesso ciclo vari controlli. Il WHERE da poter porre sarebbe quello di escludere i clienti con il campo durata uguale a 0 (zero)
    Sbaglio o stiamo parlando di due cose diverse
    Ciao


  • ModSenior

    Per fare quello che dici tu è sufficiente questa query, senza alcun ciclo o altro...
    [php]
    mysql_query("UPDATE ".PREFIX."scadenze_clienti SET durata=durata-1 WHERE durata != '0'")
    [/php]


  • User Attivo

    Grazie mille a tutti 😉 funziona che è una favola. Vi chiedo l'ultima cosa (spero sia l'ultima). Con il cron i giorni passano 30, 29, 28... 8, 7 (...) bene vorrei che quando mancano 7 giorni (durata = 7) partisse una mail. Ho già fatto tutto.
    [php]$query = "SELECT * FROM ".PREFIX."scadenza_clienti WHERE durata='7'";
    $query_ret = mysql_query($query);

    while($sql_return = mysql_fetch_assoc($query_ret))
    {
    $query_1 = "SELECT * FROM ".PREFIX."clienti WHERE id_cliente='$sql_return[id_cliente]'";
    $query_ret_1 = mysql_query($query_1);
    }

    while($sql_return_1 = mysql_fetch_assoc($query_ret_1))
    {
    $msgformat = "Gentile $sql_return_1[nome] $sql_return_1[cognome],
    Restano $sql_return[durata] giorni alla scadenza del contratto";

    mail("$sql_return_1[mail]", "Restano $sql_return[durata] giorni alla scadenza", "$msgformat", "From: Miaditta <miamail>");
    }[/php]Il codice, anche se un può impicciato (l'ho dovuto anche "censurare" in certi punti perchè non me lo faceva postare), fa il sulo lavoro ma per metà. Invia il messaggio solo al primo record della tabella. Non riesco a dare alle variabili **$sql_return[nomecampo] **la valenza di array. Valgono come singolo record. Come l'avevo intesa io $sql_return[mail] corrisponde a tutti gli indirizzi mail di tutti i clienti con durata=7 :mmm:


  • User Attivo

    [..]
    E' normale perchè nel secondo ciclo while è incluso solo l'ultimo record del primo ciclo while. In pratica così è inutile metterlo. Prova ad includere il secondo ciclo nel primo. Dovrebbe fare qualcosa non ne sono certo devo vedere qualche altra possibilità.


  • User Attivo

    Ma lol che lo facevo a fare il cliclo? :yuppi: Il problema era quello. Adesso le email partono che è una bellezza tutto con array. Grazie grazie 😉


  • User Attivo

    FORSE QUESTO TI E' PIU' UTILE

    $query = "SELECT * FROM ".PREFIX."scadenza_clienti WHERE durata='7'";
    $query_ret = mysql_query($query);

    // QUI IO USO UN'ALTRA SINTASSI
    while($obj_return = mysql_fetch_object($query_ret))[INDENT] {
    [/INDENT][INDENT]$ID_CLIENTE = ($obj_return->id_cliente); // ID CLIENTE TABELLA SCADENZA
    [/INDENT][INDENT] $query_1 = "SELECT * FROM ".PREFIX."clienti WHERE id_cliente='$ID_CLIENTE'";
    $query_ret_1 = mysql_query($query_1);
    $obj_mail = mysql_fetch_object($query_ret_1);
    $NOME = ($obj_mail->nome); // NOME DEL CLIENTE
    $COGNOME = ($obj_mail->cognome); // COGNOME DEL CLIENTE
    $DURATA = ($obj_mail->durata); // DURATA CONTRATTO

    // CONTROLLO PER UNA DICITURA CORRETTA - QUESTO PUO' SERVIRTI NEL CASO 
    

    // IN CUI VUOI SPEDIRE ALTRE MAIL POCO PRIMA DELLO SCADERE O MAGARI IL GIORNO PRIMA
    if ($DURATA >= 2)
    {
    $RESTA = "Restano";
    $GIORNI = "giorni";
    }
    else
    {
    $RESTA = "Resta";
    $GIORNI = "giorno";
    }

    $EMAIL = ($obj_mail->mail); // MAIL DEL CLIENTE
    $msgformat = "Gentile $NOME $COGNOME,
    $RESTA $DURATA $GIORNI alla scadenza del contratto";
    
    mail($EMAIL, "$RESTA $DURATA $GIORNI alla scadenza", "$msgformat", "From: Miaditta <$miamail>");
    

    [/INDENT] } // CHIUDO WHILE