Form per mandare mail dal sito.

  • Creatore Discussione Creatore Discussione Mask84
  • Data di inizio Data di inizio
L'unica cosa che mi lascia perplesso è che controlli il valore del pulsante di invio, dopotutto se è stato impostato il valore dev'essere per forza quello, no? E se lo fai per prevenire tentativi di hacking lascia perdere, è facilmente aggirabile.
 
ciao
prova questo (al massimo alessandro1997 inorridirà)
salva la pagina con nome quello_che_vuoi.php (mi raccomando non togliere .php) e la carichi sul sito. la puoi lincare comunque come fai con le pagine htm ricordandoti sempre che finisce con .php

PHP:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>scrivici</title>
<!--qui puoi inserire i css ed eventuale javascript -->
</head>
<body>
<!-- inizio php processa ed invia email -->
<?php
/**********************************************************************
la parte tra <?php e ?> comprese, se funzia non ti conviene modificarla
a parte modificare l'indirizzo del destinatario
***********************************************************************/
//leggo che sia stato premuto il tasto di invio
if(isset($_POST['invia']) && $_POST['invia']== "invia"){
	/******************************************
	inizializzo alcune variabili che mi saranno
	utili in seguito
	*******************************************/
	$destinatario="mio_indirizzo@mio:indirizzo.it";//MODIFICARE inserendo l'indirizzo giusto
	$data = date("d.m.Y h:i:s A"); //legge la data e l'ora di invio
	$dasito= $_SERVER['HTTP_REFERER']; //legge il referrer
	$oggetto="messaggio da :";//può essere messo nel form
	$dati_corretti=TRUE;//metto una variabile al valore VERO
	//inizio a leggere i dati dal form
	$nome=trim($_POST['nome']);//leggo da input nome eliminando caratteri non stampabili ecc...
	$cognome=trim($_POST['cognome']);
	$email=trim($_POST['email']);
	$testo=strip_tags(trim($_POST['testo']),'<br>');//tolgo tutti gli eventuali tag escluso <br> per caso ci sia
	/****************************************************************
	faccio alcuni controlli per verificare che non venga
	inviata porcheria. secondo me sono il minimo indispensabile
	se il controllo non è superato metto la variabile $dati_corretti
	al valore FALSE
	*****************************************************************/
	if($nome=="" || !eregi("^([a-z0-9\.\-\ ]){1,40}$", $nome)){
		$dati_corretti=FALSE;//se non corretti metto a NON VERO
	}//fine if controllo nome
	if($cognome=="" || !eregi("^([a-z0-9\.\-\ ]){1,40}$", $cognome)){
		$dati_corretti=FALSE;
	}//fine if controllo cognome
	if($email=="" || !eregi("^([-a-z0-9\._]+)(@[-a-z0-9\._]+)(\.{1,2}[a-z0-9]{2,6})$", $email)){
		$dati_corretti=FALSE;
	}//fine if controllo email
	if($testo==""){
		$dati_corretti=FALSE;
	}//fine if controllo testo
	//verifico se dati corretti, se si preparo l'email e l'invio
	if($dati_corretti){// i dati sono corretti
		$oggetto .=$nome." ".$cognome;
		$messaggio =$testo."/n";
		$messaggio .= "--------------------------------------- /n";
		$messaggio .= "inviato il ".$data." /n";
		$messaggio .= "dal sito ".$dasito." /n";
		$intestazione ="rispondi a: ".$email." /n";
		if(mail($destinatario,$oggetto,$messaggio,$intestazione)){
			echo "<h1>email inviata con successo</h1><br>ti risponderemo quento prima";
			/*********************************************************************************
			la riga sotto serve per tornare alla pagina che vuoi
			dopo 3 secondi content='3....
			alla pagina che vuoi, basta ch tu cambi mia_pagina.htm con quello che ti interessa
			**********************************************************************************/
			echo "<meta http-equiv='Refresh' content='3; URL=mia_pagina.htm'>";// ... ritorna a form
		}else{
			echo "<h1>errore di trasmissione</h1><br>riprova più tardi";
			echo "<meta http-equiv='Refresh' content='3; URL=mia_pagina.htm'>";// ... ritorna a form
		}
	}else{//ci sono delle porcherie
		echo "<h1>il form non è stato riempito correttamente</h1><br>riscrivi";
		/*************************************
		la riga sotto riporta al form ripulito
		**************************************/
		echo "<meta http-equiv='Refresh' content='3; URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>";// ... ritorna a form
	}//fine if else dati corretti
}//fine if controllo submit
?>
<!-- fine php processa ed invia email -->
<!--qui puoi inserire altra parte html -->
<!-- inizio form -->
<form action="<?php htmlspecialchars($_SERVER['PHP_SELF']); ?>" method="post">
<table width="700" border="0" cellspacing="2" cellpadding="2">
  <tr>
    <td width="85">&nbsp;</td>
    <td width="485">&nbsp;</td>
    <td width="110">&nbsp;</td>
  </tr>
  <tr valign="top">
    <td>nome</td>
    <td><input name="nome" type="text" id="nome" size="40"></td>
    <td>*</td>
  </tr>
  <tr valign="top">
    <td>cognome</td>
    <td><input name="cognome" type="text" id="cognome" size="40"></td>
    <td>*</td>
  </tr>
  <tr valign="top">
    <td>email</td>
    <td><input name="email" type="text" id="email" size="40"></td>
    <td>*</td>
  </tr>
  <tr valign="top">
    <td>testo</td>
    <td><textarea name="textarea" cols="80" rows="10"></textarea></td>
    <td>*</td>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td>* campi obbligatori </td>
    <td><input name="invia" type="submit" id="invia" value="invia"></td>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td><input type="reset" name="Submit" value="reset"></td>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
  </tr>
</table>
</form>
<!-- fine form -->
<!--qui puoi inserire altra parte html -->
</body>
</html>
se non funzia fammelo sapere, puo darsi (facile) che abbia fatto qualche orrore.

a te metterla a posto in modo che sia presentabile

Mi dice sempre che devo ricompilare tutti i campi e io li ho compilati tutti... :(
 
Credo che tu abbia fatto qualche macello con le espressioni regolari, ma siccome non me ne intendo e non ho voglia di stare a controllare ne parliamo quando torni. Molto probabilmente però è quello, perché i campi si chiamano come dovrebbero e non trovo altre soluzioni plausibili.
 
ciao
no non era nelle espressioni regolari, ma nel nome di un campo di input (la texarea)

correggi qui
..........
<tr valign="top">
<td>testo</td>
<td><textarea name="testo" cols="80" rows="10" id="testo"></textarea></td>
<td>*</td>
</tr>
.................
cioè scrivi testo al posto di textarea
(spero che sia l'unico errore)
riprova e sappimi dire
 
ciao
no non era nelle espressioni regolari, ma nel nome di un campo di input (la texarea)

correggi qui
..........
<tr valign="top">
<td>testo</td>
<td><textarea name="testo" cols="80" rows="10" id="testo"></textarea></td>
<td>*</td>
</tr>
.................
cioè scrivi testo al posto di textarea
(spero che sia l'unico errore)
riprova e sappimi dire


Perfettooooo, ora funziona!!!
Non so come ringraziarti...!
 
ciao
in un altro post mi avevano offerto un cesto di frutta, ma un moderatore (comincia per EL...) ne ha voluto una parte, altrimenti mi avrebbe bannato per tentata corruzione (o concussione?)
:hammer:
 
ciao,
ultim'ora: mi sono accorto di un errore assurdo

/**********************************************************************
la parte tra <?php e ?> comprese, se funzia non ti conviene modificarla
a parte modificare l'indirizzo del destinatario
***********************************************************************/

togli (o metti uno spazio)

se usi dreamwiewer fa un pessimo effetto
 

Discussioni simili