Mail: controllo campi

IImanuII

Utente Attivo
10 Giu 2012
390
0
16
Sempre per il mio stramaledetto form, leggendo in giro, ho compreso l'utilità del controllo dei campi all'interno di un form. :mavieni:

Così vorrei impostare i controlli all'interno del form.

La pagina dove devono andare i controlli è strutturata in questo modo:
PHP:
<?php 
//tutti le variabili che vengono prima


// ...controllo tutte le variabili che non devono essere vuote per inviare la mail, e poi setto nulle se inviata o faccio un redirect 
if(!empty($oggetto) && !empty($msg)  ) { 

//parte dove uso la classe phpmailer
 $mail->Subject = $oggetto; 
  $mail->Body = $msg; 

// controllo se il codice di verifica è corretto (il captcha)
if(md5($verif_box).'a4xn' == $_COOKIE['tntcon']){
	// se il codice di verifica è corretto invio il messaggio
	$mail->Send();
	// cancello il cookie del campo di verifica
	setcookie('tntcon','');
} else if(isset($message) and $message!=""){
	// se il codice di verifica non è corretto o provano ad accedere direttamente alla pagina php mostro l'errore.
} else {

	header('Location: ops.php');
	
	exit;
	}
	
} //fine del controllo dei campi vuoti 

else {  //se i campi sono vuoti mostro l'errore

header('Location: ops.php'); 
     
    exit; 
    }

?>

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>E-Mail Inviata</title>
<style type="text/css">
<!--
body,td,th {
	font-family: Arial, Helvetica, sans-serif;
	font-size: 12px;
}
-->
</style></head>
h="100%" height="100%">
<tr>
<td align="center" valign="middle">

Email inviata. Grazie.<br />
<br />
<a href="javascript:history.go(-1)">Torna indietro</a>

</td>
</tr>
</table>
</body>
<body>
<table widt
</html>

Adesso vorrei sostituire il controllo dei campi vuoti che già c'è con questo script http://www.phpnews.it/articoli/controllare-la-validita-di-una-email/
Come lo adatto? Inoltre vorrei che il controllo della mail "function chkEmail($email)" non controlli solo $email ma più campi es. $email2 $email3 $email4 ecc...
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
per verificare se l'indirizzo email è valido usa la funzione php filter_var

PHP:
if(filter_var($email, FILTER_VALIDATE_EMAIL))){
	echo "indirizzo valido";
}else{
	echo "indirizzo NON valido";
}
per controllare piu campi si deve vedere come ai chiamato i campi, se es.

HTML:
<!--............-->
email 1<input name="email[]" type="text" id="email" >
email 2<input name="email[]" type="text" id="email" >
email 3<input name="email[]" type="text" id="email" >
<!--............-->
poi per controllarle tutte poi fai un ciclo foreach
PHP:
<?php
//....
foreach($_POST['email'] as $valore){
     if(!filter_var($valore, FILTER_VALIDATE_EMAIL))){
          //non valido
     }else{
          //valido
     }
}
//.....
?>
 

IImanuII

Utente Attivo
10 Giu 2012
390
0
16
Sei sempre tu oh fanciullo borgo ad aiutarmi! xD

Se ho ben capito, la struttura dovrebbe essere così, illuminami se erro

PHP:
<?php 
//tutti le variabili che vengono prima

//arrivo alla parte dell'invio del messaggio
if ($_POST['Submit'] == 'Invia')
{

// Recupero il valore dei campi del form per es:

$email1 = $_POST['emailA'];
$email2 = $_POST['emailB'];
$email3 = $_POST['emailC'];

//uso la classe phpmailer

  $mail->ValorePhpmailer($email1 ); 
  $mail->ValorePhpmailer($email2 ); 
  $mail->ValorePhpmailer($email3 ); 

//controllo con il ciclo

$tutte = ($email1, $email2, $email3);

foreach($tutte as $valore){ 
     if(!filter_var($valore, FILTER_VALIDATE_EMAIL))){ 

          //non valido => reindirizzo sulla mia pagina d'errore
        header('Location: ops.php');
	
	exit;

     }else{ 

          //valido => posso inviare la mail
          $mail->Send();

     } 
} 

} //chiudo l'if dell'invio

EDIT: ma tale filtro "FILTER_VALIDATE_EMAIL" controlla anche che il campo non sia vuoto?
 
Ultima modifica:

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
forse sarebbe meglio al posto di
PHP:
$tutte = ($email1, $email2, $email3);
mettere
PHP:
$tutte = array($email1, $email2, $email3);
credo che come hai scritto tu vada bene da php6 e non nelle precedenti (ma potrei sbagliarmi).
comunque perchè nel form non chiami i vari indirizz email[] così nel foreach puoi usare direttamente $_POST['email']?
poi
cosa è
PHP:
$mail->ValorePhpmailer($email1 ); 
$mail->ValorePhpmailer($email2 ); 
$mail->ValorePhpmailer($email3 );
?
non mi sembra che in phpmailer ci sia una funzione chiamata ValorePhpmailer.
inoltre non vedo dove la istanzi
PHP:
$mail = new PHPmailer();
e dove gli attribuisci il tutto (dall'oggetto, testo, destinatario ecc...)

poi facendo così tu imponi che tutte gli indirizzi siano obbligatori e rimandi alla oops senza avvisare quale errore è stato fatto.
secondo me è un "po'" da rivedere il tutto
 

IImanuII

Utente Attivo
10 Giu 2012
390
0
16
ciao
forse sarebbe meglio al posto di
PHP:
$tutte = ($email1, $email2, $email3);
mettere
PHP:
$tutte = array($email1, $email2, $email3);
credo che come hai scritto tu vada bene da php6 e non nelle precedenti (ma potrei sbagliarmi).

Grazie è da poco che mi sono avvicinato al php ed ho cominciato dallge guide di questo sito, molte cose non le so.

comunque perchè nel form non chiami i vari indirizz email[] così nel foreach puoi usare direttamente $_POST['email']?

Perchè ho dato la possibilità di far inserire la mail di risposta (oltre ad una mail alternativa) in questo modo

$risposta = $_POST['emaildirisposta'];
$mail->AddReplyTo($risposta);

poi
cosa è
PHP:
$mail->ValorePhpmailer($email1 ); 
$mail->ValorePhpmailer($email2 ); 
$mail->ValorePhpmailer($email3 );
?
non mi sembra che in phpmailer ci sia una funzione chiamata ValorePhpmailer.
inoltre non vedo dove la istanzi
PHP:
$mail = new PHPmailer();
e dove gli attribuisci il tutto (dall'oggetto, testo, destinatario ecc...)


Infatti non ci sono funzioni chiamate così (nell'esempio mi son dimenticato l'istanza ma nel php c'è) xD il codice che avevo scritto era d'esempio, non volevo realmente dare una funzione. Ovviamente nel mio php è diverso perchè la mail funziona.

poi facendo così tu imponi che tutte gli indirizzi siano obbligatori e rimandi alla oops senza avvisare quale errore è stato fatto.
secondo me è un "po'" da rivedere il tutto

Infatti è questo che voglio, cioè che gli indirizzi siano obbligatori ma che ognuno di loro abbia un errore diverso, (es. "errore nella mail alternativa" "errore nella mail di risposta") infatti mi sa che invece di reindirizzare ad una pagina mi conviene usare un echo().

Mi sa che mi conviene studiare meglio il foreach() visto che sto cercando di implementare anche http://blog.mrwebmaster.it/2010/09/15/duplicare-i-campi-di-un-form-con-jquery.html per quanto riguarda il campo allegati xD.
 
Ultima modifica:

IImanuII

Utente Attivo
10 Giu 2012
390
0
16
Effettivamente non riesco a risolvere, cioè non riesco a dare un errore specifico per ogni mail (che poi sono solo 2 )
 

IImanuII

Utente Attivo
10 Giu 2012
390
0
16
poi facendo così tu imponi che tutte gli indirizzi siano obbligatori e rimandi alla oops senza avvisare quale errore è stato fatto.
secondo me è un "po'" da rivedere il tutto

Onestamente io vorrei far si che non tutte le mail siano obbligatorie e che si riesca ad identificare l'errore su quale campo è stato commesso.

Ti posto la porzione di codice interessata:
PHP:
$fromemail = $_POST['maildichiinvia'];
$risposta = $_POST['emaildirisposta'];
$oggetto = $_POST['oggetto']; 
$messaggio = $_POST['editor1']; 
$verif_box = $_POST["verif_box"];

require_once 'class.phpmailer.php';  

$mail = new PHPMailer();  
$mail->IsHTML(true); // invio l'email in formato HTML 

$msg = stripslashes($messaggio); //pulisco il messaggio dai magic quote con stripslashes e dopo lo vado a inviare con $mail->MsgHTML($msg);
 
  $mail->AddReplyTo($risposta);
  $mail->AddAddress("[email protected]"); 
  $mail->From = $fromemail;  
  $mail->Subject = $oggetto;  
  $mail->AltBody = 'Usa un editor mail compatibile con l\'html per vedere il messaggio!'; // optional - MsgHTML will create an alternate automatically  
  $mail->Body = $msg;
  $mail->AddAttachment($_FILES['allegato']['tmp_name'],$_FILES['allegato']['name']);    // Aggiungo l'allegato il nome $_FILES['allegato']

In pratica vorrei che:
l'email di risposta $risposta non sia obbligatoria (questo lo fa già phpmailer) ma se inserita questa sia controllata
l'email $fromemail; sia obbligatoria e controllata.
E che ovviamente gli altri campi siano obbligatori (messaggio oggetto ecc...) tranne l'allegato

In questo caso credo che non vada più bene la funzione php filter_var :\ sai percaso darmi qualche alternativa?
 
Ultima modifica:

IImanuII

Utente Attivo
10 Giu 2012
390
0
16
Onestamente io vorrei far si che non tutte le mail siano obbligatorie e che si riesca ad identificare l'errore su quale campo è stato commesso.

Ti posto la porzione di codice interessata:
PHP:
$fromemail = $_POST['maildichiinvia'];
$risposta = $_POST['emaildirisposta'];
$oggetto = $_POST['oggetto']; 
$messaggio = $_POST['editor1']; 
$verif_box = $_POST["verif_box"];

require_once 'class.phpmailer.php';  

$mail = new PHPMailer();  
$mail->IsHTML(true); // invio l'email in formato HTML 

$msg = stripslashes($messaggio); //pulisco il messaggio dai magic quote con stripslashes e dopo lo vado a inviare con $mail->MsgHTML($msg);
 
  $mail->AddReplyTo($risposta);
  $mail->AddAddress("[email protected]"); 
  $mail->From = $fromemail;  
  $mail->Subject = $oggetto;  
  $mail->AltBody = 'Usa un editor mail compatibile con l\'html per vedere il messaggio!'; // optional - MsgHTML will create an alternate automatically  
  $mail->Body = $msg;
  $mail->AddAttachment($_FILES['allegato']['tmp_name'],$_FILES['allegato']['name']);    // Aggiungo l'allegato il nome $_FILES['allegato']

In pratica vorrei che:
l'email di risposta $risposta non sia obbligatoria (questo lo fa già phpmailer) ma se inserita questa sia controllata
l'email $fromemail; sia obbligatoria e controllata.
E che ovviamente gli altri campi siano obbligatori (messaggio oggetto ecc...) tranne l'allegato

In questo caso credo che non vada più bene la funzione php filter_var :\ sai percaso darmi qualche alternativa?

Non ci sono ancora riuscito, qualcuno può darmi una mano? :dipser:
 

IImanuII

Utente Attivo
10 Giu 2012
390
0
16
ciao
un mistero???? ti avevo postato la soluzione, ma non la vedo piu:confused:
la cerco e ta la riposto (mal che vada la rifaccio)

:quote:???? non è che l'hai postata per errore in un altro topic oppure invece di invia risposta hai fatto "anteprima messaggio" xD comunque sempre grazie :p
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
ecco (ho dovuoro riscriverlo).
nel form contatti del mio sito faccio così

PHP:
<?php
//metti un minimo di controlli agli input
//lo strip tag evita es che ti arrivi js malevolo
$fromemail = strip_tags(trim($_POST['maildichiinvia']));
$risposta = strip_tags(trim($_POST['emaildirisposta']));
$oggetto = strip_tags(trim($_POST['oggetto'])); 
$messaggio = strip_tags(trim($_POST['editor1'])); 
$verif_box = strip_tags(trim($_POST["verif_box"]));//da cosa provime da una checkbox?
//*****inizio delle verifiche
$ok_ko="";//metto a stringa vuota il messaggio degli errori
if(!filter_var($fromemail, FILTER_VALIDATE_EMAIL)){
	$ok_ko.="l'indirizzo $fromemail non è valido o vuoto<br />";
}
if(!filter_var($risposta, FILTER_VALIDATE_EMAIL)){
	$ok_ko.="l'indirizzo $risposta non è valido o vuoto<br />";
}
if($oggetto ==""){
	$ok_ko.="non hai scritto l'oggetto<br />";
}
if($messaggio =="" || strlen($messaggio)< 10){//qui ti ho aggiunto anche lalunghezza minima
	$ok_ko.="messaggio vuoto o troppo corto (min 10 caratteri)<br />";
}
//questa è importante quando alleghi dei file, oppure ti puo arrivare es cancella_tutto_HarDish.exe
$tipi_ammessi=array('jpg', 'JPG','gif','png', 'zip','txt');//aggiungi o togli quali permessi
if(!in_array($_FILES['allegato']['name'], PATHINFO_EXTENSION), $tipi_ammessi){
	$ok_ko.="il tipo di file che vuoi allegare non è ammesso<br />";
}
if($verif_box ==""){//vedi te se ti serve
	$ok_ko.="non hai selezionato<br />";
}
//*****fine delle verifiche
/* a questo punto se la variabile $ok_ko è rimasta vuota vuol dire che non sono stati fatti errori
oppure contiene l'indicazione di quali errori commessi, in questo caso dai un avviso e torni al form pulito
*/
if($ok_ko !=""){//c'è almeno un errore
	echo $ok_ko; //avvisi e
	echo "<meta http-equiv='Refresh' content='3; URL=nome_pagina_form.php'>";//torni a form dopo 3 dec
}else{//non ci sono stati errori quindi puoi inviare
	require_once 'class.phpmailer.php';
	//tutto il resto dell'ambaradan di phpmailer 
	//..........
	if($mail -> send()){
		echo "grazie di averci contattato";
	}else{
		echo "errore di trasmissione, riprova più tardi";
	}
	echo "<meta http-equiv='Refresh' content='3; URL=nome_pagina_che_vuoi.php'>";//torni a dove vuoi dopo 3 dec
}
?>
 

IImanuII

Utente Attivo
10 Giu 2012
390
0
16
ciao
ecco (ho dovuoro riscriverlo).
nel form contatti del mio sito faccio così

Ciao borgo, grazie per il codice me lo sto studiando. Il campo verif_box è il campo del captcha. Ho inserito già dei controlli e funzionano solo che credo sia disordinatissimo, ti posto il codice sotto. Se conosci una maniera più "economica" e ordinata da integrare con i controlli che mi hai postato tu, me lo fai sapere? Intanto continuo a integrare il tuo codice :byebye: ti faccio sapere

PHP:
// controllo che il campo di verifica non deve essere vuoto
 if(!empty($verif_box)) { //se il campo non è vuoto allora procedo
// controllo per l'inserimento di soli numeri all'interno del campo di verifica
if(is_numeric($verif_box)) { //se sono numeri procedo
// controllo se il codice di verifica è corretto
if(md5($verif_box).'a4xn' == $_COOKIE['tntcon']){
	// se il codice di verifica è corretto invio il messaggio
	$mail->Send();
	// cancello il cookie del campo di verifica
	setcookie('tntcon','');
} else if(isset($message) and $message!=""){
	// se il codice di verifica non è corretto 
} else {
		echo 'Codice di verifica non corretto!';
		exit;
	}
}else{ // fine del controllo di soli numeri, se non sono numeri mostro l'errore
		echo "Nel campo di verifica puoi inserire solo numeri!";
		exit;
}
}else{ // fine del controllo del campo di verifica vuoto, se lo è mostro l'errore
		echo "Errore: Il campo di verifica è vuoto!";
		exit;
}

Credo che tutti questi if si possano "riunire" in un unico if e per i messaggi d'errore si possa fare come hai fatto tu prima con gli altri controlli cioè lasciare la variabile vuota e riempiral in seguito :)

Per ora comincio con l'integrare il tuo codice poi ci penso xD
 
Ultima modifica:

IImanuII

Utente Attivo
10 Giu 2012
390
0
16
Il codice l'ho integrato perfettamente e funziona.

Però (ci sono sempre sti maledetti però) ho un problema. Volevo che l'indirizzo mail di risposta fosse facoltativo.

Ho provato a cambiare così:

PHP:
$risposta = trim($risposta);
$num_at = count(explode( '@', $risposta )) - 1;
if($num_at != 1 || strpos($risposta,';') || strpos($risposta,',') || strpos($risposta,' ') || preg_match( '/^[\w\.\-]+@\w+[\w\.\-]*?\.\w{1,4}$/', $risposta)){
	$ok_ko.="L'indirizzo $risposta non è valido.<br />"; 
	}

Al posto di questo che mi avevi scritto tu

PHP:
if(!filter_var($risposta, FILTER_VALIDATE_EMAIL)){ 
    $ok_ko.="l'indirizzo $risposta non è valido o vuoto<br />"; 
}

Però non va mi riporta il messaggio d'errore :( e mi reindirizza
 

IImanuII

Utente Attivo
10 Giu 2012
390
0
16
Come sempre il tuo aiuto è stato preziosissimo ho risolto tutto.
Il campo di verifica l'ho integrato così
PHP:
if(!filter_var(!empty($verif_box))){
	$ok_ko.="Il codice di verifica è vuoto.<br />"; 
	}
if(!filter_var(is_numeric($verif_box))){
	$ok_ko.="Il codice di verifica può contenere solo numeri.<br />"; 
	}
if(!filter_var(md5($verif_box).'a4xn' == $_COOKIE['tntcon'])){
	$ok_ko.="Il codice di verifica non è corretto.<br />"; 
	}
 

IImanuII

Utente Attivo
10 Giu 2012
390
0
16
Ho modificato ancora così :)

PHP:
	if(!filter_var(!empty($verif_box) || is_numeric($verif_box) || md5($verif_box).'a4xn' == $_COOKIE['tntcon'])){
		$ok_ko.="Il codice di verifica non è corretto. Ricorda che non può essere vuoto e può contenere solo numeri.<br />"; 
		}
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
per mettere la seconda email facoltativa
basta sostituire
PHP:
//...........
if(!filter_var($risposta, FILTER_VALIDATE_EMAIL)){
    $ok_ko.="l'indirizzo $risposta non è valido o vuoto<br />";
}
//.....
con
PHP:
//.........
if(!filter_var($risposta, FILTER_VALIDATE_EMAIL)){
    $risposta="";//se errato meglio eliminarlo
}
//....
 

IImanuII

Utente Attivo
10 Giu 2012
390
0
16
ciao
per mettere la seconda email facoltativa
basta sostituire
PHP:
//...........
if(!filter_var($risposta, FILTER_VALIDATE_EMAIL)){
    $ok_ko.="l'indirizzo $risposta non è valido o vuoto<br />";
}
//.....
con
PHP:
//.........
if(!filter_var($risposta, FILTER_VALIDATE_EMAIL)){
    $risposta="";//se errato meglio eliminarlo
}
//....

Decisamente meglio di tutto l'ambaradan che avevo scritto ^^

In che senso $risposta="";//se errato meglio eliminarlo ? Se dava messaggio d'errore dovevo eliminare quella stringa?
 
Discussioni simili
Autore Titolo Forum Risposte Data
T Controllo sintassi mail per accesso dispositivi Wi-Fi Javascript 1
M [RISOLTO]controllo mail se esiste PHP 34
Robby84 Codice di controllo per form mail PHP 4
sbobby Codice di controllo su form mail!! PHP 4
felino Mac OS e Client Mail: Stato non in linea Mac e Software 1
I recupera password via mail salva pasword password_hash PHP 2
I resetta password via mail PHP 2
M telecamera Foscam - mancato invio mail ad account gmail IP Cam e Videosorveglianza 0
K Importazione e-mail da account gmail ad un altro account gmail Posta Elettronica 0
R Invio mail con allegati multipli PHP 0
A Mail con funzione mail() riconosciute come spam PHP 9
R Invio mail con allegati da directory PHP 1
R Confrontare il dominio di una mail con una stringa contenente un dominio personalizzato, tutto ciò in php o javascript PHP 0
Daniele_Carrara Problema timeout - invio mail PHP 7
G Con Microsoft Outlook 2016 come si possono cancellare le mail doppie? Posta Elettronica 0
G Evitare che mi continui ad arrivare in alice mail spam Posta Elettronica 2
M configurare mail register.it (con 1000 invii/die) su Outlook Posta Elettronica 0
Marti1! Problema con casella mail cancellata Posta Elettronica 3
U PHP bottone per invio mail o ritorno al form PHP 15
G Invio mail con php da dati prelevati da un database PHP 9
AC1 [PHP] Invio Mail PHP 18
A [HTML] Testo mail non visualizzabile su IOS HTML e CSS 0
L Problema funzione mail() PHP PHP 3
I [PHP] inviare form con allegato tramite una mail PHP 1
A Libero mail non funziona Posta Elettronica 3
B [PHP] Invio mail automatico dopo compilazione form - db PHP 25
L PopUp tramite PHP se la mail inserita è già registrata nel database PHP 3
G [PHP] Creare mail con allegato nascosto e bottone di richiamo PHP 0
P [PHP] PEAR Mail e Query PHP 3
Cosina Andare a capo nel testo della mail ricevuta dal form php PHP 1
D [PHP] script che invii una mail automatica dopo risposta ad una discussione di un forum PHP 0
M [PHP] mandare mail usando i cantatti di una lista su mailchimp PHP 7
G [PHP] Creare appuntamento ed inviarlo tramite mail (Outlook e Gmail) PHP 0
L windows live mail Posta Elettronica 4
A [PHP] Problema invio mail con funzione mail() PHP 3
A Php mail non invia due mail di seguito PHP 3
A problema mail Posta Elettronica 5
A [PHP] Inviare mail con piu immagini allegate PHP 6
A [PHP] Modulo mail PHP 3
A [PHP] Formattazione Mail HTML HTML e CSS 5
A [PHP] RISOLTO Invio Mail con Tabella PHP 2
paloppa [PHP] Invio mail da form dubbio PHP 17
B [PHP] Mail di Avvenuta registrazione PHP 4
M [PHP] Componi i file di Excel in e-mail PHP 1
S Creare nuovo account in Mail Mac e Software 0
F Form mail php errore invio PHP 5
Punix [PHP] problema script invio e-mail PHP 2
G Invio Mail con PHPMailer, problemi SMTP PHP 7
cobra_72 [PHP] problema invio multiplo allegati mail PHP 21
E [PHP] mail inviata anche con campi obbligatori non compilati PHP 9

Discussioni simili