eliminazione automatica dati dal database dopo un certo periodo di tempo

Mtk-kun

Nuovo Utente
6 Giu 2011
19
0
0
buon giorno a tutti!
mi sono imbattuto in un problema e speo mi aiutiate a risolverlo:
ho un form di registrazione:
PHP:
<?php

// includiamo il file di connessione al database 

include ('configurazione.php');



// creiamo il nostro modulo di registrazione

?>



<form action='?inviodati=ok' method='POST'>

<b>Nome</b><br>
<input type='text' name='nome'><br>

<b>NickName</b><br>
<input type='text' name='nickname'><br>

<b>Mail</b><br>
<input type='text' name='mail'><br>

<b>Password</b><br>
<input type='password' name='pass'><br>

<b>Ripeti Password</b><br>
<input type='password' name='pass2'><br>

<input type='submit' value='Completa Registrazione'><br>

</form>



<?php

// attraverso un if controlliamo che il form sia stato inviato 

if ( $_GET['inviodati'] == "ok" ) {



// recuperiamo i dati inviati con il form


$nome = $_POST['nome'];

$nickname = $_POST['nickname'];

$mail = $_POST['mail'];

$pass1 = $_POST['pass'];

$pass2 = $_POST['pass2'];


// ora controlliamo che i campi siano stati tutti compilati

if ( $nome == TRUE && $mail == TRUE && $nickname == TRUE && $pass1 == TRUE && $pass2 == TRUE )  {


// controlliamo se il campo mail è stato scritto in maniera errata


$email = eregi("^[_a-z0-9+-]+(\.[_a-z0-9+-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)+$",$mail); 

if ( $email == TRUE ) {



// controlliamo se l'mail è presente già nel database

$sql = mysql_query("SELECT * FROM tabella_registrati WHERE mail = '$mail'") or die ("Mail già occupata");

$num_rows = mysql_num_rows($sql); 

if ( $num_rows == 0 ) {

// ora controlliamo che le password inserite siano identiche

if ( $pass1 == $pass2 ) {


// infine criptiamo la password con md5

$pass_md5 = md5($pass1);

mysql_query("INSERT INTO tabella_registrati
             (id , nick , nome , pass , mail )
             VALUES 
             ('','$nickname', '$nome', '$pass_md5', '$mail' )") OR DIE(mysql_error());

// e inviamo una mail con la riuscita registazione


mail ($mail, "Registrazione OK", "Complimenti registrazione effettuata con successo", "From: [email protected]");

// messaggio da far visualizzare all'utente finale

echo "Complimenti registrazione effettuata con successo.";


} else {

echo "Le password non corrispondono";


}

} else {

echo "Indirizzo mail già utilizzato.";

}

} else {

echo "La tua mail non è idonea, per la registrazione.";

}


} else {

echo "Tutti i campi sono obbligatori.";

}



}

?>

bene, io avrei la necessità di eliminare dopo un anno esatto dalla registrazione di ogni singolo utente i dati che lui ha inserito al momento della registrazione, è possibile farlo??
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
Ciao,
secondo me potresti provare in questo modo:

Per prima cosa ti occorre un campo in piu nella tabella ' tabella_registrati ',
dove verrà memorizzata la data di registrazione:

PHP:
mysql_query("INSERT INTO tabella_registrati
             (id , nick , nome , pass , mail, dataReg )
             VALUES 
             ('','$nickname', '$nome', '$pass_md5', '$mail', now() )") OR DIE(mysql_error());


Puoi crearti così una funzione che controlla quanto tempo è passato da 'dataReg' ed elimina i record piu vecchi di un anno:

PHP:
function eliminaRegistrazioni() {

	DELETE from tabella_registrati WHERE dataReg >= DATE_SUB(CURDATE(), INTERVAL 1 YEAR)

//esegui la query

}

in questo modo elimini i record e non avrai piu traccia delle registrazioni.



Meglio sarebbe aggiungere un altro campo nella tabella ' tabella_registrati ' del tipo scaduto 1 o 0

la funzione diventerebbe:

PHP:
function invalidaRegistrazioni() {

	UPDATE tabella_registrati SET scaduto = 1 WHERE dataReg >= DATE_SUB(CURDATE(), INTERVAL 1 YEAR)

//esegui la query

}

Prima di esguire una delete o una update ti consiglio di salvare una copia della tabella o di eseguire cmq una select con la stessa WHERE
in modo da verificare se i dati che verranno eliminati o aggiornati corrispondo a quelli che ti eri prefissato.
A me è capitato di aggiornare i record sbagliati e non avevo copia della tabella, credimi non è piacevole

Fatto questo rimane il problema di quando far eseguire questa funzione.


Puoi inserirla ad ogni nuova registrazione oppure nella index del sito, dipende ogni quanto vuoi fare questo controllo.


Non ho testato lascio a te il compito di valutare e semmai provare
 
Ultima modifica:

Mtk-kun

Nuovo Utente
6 Giu 2011
19
0
0
Ti ringrazio per la risposta, ho fatto tutto come mi hai detto, ho solo un problema, non so come creare il modulo di login dove inserire username e password per provare se tutto funziona, mi sapresti aiutare??
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
Creare un sistema di autenticazione è un lavoro complesso e delicato, io per creare il mio ho perso parecchie ore e non so nemmeno se è perfettamente funzionante visto che sono l'unico registrato :)

Comunque sono convinto che il modo migliore è crearsi una classe php che gestisca tutto quello che riguarda gli utenti:
login,logout,sessioni,autenticazione etc

Io ho fatto così anche se non sono molto pratico con la programmazione ad oggetti.

Il mio consiglio quindi è di cercare in rete qualcosa tipo "Creare una classe php per gestire gli utenti" e di affidarti man mano agli esperti di questo forum.

Per il semplice modulo di login puoi prendere spunto da un paio di discussioni di questo forum con titolo appunto "login"
 

Mtk-kun

Nuovo Utente
6 Giu 2011
19
0
0
ma a me serve una cosa molto semplice, cioè una volta scritti nei due campi l'username e la password, mi serve che faccia un controllo con i dati nel database, se sono corretti gli risponda un messaggio "benvenuto nell'area privata, clicca qui per accedere ai contenuti protetti" per esempio prima avevo username e password definiti e usavo questo file
PHP:
<?PHP
    $user = "guazzabuglio";
    $pass = "manicotto";

    $username = $_POST["username"];
    $password = $_POST["password"];
	
    if ($username == $user && $password == $pass)
    {
        setcookie("login", "OK", time() + 600);
        print "Welcome! Enter in the private area, click <a href='paginaprivata.php'>Here</a>";
    }
    else
    {
        print "Access denied! Go back, clic <a href='acesso.php'>Here</a>";
    }
?>
come faccio a far confrontare i dati con il database e far funzionare uttto allo stesso modo??
grazie in anticipo
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
Beh se ti basta questo.

riprendendo il tuo esempio puoi provare cosi:

PHP:
<?php
    //includi il file per la connessione al db
    
    // questi campi dovranno essere "ripuliti" da eventuali sql injection
    $username = $_POST["username"];
    $password = md5(trim($_POST["password"]));
    
    $query = "SELECT * FROM tabella_registrati WHERE nome = '$username' && pass = '$password' ";   // && scaduto = 0
    
    $res = mysql_query($query);
    
    if (mysql_num_rows($res) == 1)
    {
       //ignoro il significato di questa riga
        setcookie("login", "OK", time() + 600);
        print "Welcome! Enter in the private area, click <a href='paginaprivata.php'>Here</a>";
    }
    else
    {
        print "Access denied! Go back, clic <a href='acesso.php'>Here</a>";
    }
?>

Ho scritto senza testare ... spero non ci siano errori di sintassi :)
 
Ultima modifica:

Mtk-kun

Nuovo Utente
6 Giu 2011
19
0
0
ti ringrazio tantissimo per il prezioso aiuto, a me basta una cosa semplice come quella perchè non mi serve un sistema di gestione utenti, ma solo chi si è registrato possa avere accesso alleinformazioni protette
ti faccio un'ultima domanda per tornare al tema del topic ho provato a inserire la funzione che mi hai detto
PHP:
function eliminaRegistrazioni() {

    DELETE from tabella_registrati WHERE dataReg >= DATE_SUB(CURDATE(), INTERVAL 1 YEAR)

//esegui la query

}
all'interno della mia home.php, ma mi da un errore e non mi fa visualizzare la home,
se creo un file tipo cancella.php con all'interno
PHP:
<?php

function eliminaRegistrazioni() {

    DELETE from tabella_registrati WHERE dataReg >= DATE_SUB(CURDATE(), INTERVAL 1 YEAR)

//esegui la query

}  
?>

e lo eseguo di tanto in tanto funzionerebbe alla stessa maniera??
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
Si, era un esempio il mio,

dovresti mettere nella home qualcosa del genere:

PHP:
<?php
        //includi il file per la connessione al db

        function eliminaRegistrazioni() {

            $query = "DELETE from tabella_registrati WHERE dataReg >= DATE_SUB(CURDATE(), INTERVAL 1 YEAR)";
            $res = mysql_query($query); 
            // non sono sicuro se bisogna passare anche la connessione
            // al massimo se non funziona prova cosi 
            // $res = mysql_query($query,$tua_variabile_di_connessione);
            
            if(!$res) {
                die("Errore:" . mysql_error());
            }

        }
        
        // richiamiamo la funzione
        eliminaRegistrazioni();        
        ?>

Spero tu abbia già verificato quali dati andrai ad eliminare provando la query direttamente sul db in questo modo:

SELECT * from tabella_registrati WHERE dataReg >= DATE_SUB(CURDATE(), INTERVAL 1 YEAR)

Io preferisco non eliminare mai nulla se non strettamente necessario dal db I dati possono sempre tornare utili magari per delle statistiche.
 

Mtk-kun

Nuovo Utente
6 Giu 2011
19
0
0
dunque ho fatto una prova e ho messo in home la funzione di eliminazione, il problema è che ogni volta che la eseguo cancella tutto il contenuto della mia tabella anche se non è passato un anno, eppure è settato su " 1 YEAR" cosa può essere sbagliato??
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
Si, scusa ho sbagliato operatore di paragone:
dataReg deve essere minore non maggiore di DATE_SUB(CURDATE(), INTERVAL 1 YEAR)


PHP:
<?php
        //includi il file per la connessione al db

        function eliminaRegistrazioni() {

            $query = "DELETE from tabella_registrati WHERE dataReg <= DATE_SUB(CURDATE(), INTERVAL 1 YEAR)";
            $res = mysql_query($query); 
            // non sono sicuro se bisogna passare anche la connessione
            // al massimo se non funziona prova cosi 
            // $res = mysql_query($query,$tua_variabile_di_connessione);
            
            if(!$res) {
                die("Errore:" . mysql_error());
            }

        }
        
        // richiamiamo la funzione
        eliminaRegistrazioni();        
        ?>

prova cosi
 

Mtk-kun

Nuovo Utente
6 Giu 2011
19
0
0
Ora funziona tutto alla grande, ho creato un paio di user di prova e ho modificato nel database la registrazione mettendola un anno e un giorno prima, e ora quelli più vecchi di un anno vengono cancellati non appena si apre la homepage.:mavieni::mavieni::mavieni:
ti ringrazio davvero di cuore per l'aiuto criric:fonzie:
 
Discussioni simili
Autore Titolo Forum Risposte Data
R [chiusa]Realizzazione webmail con eliminazione automatica dei messaggi vecchi Offerte e Richieste di Lavoro e/o Collaborazione 5
I eliminazione file pdf PHP 0
I eliminazione cartella e contenuto PHP 1
M [PHP] Eliminazione utente e tutti i suoi file caricati in una cartella PHP 8
A JAVASCRIPT ELIMINAZIONE DIV DINAMICO SU SITO Offerte e Richieste di Lavoro e/o Collaborazione 3
M "Principiante photoshop" Eliminazione di una parte di una foto e riempimento "a specchio" Photoshop 4
fabryx [PHP]RISOLTO: eliminazione riga con singolo valore duplicato in array PHP 19
M promoted post modifiche ed eliminazione Facebook 0
C inserimento o eliminazione record mysql senza cambio pagina Ajax 9
JackIlPazzo Query di eliminazione non funzionante PHP 4
A Chiusura ed eliminazione di questo account Supporto Mr.Webmaster 0
L Eliminazione titolo sito sulla homepage Joomla 1
W Problema eliminazione ultimo record da ultima pagina di crud con paginazione PHP 2
B aiuto per Form di eliminazione record PHP 21
J Aiuto per una query di eliminazione PHP 5
R Eliminazione tag da menu a tendina creato con dati prelevati da tabella Mysql PHP 3
M Eliminazione inserzione immagini in testata WordPress 2
G access 2003: query di eliminazione o aggiornamento? MS Access 2
N Eliminazione prodotto carrello PHP 17
A eliminazione scrollbar e ottimizzazione pagina web Webdesign e Grafica 5
T query di eliminazione PHP 17
J problema eliminazione record MS Access 1
M eliminazione file PHP 6
G Thunderbird ed eliminazione di tutti i destinatari Windows e Software 0
U Problema con eliminazione righe dalla tabella del database PHP 1
V eliminazione di un topic Discussioni Varie 1
reg problema eliminazione new line (almeno credo) dal DB PHP 1
N eliminazione righe - file di testo PHP 0
A Query di aggiornamento ed eliminazione in Access Database 1
M php, mysql ed eliminazione record...disperazione totale! PHP 0
jan267 Eliminazione dei cookies da ASP Classic ASP 2
M Compilazione automatica campi in input stessa pagina PHP 0
P Rimozione automatica url da sitemap.xml con PHP PHP 1
Z Data automatica PHP 2
D [PHP] script che invii una mail automatica dopo risposta ad una discussione di un forum PHP 0
N [Javascript] [HTML] Scelta di una select e compilazione automatica delle restanti Javascript 0
Michaelweb93 [HTML] Creazione risposta automatica - email "Contact form 7" Wordpress WordPress 10
A Creazione automatica pagina php da id della riga di una tabella PHP 1
H Condivisione posizione Google Maps e navigazione automatica Sviluppo app per Android 0
S [Photoshop] dimensione automatica delle immagini importate Photoshop 1
E [PHP] selezione automatica lingua PHP 14
S Slideshow immagini automatica senza specificare il file immagine PHP 7
M Evitare la compilazione automatica NomeUtente e Password con Chrome PHP 2
L Pubblicazione automatica Post su pagina Facebook PHP 3
S creazione automatica file .php PHP 1
Y Approvazione automatica utenti Community Builder Joomla 0
teotode stampa automatica da php PHP 4
P Chiusura automatica brownser HTML e CSS 10
Emix Somma automatica checkbox Javascript 1
Max 1 Cartella Esecuzione Automatica Windows e Software 4

Discussioni simili