Pagina 2 di 6 PrimoPrimo 1234 ... UltimoUltimo
Visualizzazione risultati 31 fino 60 di 155

Discussione: Bloccare email spam

  1. #31
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    La risposta è sempre la stessa: una pagina PHP che riceva in input un indirizzo email, e produca in output true se l'indirizzo è valido, false altrimenti, eventualmente con un'indicazione del perché non è valido.
    Hai già tutte le componenti che ti servono.

    Se posso, evito di fornire un codice da copiare ed incollare, ma qui mi sembra non si stiano facendo grossi progressi, dunque:
    email_check.php:
    Codice PHP:
    header('Content-Type: application/json');

    /**
    * Returns domain of an email address.
    * Returns an empty string if email address is invalid or missing.
    * @param string $address Email address
    * @return string Domain of email address
    */
    function get_domain($address) {
    if (
    filter_var($address, FILTER_VALIDATE_EMAIL) === false) {
    return
    "";
    }

    return
    array_pop(explode('@', $address));
    }


    /**
    * Tells whether a domain is blacklisted.
    * @param string $domain Domain to check
    * @return bool True if and only if domain is blacklisted, false otherwise
    */
    function in_blacklist($domain) {
    global
    $blacklist;

    return
    in_array($domain, $blacklist);
    }


    /**
    * Generates a JSON encoded report.
    * Produces a JSON object: {"valid": bool, "error": int, "message": string}.
    * @param bool $valid Tells whether email address is valid
    * @param int $error Error code
    * @param string $message Error message
    * @return string JSON encoded object
    */
    function report($valid = true, $error = 0, $message = "") {
    $result = array(
    "valid" => $valid,
    "error" => $error,
    "message" => $message
    );

    return
    json_encode($result);
    }


    // Stops if no address is given
    if (!isset($_GET['address'])) {
    echo
    report(false, 1, "No address");
    return;
    }

    $address = $_GET['address'];
    $domain = get_domain($address);

    // Stops if address is empty
    if (empty($address)) {
    echo
    report(false, 2, "Empty address");
    return;
    }

    // Stops if address is invalid
    if (filter_var($address, FILTER_VALIDATE_EMAIL) === false) {
    echo
    report(false, 3, "Invalid address");
    return;
    }

    // Stops if domain is blacklisted
    if (empty($domain) || in_blacklist($domain)) {
    echo
    report(false, 4, "Blacklisted domain");
    return;
    }

    // Address is valid
    echo report(true);
    I commenti sono auto-esplicativi. La pagina riceve in input un indirizzo address, tramite GET, effettua i controlli del caso e restituisce un JSON contenente i campi valid (booleano), error (eventuale codice d'errore, intero) e message (eventuale messaggio d'errore, stringa).

    Il codice JavaScript, usando jQuery:
    Codice:
    /**
     * Performs an asynchronous request to validate email.
     * @param string address Email address
     * @param callable callback Callback function
     */
    function check_email(address, callback) {
        $.get("email_check.php", { "address": address }, callback);
    }
    
    /**
     * Use your own callback function.
     * @param object report Report in the form: {"valid": bool, "error": int, "message": string}.
     */
    function my_callback(report) {
        var messages = [
            "OK",
            "Nessun indirizzo trovato",
            "Inserire l'email",
            "L'indirizzo nonè valido",
            "Il dominio non è valido"
        ];
        
        // What to do when address is valid?
        if (report.valid) {
            alert("email is valid");
        }
        
        // What to do when address is not valid?
        else {
            alert("email is not valid: " + messages[report.error]);
        }
    }
    
    
    ...
    var address = ...
    check_email(address, my_callback);
    ...
    Devi modificare tu la funzione di callback, inserendo nel ramo if il codice da eseguire quando l'indirizzo è valido, e nel ramo else il codice da eseguire quando l'indirizzo non è valido (ad esempio mostrare da qualche parte un messaggio d'errore).
    Fatto questo, devi solo invocare la funzione check_email passandole l'indirizzo da controllare e la funzione di callback.

    Questi ultimi sono aspetti che non posso implementare io, perché non ho idea né di come sia strutturata la pagina, né di come intendi ottenere gli effetti desiderati (classi CSS? Modificando gli attributi di stile con JavaScript?).

  2. #32
    Guest

    Predefinito

    Il primo codice l'ho inserito nel file esterno. Il secondo nel file script.js ma non ho capito bene come strutturarlo, vedo che hai messo delle voci che non mi servono.

    "Nessun indirizzo trovato",
    "Inserire l'email",
    "L'indirizzo nonè valido",
    "Il dominio non è valido"


    A me serve solo

    Inserire l'email
    Inserire un'email valida
    Questa email non è accettata


    Poi è la parte check_email che non capisco.

    In pratica devo inserire questi che poi ci pensano loro a richiamare i css

    document.getElementById('emailCampo').innerHTML = "•  Inserire l'email";
    document.getElementById('validaMail').innerHTML = "•  Inserire un'email valida";
    document.getElementById('spamMail').innerHTML = "•  Questa email non è è accettata";
    Ultima modifica di photoman : 24-04-2016 alle ore 04.37.58

  3. #33
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Ok, dunque la funzione di callback di cui hai bisogno diventa così:
    Codice:
    function my_callback(report) {
        // Address is valid: do nothing
        if (report.valid) {
            return;
        }
    
        // Error code 2: empty email
        if (report.error == 2) {
            document.getElementById('emailCampo').innerHTML = "•  Inserire l'email";
        }
        
        // Error code 3: bad address
        else if (report.error == 3) {
            document.getElementById('validaMail').innerHTML = "•  Inserire un'email valida";
        }
    
        // Error code 4: blacklisted domain
        else if (report.error == 4) {
            document.getElementById('spamMail').innerHTML = "•  Questa email non è è accettata";
        }
    }
    Se l'indirizzo è valido, la funzione non fa nulla. Altrimenti esamina il codice di errore restituito dalla pagina PHP, ed in base ad esso mostra il messaggio opportuno.
    La voce "in più" che avevo aggiunto era per gestire l'ulteriore codice di errore potenzialmente restituito dalla pagina PHP quando non le viene passato un parametro address.


    Poi è la parte check_email che non capisco.
    check_email effettua solo la chiamata AJAX, ed imposta la funzione di callback che verrà invocata al termine della richiesta.

  4. #34
    Guest

    Predefinito

    Ok, non funziona ancora, forse è la parte in fondo che non è a posto. Riassumendo, ho messo così:

    Nel file esterno email_ajax.php

    Codice PHP:
    <?php
    header
    ('Content-Type: application/json');

    function
    get_domain($address) {
    if (
    filter_var($address, FILTER_VALIDATE_EMAIL) === false) {
    return
    "";
    }

    return
    array_pop(explode('@', $address));
    }

    function
    in_blacklist($domain) {
    global
    $blacklist;

    return
    in_array($domain, $blacklist);
    }

    function
    report($valid = true, $error = 0, $message = "") {
    $result = array(
    "valid" => $valid,
    "error" => $error,
    "message" => $message
    );

    return
    json_encode($result);
    }

    $address = $_GET['address'];
    $domain = get_domain($address);

    if (empty(
    $address)) {
    echo
    report(false, 1);
    return;
    }

    if (
    filter_var($address, FILTER_VALIDATE_EMAIL) === false) {
    echo
    report(false, 2);
    return;
    }

    if (empty(
    $domain) || in_blacklist($domain)) {
    echo
    report(false, 3);
    return;
    }

    echo
    report(true);

    In script.js

    Codice PHP:
    function check_email(address, callback) {
    $.
    get("email_ajax.php", { "address": address }, callback);
    }

    function
    my_callback(report) {
    if (
    report.valid) {
    return;
    }
    if (
    report.error == 1) {
    document.getElementById('emailCampo').innerHTML = "&bull;&nbsp;&nbsp;Inserire l'email";
    }
    else if (
    report.error == 2) {
    document.getElementById('validaMail').innerHTML = "&bull;&nbsp;&nbsp;Inserire un'email valida";
    }
    else if (
    report.error == 3) {
    document.getElementById('spamMail').innerHTML = "&bull;&nbsp;&nbsp;Questa email non è &egrave; accettata";
    }
    }

    var
    address = $suoemail;
    email_ajax(address, my_callback);
    Ultima modifica di photoman : 24-04-2016 alle ore 13.02.36

  5. #35
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Nel JavaScript:
    Codice:
    var address = $suoemail;
    email_ajax(address, my_callback);
    In address devi leggere l'indirizzo email inserito dall'utente. Puoi usare jQuery, oppure il classico getElementById per recuperarlo dal modulo.
    La funzione da chiamare è check_email, non email_ajax che non è definita (a meno che tu non intenda cambiare il nome anche nella definizione della funzione, cosa perfettamente fattibile).
    Ricorda che questo frammento di codice dovrà essere eseguito più volte (ad ogni tentativo di invio del modulo, per esempio, oppure ogni volta che l'utente termina di scrivere l'indirizzo email), quindi andrà collocato dentro un listener.

    PS: Nel PHP ricorda di includere la definizione di $blacklist.

  6. #36
    Guest

    Predefinito

    Non riesco a venirne fuori, a quanto pare sembra tutto a posto tranne queste 2 righe, che non so come sistemare.

    Codice PHP:
    var address = $suoemail;
    check_email(address, my_callback);
    Nel file php ho questo

    Codice PHP:
    include ("email_spam.php"); // dentro c'è $blacklist = array (...

    function get_domain($address) {
    if (
    filter_var($address, FILTER_VALIDATE_EMAIL) === false) {
    return
    "";
    }
    return
    array_pop(explode('@', $address));
    }

    function
    in_blacklist($domain) {
    global
    $blacklist;
    return
    in_array($domain, $blacklist);
    }
    $domain = get_domain($suoemail);
    if (empty(
    $suoemail)) {
    $errore .= "&bull;&nbsp;&nbsp;Inserire l'email<br><br>";
    }
    else {
    if (
    filter_var($suoemail, FILTER_VALIDATE_EMAIL) === false) {
    $errore .= "&bull;&nbsp;&nbsp;Inserire un'email valida<br><br>";
    }
    elseif (empty(
    $domain) || in_blacklist($domain)) {
    $errore .= "&bull;&nbsp;&nbsp;Questa email non &egrave; accettata<br><br>";
    }
    }
    Ultima modifica di photoman : 25-04-2016 alle ore 11.37.14

  7. #37
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Non riesco a venirne fuori, a quanto pare sembra tutto a posto tranne queste 2 righe, che non so come sistemare.
    Prova a seguire le indicazioni del messaggio precedente, ovvero leggere l'indirizzo email inserito dall'utente ed usarlo per impostare address.

  8. #38
    Guest

    Predefinito

    Il punto è proprio questo, come leggo l'indirizzo email dell'utente in js, forse una cosa del genere?

    function validaMailX() {
    var f = document.forms.mioform1;
    var address = document.getElementById('validaMail').innerHTML = "&bull;&nbsp;&nbsp;Inserire un'email valida";
    check_email(address, my_callback);
    }
    Ultima modifica di photoman : 26-04-2016 alle ore 01.26.20

  9. #39
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    In generale:
    Codice:
    var value = document.myFormName.myFieldName.value;
    Dove myFormName e myFieldName sono i nomi (intesi come il valore dell'attributo name) degli elementi in questione nel modulo. Ad esempio:
    Codice HTML:
    <form name="contact">
        <input type="text" name="adrress" />
    </form>
    
    <script>
    var address = document.contact.address.value;
    </script>
    Altri esempi:


    Ci sono numerosi metodi alternativi, ad esempio usando jQuery, oppure assegnando identificatori ai campi ed accedendo tramite getElementById.

  10. #40
    Guest

    Predefinito

    Nel form ho questo


    ...
    <label class="nomi1">Tua EMAIL<span class="asterisco">&nbsp;*</span></label>
    <input type="text" name="suoemail" class="campi" value="<?php if(isset($_SESSION['suoemail'])){ echo $_SESSION['suoemail'];}else{ echo "";} ?>" onkeyup="emailCampo(); contaUser(this); contaMail(); validaMail(); spamMail()" onblur=" validaEmail(); this.value=ignoreSpaces(this.value)">
    div id="emailCampo"></div><div id="contaUser"></div><div id="contaEmail"></div><div id="validaMail"></div><div id="spamMail"></div>
    ...


    In base al tuo esempio ho messo così. ma non appare l'alert js istantaneo, parte subito ai controlli php

    Codice PHP:
    function validaMail() {
    var
    address = document.mioform1.suoemail.value;
    check_email(address, my_callback);
    }
    Ultima modifica di photoman : 26-04-2016 alle ore 11.27.24

  11. #41
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Hai controllato che non ci siano errori nel codice JavaScript, ad esempio con la console degli errori?

  12. #42
    Guest

    Predefinito

    Mi da questo errore nella index, ma io non l'ho toccata. Ho provato con Firefox, anche se tolgo lo script, il codice non funziona lo stesso.

    Codice PHP:
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2/jquery.min.js"></script>
    <!--Quando il DOM è pronto, carica jQuery-->
    <script>
    $(document).ready(function() {
    });
    </script>


    Cosi ne richiama 3 in un colpo:

    Codice PHP:
    function emailCampo(); validaMail(); spamMail() {
    var
    address = document.mioform1.suoemail.value;
    check_email(address, my_callback);
    }
    Ultima modifica di photoman : 26-04-2016 alle ore 13.47.34

  13. #43
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Non hai incluso correttamente jQuery. L'URL da utilizzare e':
    Codice HTML:
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.2/jquery.min.js"></script>
    (Nota il "2.2.2" anziche' "2")

  14. #44
    Guest

    Predefinito

    Avevo letto che mettendo 2 intercettava automaticamente l'ultima versione di "2"

    Ho modificato, Firefox mostra ancora errore, anche altri errori di script, ma non funziona ancora.
    Ultima modifica di photoman : 26-04-2016 alle ore 19.18.31

  15. #45
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Bene, allora è il caso di correggere tutti quegli errori, uno alla volta.

  16. #46
    Guest

    Predefinito

    Ho fatto una prova, a quanto pare l'errore è in questo codice, perché ripristinando il mio originale che avevo in script.js, gli errori spariscono tranne quello di prima $(document).ready(function() {...

    Se ne tolgo 2 e lascio es. validaMail() non da più errore


    Codice PHP:
    function emailCampo(); validaMail(); spamMail() {
    var
    address = document.forms.mioform1.suoemail.value;
    check_email(address, my_callback);
    }
    Ultima modifica di photoman : 26-04-2016 alle ore 21.03.25

  17. #47
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Infatti quel frammento di codice non ha senso.
    Con function definisci una funzione, ma subito dopo hai due chiamate (emailCampo() e validaMail()) seguite da una "definizione" di spamMail (che non essendo preceduta da function non è più una definizione...).
    Cosa volevi fare esattamente?

  18. #48
    Guest

    Predefinito

    Beh, mi sembrava fosse chiaro cosa volessi fare. A me basterebbe solo che FILTER_VALIDATE_EMAIL tramite ajax, venga venga usato anche da js in modo che valida l'email anche jn js coma in php. gli altri 2 controlli (campo vuoto e dominio spam) avevo già i controlli js che funzionavano.

    Poi tu mi hai creato un codice con tutti e 3 questi controlli, perciò va bene.

  19. #49
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Scusa, intendevo dire "cosa intendevi fare in quel pezzo di codice": definire una funzione o invocarne una?

  20. #50
    Guest

    Predefinito

    Visto che mi hai già preparato il codice con 3 alert, a questo punto è meglio richiamarli dal php in js con Ajax. Ti posto il tutto:

    PHP
    Codice PHP:
    //Email (Campo obbligatorio), valida email e intercetta il dominio spam
    function get_domain($address) {
    if (
    filter_var($address, FILTER_VALIDATE_EMAIL) === false) {
    return
    "";
    }
    return
    array_pop(explode('@', $address));
    }

    function
    in_blacklist($domain) {
    global
    $blacklist;
    return
    in_array($domain, $blacklist);
    }
    $domain = get_domain($suoemail);
    if (empty(
    $suoemail)) {
    $errore .= "&bull;&nbsp;&nbsp;Inserire l'email<br><br>";
    }
    else {
    if (
    filter_var($suoemail, FILTER_VALIDATE_EMAIL) === false) {
    $errore .= "&bull;&nbsp;&nbsp;Inserire un'email valida<br><br>";
    }
    elseif (empty(
    $domain) || in_blacklist($domain)) {
    $errore .= "&bull;&nbsp;&nbsp;Questa email non &egrave; accettata<br><br>";
    }
    }

    Nel file email_ajax.php
    Codice PHP:
    <?php
    header
    ('Content-Type: application/json');

    function
    get_domain($address) {
    if (
    filter_var($address, FILTER_VALIDATE_EMAIL) === false) {
    return
    "";
    }

    return
    array_pop(explode('@', $address));
    }

    function
    in_blacklist($domain) {
    global
    $blacklist;

    return
    in_array($domain, $blacklist);
    }

    function
    report($valid = true, $error = 0, $message = "") {
    $result = array(
    "valid" => $valid,
    "error" => $error,
    "message" => $message
    );

    return
    json_encode($result);
    }

    $address = $_GET['address'];
    $domain = get_domain($address);

    // Controlla se il campo è vuoto
    if (empty($address)) {
    echo
    report(false, 1);
    return;
    }

    // Controlla se è un'email valida
    if (filter_var($address, FILTER_VALIDATE_EMAIL) === false) {
    echo
    report(false, 2);
    return;
    }

    // Controlla se il dominio è spam
    if (empty($domain) || in_blacklist($domain)) {
    echo
    report(false, 3);
    return;
    }

    echo
    report(true);

    E questo in script.js (le 3 funzioni in fondo le ho messe così ma non so se vanno bene)
    Codice PHP:
    function check_email(address, callback) {
    $.
    get("email_ajax.php", { "address": address }, callback);
    }

    function
    my_callback(report) {
    if (
    report.valid) {
    return;
    }
    if (
    report.error == 1) {
    document.getElementById('emailCampo').innerHTML = "&bull;&nbsp;&nbsp;Inserire l'email";
    }
    else if (
    report.error == 2) {
    document.getElementById('validaMail').innerHTML = "&bull;&nbsp;&nbsp;Inserire un'email valida";
    }
    else if (
    report.error == 3) {
    document.getElementById('spamMail').innerHTML = "&bull;&nbsp;&nbsp;Questa email non è &egrave; accettata";
    }
    }

    function
    emailCampo() {
    var
    address = document.forms.mioform1.suoemail.value;
    check_email(address, my_callback);
    }

    function
    validaMail() {
    var
    address = document.forms.mioform1.suoemail.value;
    check_email(address, my_callback);
    }

    function
    spamMail() {
    var
    address = document.forms.mioform1.suoemail.value;
    check_email(address, my_callback);
    }
    Ultima modifica di photoman : 27-04-2016 alle ore 10.14.37

  21. #51
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Le tre funzioni in fondo sono esattamente uguali: ne basta una.

  22. #52
    Guest

    Predefinito

    Anche mettendone una, il tutto non funziona

  23. #53
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    "Non funziona" è un po' generico: cosa riporta la console degli errori?

  24. #54
    Guest

    Predefinito

    L'unico errore che riporta è quello del post 42

  25. #55
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Allora jQuery non è ancora incluso correttamente. Mostra il codice che usi.

  26. #56
    Guest

    Predefinito

    Codice PHP:
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.3/jquery.min.js"></script>
    <!--Quando il DOM è pronto, carica jQuery-->
    <script>
    $(document).ready(function() {
    });
    </script>

  27. #57
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Usa "2.2.2", nell'URL, non "2.2.3".

  28. #58
    Guest

    Predefinito

    Ok, qualcosa sta iniziando a funzionare, appaiono gli alert, ma non tutti, eppoi non sono istantanei ma all'onblur. Dovrebbero essere invece all' onkeyup.

  29. #59
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Mostra il codice nell'attributo onkeyup, è possibile che contenga degli errori i quali fanno sì che esso non venga eseguito. Controlla anche la console degli errori.

  30. #60
    Guest

    Predefinito

    La console non da più errori.

    <input type="text" name="suoemail" class="campi" value="<?php if(isset($_SESSION['suoemail'])){ echo $_SESSION['suoemail'];}else{ echo "";} ?>" onkeyup="emailCampo(); contaUser(this); contaEmail(); validaMail(); spamMail()" onblur=" validaMail(); this.value=ignoreSpaces(this.value)"> <!-- Rimuove tutti gli spazi (attacca le parole) -->

Pagina 2 di 6 PrimoPrimo 1234 ... UltimoUltimo

Regole di scrittura

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