- Home
- Categorie
- Coding e Sistemistica
- PHP
- Limitare invio form dopo invio
-
Limitare invio form dopo invio
Ciao a tutti.
Ho l'esigenza di bloccare un form che agisce direttamente su database MySQL con una insert.
Dopo l'invio del form, vorrei poter fare una di queste due cose:
- bloccare l'invio del form dallo stesso ip per 5 min
- bloccare la pagina del form per l'ip
Qualcuno può indirizzarmi?
Che posso usare?
-
Puoi utilizzare una tabella in cui conservi ip e time di inserimento del form.
Per ricavare l'ip puoi usilizzare la variabile $_SERVER['REMOTE_ADDR'].
-
L'ip son riuscito a ricavarlo.
Non so come creare uno script che mi legga gli ip durante l'invio del form e che lo blocchi qual'ora gia lo avesse inviato in minuti subito precedenti.
-
Prima di inviare la mail dovrebbe interrogare il database e cercare l'ip dell'utente:
-
se non lo trova, memorizza nel db IP e timestamp e invia la mail
-
se lo trova, confronta il timestamp memorizzato con quello attuale e agisce di conseguenza bloccando l'invio o permetterlo aggiornando il timestamp memorizzato.
-
-
Si, mi sono orientato anche io così.
Come potrei fare però in pratica.
Non sono molto esperto in programmazione php.
-
@n1gH7 said:
Non sono molto esperto in programmazione php.
Ok, neanch'io :)... ma a che livello sei?
-
A livello che conosco bene mysql, php cosi cosi. Son riuscito a fare un form di base che interagisca con il db e inserisca i dati inviati nel database. Ho creato una pagina che restituisce i dati presenti sul db. Piu in la non ho conoscenze.
Mi basta che mi indirizziate sulla funzione, poi ci studio io. Che devo usare? degli if / else che guardino il db? devono poi anche cancellare il record dal db ogni tot. Cosa si usa? Insomma, non so come proseguire. ^^
-
@n1gH7 said:
A livello che conosco bene mysql, php cosi cosi. Son riuscito a fare un form di base che interagisca con il db e inserisca i dati inviati nel database. Ho creato una pagina che restituisce i dati presenti sul db. Piu in la non ho conoscenze.
Ok, allora sei a cavallo!
Ti fai una tabella sul db (ad esempio di nome: utenti), dedicata solo a quello, che contiene ID, indirizzo IP e timestamp (3 campi)
Nello script che riceve i dati dal form, deve memorizzare L'IP e il timestamp istantaneo:
[php]
$ip_utente=$_SERVER['REMOTE_ADDR'];
$time_utente=time();
[/php]
Poi fai una select che tira fuori tutti i dati dalla tabella utenti.
Nel ciclo while metti un controllo if nel quale verifichi se il valore del campo IP è uguale e $ip_utente e,-
in caso positivo, un altro if che controlli se la differenza tra il valore del campo timestamp e $time_utente è maggiore di 300 (300 secondi = 5 minuti) e invii la mail e poi, fuori da while, con un'altra select aggiorni il timestamp di quel record... se è minore esci con un "exit('non sono trascorsi 5 minuti dall'ultimo invio');"
-
in caso negativo, invii la mail e, con un'altra select, memorizzi i nuovi ip e timestamp in un nuovo record nella tabella.
Con le conoscenze che hai dovresti farcela... è tutta questione di logica.
-
-
Ottimo!
Appena ho tempo provo a farlo. Grazie mille.