• User Attivo

    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?

    :ciauz:


  • Super User

    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'].


  • User Attivo

    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.


  • User Attivo

    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.


  • User Attivo

    Si, mi sono orientato anche io così.

    Come potrei fare però in pratica.
    Non sono molto esperto in programmazione php.


  • User Attivo

    @n1gH7 said:

    Non sono molto esperto in programmazione php.

    Ok, neanch'io :)... ma a che livello sei?


  • User Attivo

    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. ^^


  • User Attivo

    @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.


  • User Attivo

    Ottimo!

    Appena ho tempo provo a farlo. Grazie mille.