Visualizzazione risultati 1 fino 5 di 5

Discussione: Ciao, problema con il php, chi mi da una mano?

  1. #1
    Guest

    Predefinito

    Questo è il problema!

    Sto scrivendo un form per spedire e-mail dal mio sito, in sostituzione di quello che c'è già, che fa alquanto schifetto.
    Il nuovo form così com'è, funziona benone, ma quando tento di verificare la correttezza del campo e-mail, mi sorge un problema:
    • se nel box email non scrivo nulla, giustamente vengo avvisato dell'errore.

    • se nel box inserisco qualcosa, senza mettere ne @ e ne il punto, giustamente vengo avvisato della mancanza.

    • se nel box inserisco solo un punto, vengo giustamente avvisato della mancanza del @

    • Ma se nel box inserisco anche solo @ il codice mi viene validato e la mail inoltrata, ovviamente con errore sul server.


    In pratica, ogni volta che incontra un @ il codice della mail viene validato e questo non è un buon controllo. Questo qui sotto è un estratto del codice:
    [code:1:e805f03ba7]
    if (trim($mailMitt)=='') { // E-mail mittente, campo vuoto.
    echo "<li>Manca l'e-mail del <b>mittente</b></li><br>\n";
    $errori++;
    } else {
    if (!eregi("@", trim($mailMitt))) { // E-mail mittente, manca la @.
    echo "<li>L'e-mail del <b>mittente</b> è scritta male! Manca <b>@</b></li><br>\n";
    $errori++;
    }
    if (!eregi(".", trim($mailMitt))) { // E-mail mittente, manca il (.)
    echo "<li>L'e-mail del <b>mittente</b> è scritta male! Manca il <b>punto</b></li><br>\n";
    $errori++;
    }
    }
    [/code:1:e805f03ba7]
    Il flag $errori non serve a conteggiare gli errori, ma evidenzia solo se ci sono, parte da una condizione 0 errori, e via via viene incrementato.
    Più avanti nel codice viene fatto un confronto su di esso, per verificare se è maggiore di 0, in questo caso viene evidenziata una scritta ed un rimando alla pagina precedente, dove si possono correggere gli errori sul fom di invio.

    Chi può aiutarmi a risolvere il problema?
    Grazie in anticipo. :)

  2. #2
    L'avatar di Evcz
    Evcz non è connesso Utente storico
    Data registrazione
    31-05-2002
    Residenza
    Vicenza
    Messaggi
    5,670

    Predefinito

    questo è il controllo ke uso nel mio .... xrò è in javascript:

    [code:1:021da8d77c]
    function testmail() {
    e = document.form.email.value;
    if (e=="") {
    msg="Devi inserire l'e-mail";
    document.form.email.select();
    }
    else {
    a = e.indexOf("@"); // posizione della chiocciola
    p = e.lastIndexOf("."); // posizione del punto
    if (a<3 || p<(a+4) || p>(e.length-3)) {
    msg2="Devi inserire una e-mail valida";
    document.form.email.select();
    }
    }
    [/code:1:021da8d77c]

    basto ke fai il controllo prima dell'inoltro...

    byez
    There are three kinds of people in this world: people who watch things happen ... people who complain about things that happen ... and people who make things happen...

  3. #3
    Guest

    Predefinito

    Avevo già risolto il problema con il javascript, ma vorrei risolverlo con il php, altrimenti dovrei riscrivere due programmi, non sarebbe un grosso problema, ma vorrei almeno capire il perchè del malfunzionamento.
    Al momento non l'ho ancora risolto, ma prima o poi ...
    Ciao e grazie.

  4. #4
    Guest

    Predefinito

    io uso questi controlli

    [code:1:037383a924]

    if ((!$email) || ($email=="") || (!eregi("^[_\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+[a-z]{2,6}$",$email))) {
    $stop = "email errata";
    }

    if (strrpos($email,' ') > 0) {
    $stop = "ci sono spazi nella email";
    }

    [/code:1:037383a924]

  5. #5
    Guest

    Predefinito

    Grazie comunque, ci sono arrivato alla fine
    Ecco qui il codicillo, poco elegante ma funzionale:

    [code:1:b4c98a02cd]
    if (trim($mailDest)=='') { // E-mail destinatario.
    echo "<li>Manca l'e-mail del <b>destinatario</b></li><br>\n";
    $errori++;
    } else {
    $at = strpos(trim($mailDest), '@');
    $p = strpos(trim($mailDest), '.');
    $flag = 0;
    if ($at === false) { // E-mail destinatario, manca la @.
    echo "<li>L'e-mail del <b>destinatario</b> è scritta male! Manca <b>@</b></li><br>\n";
    $errori++;
    }
    if ($at <= 1) { // Il nome per l'email destinatario, è troppo corto.
    echo "<li>L'email del <b>destinatario</b> è scritta male! <b>Troppo corta!</b></li><br>\n";
    $errori++;
    }
    if ($p === false) { // E-mail destinatario, manca il (.)
    echo "<li>L'e-mail del <b>destinatario</b> è scritta male! Manca il punto</li><br>\n";
    $errori++;
    }
    }
    [/code:1:b4c98a02cd]
    Non mi piaceva l'idea di una funzione "non integrata" però alla fine è sta la cosa che mi ha risolto il problema, comunque buona l'idea di verificare l'eventuale inserzione di spazzi nella stringa contenente l'indirizzo e-mail .... sì, sì, ora l'implemento :D
    Ciao. :)

Regole di scrittura

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