verifica della @

monigna82

Nuovo Utente
22 Ago 2011
2
0
0
salve a tutti
avrei bisogno, in una form, di poter fare un controllo sul campo mail.

Ovviamente non chiedo di verificare che l'indirizzo sia realmente esistente ma quanto mano che l'utente che mi lascia la mail inserisca una stringa di testo contenente la "@".

La mia form è stata realizzata con HTML:
codice:
HTML:
<!-- controllo sui campi -->
<script type="text/javascript" language="javascript">
function checkrequired(which){
var pass=true
if (document.images){
for (i=0;i<which.length;i++){
var tempobj=which.elements[i]
if (tempobj.name.substring(0,8)=="required"){
if
(((tempobj.type=="text"||tempobj.type=="textarea")&&tempobj.value=='')||(tempobj.type.toString().charAt(0)=="s"&&tempobj.selectedIndex==-1)){
pass=false
break
}
}
}
}
if (!pass){
alert("I campi sono obbligatori. Clicca su OK e compila il modulo")
return false
}
else
return true
}
</script> 
<!-- fine controllo dei campi -->


<form onSubmit="return checkrequired(this)" action="mail.php" method="post">
<table width="30%" align="center" >
    <tr>
     <td width="30%" align="right" class="style4"><strong>Nome </strong>* </td>
     <td width="70%" align="right">
       <div align="left">
         <input type=text name="requirednome" size="30" />
         <br />
    </div></td></tr>
<tr>
     <td width="30%" align="right" class="style4"> <strong>E-mail </strong>* </td>
     <td width="70%" align="right"><div align="left">
       <input type=text name="requiredmail" size="30" />
        </div></td></tr>
<tr>
     <td colspan="2"><div align="center">       <br />
     <input type="submit" name="submit" value="Iscrivimi">
     </div></td>
     </tr>
     </table>
</form>


e di una pagina di risposta mail.php :
codice:
PHP:
 <?php
 // L'INDIRIZZO DEL DESTINATARIO DELLA MAIL
 $to = "miamail@miosito.com";
 
 // IL SOGGETTO DELLA MAIL
 $subject = "Iscrizione dal sito web";
 
 // COSTRUZIONE DEL CORPO DEL MESSAGGIO
 $body = "Dati per Invio Newsletter:\n\n";
 
 $body .= "nome: " . trim(stripslashes($_POST["requirednome"])) . "\n";
 $body .= "mail: " . trim(stripslashes($_POST["requiredmail"])) . "\n";
 
 // INTESTAZIONI SUPPLEMENTARI
 $headers = "From: Iscrizione <INDIRIZZO-COME-SOPRA>";
 
 // INVIO DELLA MAIL
 if(@mail($to, $subject, $body, $headers)) { // SE L'INOLTRO E' ANDATO A BUON FINE...
 
 echo "L'iscrizione è avvenuta con successo.";
 
 } else {// ALTRIMENTI...
 
 echo "Si sono verificati dei problemi nell'invio della mail.";
 
 }
 
 ?>


Cosa posso aggiungere e dove per poter costringere l'utente ad usare almeno la @ nel campo relativo alla mail?
Ovvero.. mi hanno indicati di inserire:

$email = $_POST['requiredmail'];

if(!filter_var($email, FILTER_VALIDATE_EMAIL))
{
exit("E-mail non valida");
}

ma sapete dirmi dove inserire tali script?

Grazie anticipatamente!
 
direi di effettuare anche un controllo sull'effettivo invio del parametro:
PHP:
if(isset($_POST['requiredmail']))
{
$email = $_POST['requiredmail'];
}
 
scusate la confusione ma per intenderci dovrei scrivere nella pagina PHO
PHP:
<?php
$email = $_POST['requiredmail'];
if(!filter_var($email, FILTER_VALIDATE_EMAIL))
{
exit("E-mail non valida");
}

.... e poi continuare con quello che già c'era prima?
PHP:
// L'INDIRIZZO DEL DESTINATARIO DELLA MAIL 
 $to = "miamail@miosito.com"; 
  
 // IL SOGGETTO DELLA MAIL 
 $subject = "Iscrizione dal sito web"; 
  
 // COSTRUZIONE DEL CORPO DEL MESSAGGIO 
 $body = "Dati per Invio Newsletter:\n\n"; 
  
 $body .= "nome: " . trim(stripslashes($_POST["requirednome"])) . "\n"; 
 $body .= "mail: " . trim(stripslashes($_POST["requiredmail"])) . "\n"; 
  
 // INTESTAZIONI SUPPLEMENTARI 
 $headers = "From: Iscrizione <INDIRIZZO-COME-SOPRA>"; 
  
 // INVIO DELLA MAIL 
 if(@mail($to, $subject, $body, $headers)) { // SE L'INOLTRO E' ANDATO A BUON FINE... 
  
 echo "L'iscrizione è avvenuta con successo."; 
  
 } else {// ALTRIMENTI... 
  
 echo "Si sono verificati dei problemi nell'invio della mail."; 
  
 } 
  
 ?>
 
Esatto, così il codice per l'invio viene attivato soltanto soltanto in presenza del parametro $_POST["requiredmail"].
 
Io direi di usare le espressioni regolari, così controlli non solo che ci sia la @ ma anche se l'indirizzo inserito abbia il formato usermail@provider.nazione ovvero in questo modo:

PHP:
<?php
if(isset($_POST['requiredmail']))
{
   $email = $_POST['requiredmail'];
   if(preg_match('/^(?:(?:(?:[^@,"\[\]\x5c\x00-\x20\x7f-\xff\.]|\x5c(?=[@,"\[\]\x5c\x00-\x20\x7f-\xff]))(?:[^@,"\[\]\x5c\x00-\x20\x7f-\xff\.]|(?<=\x5c)[@,"\[\]\x5c\x00-\x20\x7f-\xff]|\x5c(?=[@,"\[\]\x5c\x00-\x20\x7f-\xff])|\.(?=[^\.])){1,62}(?:[^@,"\[\]\x5c\x00-\x20\x7f-\xff\.]|(?<=\x5c)[@,"\[\]\x5c\x00-\x20\x7f-\xff])|[^@,"\[\]\x5c\x00-\x20\x7f-\xff\.]{1,2})|"(?:[^"]|(?<=\x5c)"){1,62}")@(?:(?!.{64})(?:[a-zA-Z0-9][a-zA-Z0-9-]{1,61}[a-zA-Z0-9]\.?|[a-zA-Z0-9]\.?)+\.(?:xn--[a-zA-Z0-9]+|[a-zA-Z]{2,6})|\[(?:[0-1]?\d?\d|2[0-4]\d|25[0-5])(?:\.(?:[0-1]?\d?\d|2[0-4]\d|25[0-5])){3}\])$/',$email))
   {
      //email corretta, inserire il codice qua.
   }
   else
   {
      //email non corretta, inserire il codice qua.
   }
}
?>

Dopo che hai la variabile $email ci fai quello che vuoi ;)
 

Discussioni simili