- Home
- Categorie
- Coding e Sistemistica
- MYSQL e altri Database
- Mysql + PHP: Update $valore-1 ad ogni giorno che passa
-
Mysql + PHP: Update $valore-1 ad ogni giorno che passa
Ciao
Sono nella fase finale dello sviluppo di un pannello Billing + Mailer + tanti altri servizietti che mi interessano. Adesso però proprio all'ultimo passo mi sono bloccato. Vengo al punto.
Un cliente acquista un servizio con menu a tendina e può scegliere la durata del contratto
[php]<select size="1" id="durata" name="durata">
<option value="30">1 mese</option>
<option value="90">3 mesi</option>
<option value="180">6 mesi</option>
<option value="270">9 mesi</option>
<option value="360">12 mesi</option>
</select>[/php]Come potete intuire al submit mi salvo la durata del contratto in giorni e considero tutti i mesi di 30 giorni. Il dato viene salvato nel campo durata della tabella servizi nel database (mysql).Ho già un mailer system che invia email ai clienti raccogliendo tutti i dettagli in base all'id cliente. Il punto è che devo sempre esserci io a premere "Invia". Vorrei automatizzare il tutto in questo modo.
Pippo compra un servizio per 3 mesi (90 giorni). Il dato 90 viene salvato nel database
[php]INSERT INTO servizi (durata) VALUE ($durata)[/php]A questo punto ogni giorno che passa il campo deve essere aggiornato automaticamente
[php]UPDATE servizi SET durata=$durata-1[/php]
Quando mancano 7, 3 e **1 **giorno alla fine del contratto partono le email che ho già preimpostate nel sistema.Come faccio a esprimere in php l'idea che ad ogni giorno che passa quel campo deve essere ridotto di 1?
Grazie
-
Ciao Kian,
Puoi mettere lo script in cron, facendo dcrementare ogni giorno il campo e nel caso manchino 7,3 o 1 giorno invii un email.
Esistono numerosi servizi di cron gratuiti esterni che puoi usare, se non puoi farlo dal tuo server
-
Wow grazie mille... non solo mi hai risposto, mi hai aperto nuovi orizzonti hihi
-
Dunque direi che c'è un grosso problema
giorgiotave.it/forum/php-mysql/41570-chicca-d-utilizzare-cron-senza-account-di-root.html
Ho utilizzato questo metodo per sottrarre il valore 1 da un campo in una tabella del database. Per provarlo la prima volta ho impostato l'esecuzione dello script ogni 30 secondi. Quando ho visto che funzionava ho aggiunto i dettagli e messo tutto online. A questo punto mi sono reso conto che vengono letteralmente spammati ogni 30 secondi tutti i miei script per 2 volte!
oo
Cancellare il php, eliminare gli script, fare die(), ignore_user_abort(FALSE), non c'è modo di fermare i 2 script! Ogni 30 secondi spammano in 2 scrivendo nel database. Anche se gli blocco la connessione al database, cambiando il nome del php che effettua la connessione, questi tornano a spammare appena la ripristino. Non ditemi che devo aspettare il riavvio del server :(): (sono shared hosting).
Come termino questo dannato script?
Edit: sono riuscito a killare lo script creando una riga che lo faceva bloccare. Bhè vista questa esperienza non credo possa usare i cron. E' vero che vanno avanti in eterno ma nel momento in cui ti riavviano il server devi riavviare il cron manualmente e magari intanto hai anche perso dei giorni senza saperlo. Ci sono altri modi? Che so un getdate()
-
Ciao Kian,
Quello è solo un metodo alternativo per utilizzare i cron, puoi usare servizi esterni come ti ho detto prima che si incaricano di avviare lo script in certi momenti precisi della giornata.
-
Uhm se non c'è altro metodo potresti dirmi perchè non funziona?
File spoiler.php
[php] 01 * * * * /usr/local/bin/php wwwmiositoit/script.php[/php]Da questo file vado a richiamare script.php. Il problema è che prima di tutto non funziona (dovrebbe eseguire lo script ogni minuto) e in spoiler.php mi da errore di sintassi vicino a "*".
-
Attento che le variabili globali (esempio $_SERVER) non esistono quando lo script è lanciato da cron, se lo script usa queste variabili hai problemi...
-
No, lo script fa un UPDATE nel database e niente altro
-
Posta l'errore completo...
-
Parse error: syntax error, unexpected '*' in /web/htdocs/wwwmiositoit/home/cartella/spoiler.php on line 3Generato da questo
[php]<?
*/1 * * * * /usr/lib/php /home/web/wwwmiositoit/cartella/automation_script.php
?>[/php]P.S. Ovviamente nel link wwwmiositoit ci sono i due punti. Scrivo cosi perchè non posso inserire link attivo... è ora che mi faccio premium.
-
Poi postare la prima parte di codice del file spoiler.php?
-
Non c'è una prima parte. Questo è tutto quello che c'è in spoiler.php
[PHP] <?
*/1 * * * * /usr/lib/php /home/web/wwwmiositoit/cartella/automation_script.php
?> [/PHP]
-
Vedi che quel codice dovrebbe servire per impsotare il CRON, il cron no si imposta da php, ma è una funziona che ti permette il server. Devi avere i permessi di impostare un cron sul tuo server tramite il pannello per poterlo creare, altrimenti devi usare servizi esterni
-
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.
-
Fanno un controllo su ogni pagina, di quando è stato lanciato lo script l'ultima volta, sistema che utilizza più risorse del server...
-
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?
-
Viene fatto sulle pagine, quando un visitatore entra in una pagina del cms lo script esegue anche questo controllo
-
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?
-
Usi cron esterni... che si occupino loro di visitare una volta al giorno(o più volte) la tua pagina
-
Ne conosci qualcuno? Sai conosco cron da ieri