Visualizzazione risultati 1 fino 13 di 13

Discussione: Aiuto per script php e Mysql

  1. #1
    letturasibillaindovina non è connesso Utente giovane
    Data registrazione
    17-11-2012
    Messaggi
    45

    Smile Aiuto per script php e Mysql

    Ciao a tutti volevo chiedere aiuto o quanto meno informazioni a chi mastica abbastanza bene il php e mysql.

    Avrei la necessita di impostare una funzione che in base a una verifica tra data odierna e la data antecedente o attraverso l'aggiunto dell'orario, mi possa consentire di eliminare un record dal data base.

    Qui su altervista si possono attivare i trigger, sto cercando di capirci qualcosa ma sto facendo fatica.

    Il definitiva vorrei che alle 00.00 di ogni giorno ci sia questa funzione che in automatico mi cancelli il record con data antecedente rispetto all'inizio del nuovo giorno.

    Qualcuno mi saprebbe dare qualche dritta su come poter impostare il tutto o indirizzarmi su come poter relaizzare una cosa del genere?

    Grazie per le eventuali risposte

  2. #2
    Guest

    Predefinito

    una "cosa del genere" si fa con gli events e meglio ancora con cron jobs :)
    nulla comunque ti vieta di ignorare semplicemente i record "scaduti"
    Ultima modifica di FormularioDiDrakensang : 30-09-2014 alle ore 16.35.45

  3. #3
    L'avatar di Luffio
    Luffio non è connesso Utente attivo
    Data registrazione
    02-07-2006
    Messaggi
    439

    Predefinito

    In che formato è salvata la data? Ci sono record che contengono la data attuale e date future?
    Luffio Web Site, Luffio's personal site
    Age Of Empires GIF, sito per la creazione di GIF animate di Age of Empires
    Clan italiano di Age of Empires The Conquerors, uno dei più vecchi ancora attivi

  4. #4
    letturasibillaindovina non è connesso Utente giovane
    Data registrazione
    17-11-2012
    Messaggi
    45

    Predefinito

    allora innanzitutto grazie per le risposte, per quanto riguarda i campi data sono in 'text' infatti sono inserite con datapicker. Su uan pagina php invece la data è richiamata dalla data locale. Ora vorrei fare in questo modo, far analizzare la data è se è superiore a quella corrente eliminare la vecchia. Poi far inserire il nuovo record con dei dati presi dal primo record di un'altra tabella. Spero di essermi spiegato bene questa volta :-))))

    ---------------------------------------
    per i record scaduti ho bisogno che il record si elimini per poi fare posto a un'altro record che conterrà i dati copiati o richiamati di un'altra tabella.
    Ultima modifica di letturasibillaindovina : 30-09-2014 alle ore 17.11.24

  5. #5
    Guest

    Predefinito

    ti eri spiegato bene anche prima
    dicevo semplicemente non è indispensabile cancellare una cosa per farla sparire xD

    e oltre a quello, che non dovresti IMHO usare i trigger ma gli Events (da mysql 5.1 in poi http://dev.mysql.com/doc/refman/5.1/en/events.html) [sempre che siano AV-friendly]

    e meglio ancora cron

    se proprio devi fare qualcosa ad un certo orario ma anche questo è del tutto superfluo

    es. se non devi cancellare miliardi di records puoi rimandare la cancellazione alla prima (prossima) esecuzione dello script che ci opera su

    il quale farà semplicemente delete from miatab where <il record è di ieri>

    ottenendo un semplice ritardo di qualche millisecondo ma liberandoti da varie problematiche

    p.es e se il server è down a quell'ora e se c'è il passaggio all'ora legale ecc ecc

    nulla di irrisolvibile ma perchè andarsele a proprio a cercare
    Ultima modifica di FormularioDiDrakensang : 30-09-2014 alle ore 17.52.47

  6. #6
    letturasibillaindovina non è connesso Utente giovane
    Data registrazione
    17-11-2012
    Messaggi
    45

    Predefinito

    :-) ho poca esperienza di cron, trigger, quello che volevo fare in questa tabella che dicevo è ricevere il nuovo dato e eliminare quello vecchio, in sostanza ne rimarrà sempre e solo uno (come diceva highlander). Per una procedura oppure dove poterne reperire una? Ma si potrebbe fare che dalla mia pagina PHP quando scatta l'ora in questione, c'è il richiamo a un trigger sul DB che mi fa partire lo script? Non ho idea di come si potrebbe impostare.

    Anche una funzione if else sulla pagina che richiama l'invio di query per eliminare il record in questione al cambio della data o un orario specifico
    Ultima modifica di letturasibillaindovina : 30-09-2014 alle ore 17.59.00

  7. #7
    Guest

    Predefinito

    un trigger di norma non è @tempo ma @operazione (insert,delete ecc)
    gli events sono invece fatti proprio per dire al dbms alle ore XX.XX esegui questi comandi
    idem cron

    dicevo comunque che per la tua problematica si può tranquillamente abbandonare questo approccio
    (almeno da come hai descritto la cosa)
    ed effettuare la pulizia semplicemente come prima operazione della pagina che opera sul db

    es. sia stampa.php

    lo script che stampa tutti gli eventi del giorno
    - metto come prima operazione la pulizia della roba del giorno prima

    ecco ottenuto la stessa cosa a livello funzionale dell'aver svegliato il dbms alle 00.00 e ordinatogli di fare la pulizia
    (in uno qualsiasi dei modi possibili)
    in quanto:
    se qualcuno visita la pagina esattamente alle 00.00.01 avverrà la pulizia vera e propria e si sprecheranno 5-10 millisecondi
    se qualcuno visita la pagina piu' tardi e la pulizia è già avvenuta, si sprecheranno 0.1 millisecondi
    se qualcuno visita la pagina piu' tardi e la pulizia non è stata fatta, si sprecheranno 5-10 millisecondi

    e senza doversi preoccupare del caso in cui qualcosa abbia impedito la pulizia

    tra cui come sopra, il server down a quell'ora ecc
    Ultima modifica di FormularioDiDrakensang : 30-09-2014 alle ore 18.13.13

  8. #8
    L'avatar di Luffio
    Luffio non è connesso Utente attivo
    Data registrazione
    02-07-2006
    Messaggi
    439

    Predefinito

    Citazione Originalmente inviato da letturasibillaindovina Visualizza messaggio
    allora innanzitutto grazie per le risposte, per quanto riguarda i campi data sono in 'text' infatti sono inserite con datapicker.
    Scusa ma non conosco datapicker: qual è il formato esatto? Es. 30/09/2014, 30-9-2014, 2014-9-30...

    Cmq anch'io prediligo le soluzioni via script al primo che visita la pagina! Aggiungerei (oltre a tutto quello che ha già descritto FormularioDiDrakensang) di creare un file (o, nel tuo caso, anche un record in qualche tabella di database) ricreandolo (=aggiornandolo) e poi confrontandolo con la data attuale con un semplice (scrivo in pseudo-codice):
    Codice:
    if(data del file != data di oggi)
        then update db
    che fa sapere subito se la cancellazione è stata già completata oppure no.
    Ultima modifica di Luffio : 30-09-2014 alle ore 18.43.31
    Luffio Web Site, Luffio's personal site
    Age Of Empires GIF, sito per la creazione di GIF animate di Age of Empires
    Clan italiano di Age of Empires The Conquerors, uno dei più vecchi ancora attivi

  9. #9
    letturasibillaindovina non è connesso Utente giovane
    Data registrazione
    17-11-2012
    Messaggi
    45

    Predefinito

    FormularioDiDrakensang
    grazie ancora per la risposta


    Luffio
    Scusa ma non conosco datapicker: qual è il formato esatto? Es. 30/09/2014, 30-9-2014, 2014-9-30...

    Cmq anch'io prediligo le soluzioni via script al primo che...
    Allora il campo è di tipo testo ed è facilmente configurabile, ad ogni modo il formato è di questo tipo: 30/03/2014 quindi italianissimo :-).

    Per la tabella c'è lo già in pratica funziona così:

    ogni giorno creo un record in una tabella, attraverso una pagina php e non lo pubblico, diciamo che lo tengo in standbay perché va utilizzato il giorno dopo che l'ho scritto. Poi ho un form che me lo fa pubblicare, ma quest'ultimo lavora in questo modo, richiamo i dati che devono apparire e poi li invio in una tabella che è l'esatta copia della precedente. In questo modo quando scrivo e salvo non pubblica poi quando scatta il giorno in questione invio i dati e la pagina che li richiama lo fa dalla seconda tabella, quella che poi devo eliminare e ricreare. Lo so è un po' macchinoso, ma non avendo chiaro alcune cose faccio alla meglio.

  10. #10
    L'avatar di Luffio
    Luffio non è connesso Utente attivo
    Data registrazione
    02-07-2006
    Messaggi
    439

    Predefinito

    Citazione Originalmente inviato da letturasibillaindovina Visualizza messaggio
    Allora il campo è di tipo testo ed è facilmente configurabile, ad ogni modo il formato è di questo tipo: 30/03/2014 quindi italianissimo :-).
    Te l'ho chiesto perché, se fosse nel formato YYYY/MM/DD, potresti comodamente usare
    Codice PHP:
    mysql_query("DELETE FROM tabella WHERE STRCMP(data,'".date('Y/m/d')."')<0");
    (non so se il codice sia giusto perché non ho mai usato STRCMP, ho appena guardato il manuale ma l'idea è quella) che fa un semplice confronto lessicografico, che nell'ordine anno/mese/giorno corrisponde all'ordine cronologico (se poi ti servisse stampare la data nel formato mese/giorno/anno farlo è una bazzecola).
    Ultima modifica di Luffio : 30-09-2014 alle ore 20.23.19
    Luffio Web Site, Luffio's personal site
    Age Of Empires GIF, sito per la creazione di GIF animate di Age of Empires
    Clan italiano di Age of Empires The Conquerors, uno dei più vecchi ancora attivi

  11. #11
    letturasibillaindovina non è connesso Utente giovane
    Data registrazione
    17-11-2012
    Messaggi
    45

    Predefinito

    avrei un campo data in effetti che ho chiamato data, che uso per gli aggiornamenti è s'inserisce in automatico con timestamp potrei usare quello (il formato lì è quello anglosassone y-m-d)
    potrei fare così:

    mysql_query("DELETE FROM tabella WHERE STRCMP(data,'".date('Y/m/d')."')<0"); //<------qui potrei invertire e fare d/m/y?

    questa query dovrei metterla nella pagina dove ho la data che viene prelevata in locale giusto?

    qua e la avrei trovato anche questa:

    DELETE FROM oroscopo_segni_standby WHERE data < NOW( ) //potrebbe funzionare? ho letto che NOW() dovrebbe rilasciare la data corrente

  12. #12
    L'avatar di Luffio
    Luffio non è connesso Utente attivo
    Data registrazione
    02-07-2006
    Messaggi
    439

    Predefinito

    Citazione Originalmente inviato da letturasibillaindovina Visualizza messaggio
    //<------qui potrei invertire e fare d/m/y?
    Non vorrei portarti fuori strada con soluzioni che forse non si adattano a ciò che richiedi, ma ti rispondo per completezza, quindi valuta tu se, in questo caso, il mio metodo è utilizzabile o no.



    Secondo la mia soluzione, NON puoi invertire Y/m/d e farlo diventare d/m/Y, e ti mostro subito un esempio:
    - Formato d/m/Y : Oggi è il 30/09/2014, mentre domani è il primo ottobre, cioè 01/10/2014. Adesso, poiché STRCMP confronta l'ordine lessicografico (=alfabetico, cioè risulta a<b, y<z, a<z, 0<1 ecc.) risulta che "30/09/2014" è MAGGIORE di "01/10/2014" (infatti "30" > "01"), mentre il primo viene cronologicamente prima del secondo.
    - Formato Y/m/d : Oggi è 2014/09/30, mentre domani è 2014/10/01. In questo caso STRCMP fa una specie di "confronto a cascata" di anno, mese e giorno: confronta carattere per carattere da sinistra verso destra, quindi risulta (a occhio) "2014" = "2014", poi "09" < "10" e quindi oggi < domani, per qualsiasi data nel formato YYYY/MM/DD.
    (Non so quanto ti sia chiaro il concetto di ordine lessicografico. Spero sia chiara la mia spiegazione.)

    Per quanto riguarda NOW() non ho la più pallida di come funzioni.
    Ultima modifica di Luffio : 30-09-2014 alle ore 22.03.15
    Luffio Web Site, Luffio's personal site
    Age Of Empires GIF, sito per la creazione di GIF animate di Age of Empires
    Clan italiano di Age of Empires The Conquerors, uno dei più vecchi ancora attivi

  13. #13
    letturasibillaindovina non è connesso Utente giovane
    Data registrazione
    17-11-2012
    Messaggi
    45

    Predefinito

    Citazione Originalmente inviato da Luffio Visualizza messaggio
    Non vorrei portarti fuori strada con soluzioni che forse non si adattano a ciò che richiedi, ma ti rispondo per completezza, quindi valuta tu se, in questo caso, il mio metodo è utilizzabile o no



    Secondo la mia soluzione, NON puoi invertire Y/m/d e farlo diventare d/m/Y, e ti mostro subito un esempio:
    - Formato d/m/Y : Oggi è il 30/09/2014, mentre domani è il primo ottobre, cioè 01/10/2014. Adesso, poiché STRCMP confronta l'ordine lessicografico (=alfabetico, cioè risulta a<b, y<z, a<z, 0<1 ecc.) risulta che "30/09/2014" è MAGGIORE di "01/10/2014" (infatti "30" > "01"), mentre il primo viene cronologicamente prima del secondo.
    - Formato Y/m/d : Oggi è 2014/09/30, mentre domani è 2014/10/01. In questo caso STRCMP fa una specie di "confronto a cascata" di anno, mese e giorno: confronta carattere per carattere da sinistra verso destra, quindi risulta (a occhio) "2014" = "2014", poi "09" < "10" e quindi oggi < domani, per qualsiasi data nel formato YYYY/MM/DD.
    (Non so quanto ti sia chiaro il concetto di ordine lessicografico. Spero sia chiara la mia spiegazione.)

    Per quanto riguarda NOW() non ho la più pallida di come funzioni....
    Grazie per la pazienza e le ulteriori delucidazioni, buona serata!

Tags for this Thread

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •