Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2001
    residenza
    Napoli, Italia
    Messaggi
    1,074

    controllo email + altro

    Dovendo immettere molti dati (indirizzi email) in un db, partendo da un file .txt in formato CVS, mi sono fatto un form per controllare anche la effettiva sussistenza dei dati immessi - ovvero, se sono effettivamente indirizzi email nel formato corretto.
    É infatti possibile che, nel file .txt, ci siano svarioni ed errori di battuta, del tipo:
    tizio@dominio oppure tizio@dominio., etc...
    Ho quindi usato questo codice:
    Codice PHP:
    function chkEmail($value) {  
                   
    $value trim($value);  
                   if(
    $value != "") {  
                   if(!
    preg_match'/^[\w\.\-]+@\w+[\w\.\-]*?\.\w{1,4}$/'$value))
                   return 
    false;
                   else return 
    true;
       }  
       else return 
    false;
    }
    $mails $_POST['tfield']; 
    $mails strtolower($mails);
    $mail explode(",","$mails");
    foreach (
    $mail as $value) {
            
    $result mysql_query("SELECT * FROM `coll` WHERE `email` = '$value'");
            
    $chk mysql_num_rows($result);
            if (
    $chk == 0) {
            
    chkEmail($value);
            
    $query1 = ("INSERT INTO `coll` (`email`) VALUES ('$value')");
            
    $result1 mysql_query($query1)
            or die(
    "Query failed");
            } 
        } 
    Però, non mi effettua nessun controllo. Per verificare la funzionalità, infatti, ho inserito un blocco di dati tra cui c'erano delle stringhe del tipo: test@ oppure test@test., che sono state inserite nel db, e quindi considerate valide.
    Dove ho toppato?
    metatad
    graphic & web design

  2. #2
    Guarda qui

    Ciao VVoVe:
    --

    __ [ K3iji ] __

  3. #3
    codice:
    [...]
            if ($chk == 0) {
            chkEmail($value);
            $query1 = ("INSERT INTO `coll` (`email`) VALUES ('$value')");
            $result1 = mysql_query($query1)
            or die("Query failed");
            }
    [...]
    In questo modo non controlli nulla, perche' la funzione chkEmail ritorna semplicemente un valore booleano e non e' associato a nessun tipo di controllo, e' li' solo soletto... Prova cosi':

    codice:
    [...]
            if (($chk == 0) && (chkEmail($value))) {
            $query1 = ("INSERT INTO `coll` (`email`) VALUES ('$value')");
            $result1 = mysql_query($query1)
            or die("Query failed");
            }
    [...]

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2001
    residenza
    Napoli, Italia
    Messaggi
    1,074
    Beh, ho provato, così:
    Codice PHP:
    $mails $_POST['tfield']; 
    $mails strtolower($mails);
    $mail explode(",","$mails");
    foreach (
    $mail as $value) {
            
    $result mysql_query("SELECT * FROM `coll` WHERE `email` = '$value'");
            
    $chk mysql_num_rows($result);
            if (
    $chk == 0) {
            if (!
    ereg("^[^@ ]+@[^@ ]+\.[^@ \.]+$"$value)){
            echo 
    " Questa $value non è una email valida
    "
    ;
            } else {
            
    $query1 = ("INSERT INTO `coll` (`email`) VALUES ('$value')");
            
    $result1 mysql_query($query1)
            or die(
    "Query failed");
                }
            } 
        } 
    Ma il risultato è che mi inserisce soltanto il primo dato estratto, se valido, mentre mi restituisce questo elenco:
    Questa info@dominio.it non è una email valida
    Questa info@dominio.com non è una email valida
    Questa info@dominio.net non è una email valida
    Questa test1 non è una email valida
    Questa test2@ non è una email valida
    Questa test4@test. non è una email valida
    da cui si evince che mi considera non valide anche le tre che seguono la prima, che invece sono email valide!
    metatad
    graphic & web design

  5. #5
    uhm ... ti do l'espressione regolare che uso io e che fino ad ora non mi ha mai tradito, prova un po':

    codice:
    eregi ("^[[:alnum:]][a-z0-9_.-]*@[a-z0-9.-]+\.[a-z]{2,6}$", $value)

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2001
    residenza
    Napoli, Italia
    Messaggi
    1,074

    Allora, ho usato:
    Codice PHP:
    if (!eregi ("^[[:alnum:]][a-z0-9_.-]*@[a-z0-9.-]+\.[a-z]{2,6}$"$value)){ 
    Immettendo come dati queste righe:
    test3@test, jennifer@dominio.it, info@dominio.net, artecontemporanea@dominio.com, test1, test2@, test4@test.
    Mi stampa a video:
    Questa jennifer@dominio.it non è una email valida
    Questa info@dominio.net non è una email valida
    Questa test1 non è una email valida
    Questa test2@ non è una email valida
    Questa test4@test. non è una email valida

    e non inserisce niente nel db!!!
    Insomma, stando a quanto stampa a video:
    - ignora del tutto la prima email (test3@test)
    - considera non valide le prime due email corrette ( )
    - apparentemente considera valida la terza, ma non la inserisce nel db!
    metatad
    graphic & web design

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2001
    residenza
    Napoli, Italia
    Messaggi
    1,074
    Divento matto...
    Se, per il controllo delle email, uso questa stringa:
    Codice PHP:
    if (!(ereg("([[:alnum:]\.\-]+)(\@[[:alnum:]\.\-]+\.+)"$value))) {
            echo 
    " Questa $value non è una email valida
    "
    ;
            } else {
            echo 
    " Questa $value è una email <u>valida</u>
    "
    ;

    incontro due (ben strani!) problemi:
    - se immetto il dato: artecontemporanea@spiralearte.com, non mi restituisce nulla!!!
    - se immetto il dato: test2@test., mi restituisce Questa test2@test. è una email valida!
    Mi chiedo:
    - perchè il primo dato non dà risultati? Apparentemente, sembrerebbe che a creare il problema sia la lunghezza delle parole che precedono/seguono la @; è possibile? E come posso risolvere?
    - con il secondo dato, evidentemente per la validazione basta che, dopo la @, sia presente un punto, anche se non è seguito da nulla; ma ovviamente, così non va. Quindi, come si può risolvere?
    Please, help!!!
    metatad
    graphic & web design

  8. #8
    Per testare la semplice espressione regolare, prova con quella che ti ho postato io ...

    Per quanto riguarda il comportamento strano di prima, controlla bene il codice, ci dev'essere qualche inghippo da qualche parte, e non ho molto tempo ora di controllartelo a fondo purtroppo

  9. #9
    Prova con questa
    Codice PHP:
    FUNCTION chkEmail($value) {

       IF(!
    eregi ("^[[:alnum:]][a-z0-9_.-]*@[a-z0-9.-]+\.[a-z]{2,6}$"$value)){
          RETURN 
    FALSE;
       }ELSE{
          RETURN 
    TRUE;
       }
    }

    $mails "artecontemporanea@spiralearte.com";  //$_POST['tfield'];

    IF(chkEmail($mails) == FALSE)
      { ECHO 
    " Questa $mails non è una email valida"; }
    ELSE
      { ECHO 
    " Questa $mails è una email valida"; } 
    E' la funzione che ti ha postato Darsch2501, io ho provato e funziona.

    ciao
    --

    __ [ K3iji ] __

  10. #10
    Utente di HTML.it
    Registrato dal
    Sep 2001
    residenza
    Napoli, Italia
    Messaggi
    1,074
    Il codice postato da Darsch2501 l'ho testato, con i risultati riportati (vedi 6° post).
    Un paio di passi avanti, comunque, li ho fatti. Usando come codice:
    Codice PHP:
    if (!(ereg("([[:alnum:]\.\-]+)(\@[[:alnum:]\.\-]+\.+)([[:alnum:]\.\-]+)"$value))) {
            echo 
    " Questa $value non è una email valida
    "
    ;
            } else {
            echo 
    " Questa $value è una email <u>valida</u>
    "
    ;

    adesso, se un dato in input è del tipo test@test. lo riconosce come non valido. Invece, la cosa ancora e sempre più strana è che, contrariamente a quanto pensavo, l'altro problema non è dovuto alla lunghezza prima/dopo @; infatti, ho fatto varie prove, anche con lunghezze esagerate, e funziona.
    Però ( ), continuo ad incontrare un problema assolutamente incomprensibile.
    Se tra i dati immessi c'è: artecontemporanea@spiralearte.com non dà alcun risultato; se cambio l'estensione in .it, o .net, .org o quant'altro, funziona. Se, poi, a artecontemporanea@spiralearte.com tolgo una lettera qualsiasi, o semplicemente ne sostituisco una con un'altra!, funziona!!!
    Come se non bastasse, se inserisco questi dati:
    artecontemporanea@spiralearte.net, info@galleriafrancescakaufmann.com, galleriapack@libero.it, info@colomboarte.com, info@suzishammah.com, test4, test2@test., test1@test mi restituisce questo:
    Questa artecontemporanea@spiralearte.net è una email valida
    Questa info@galleriafrancescakaufmann.com è una email valida
    Questa info@suzishammah.com è una email valida
    Questa test4 non è una email valida
    Questa test2@test. non è una email valida
    Questa test1@test non è una email valida

    ignorando del tutto galleriapack@libero.it !
    Se, invece, scrivo soltanto galleriapack@libero.it , allora lo riconosce!!!
    Mi sembra tutto una follia...
    metatad
    graphic & web design

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.