come creare un form di contatto.

  • Creatore Discussione Creatore Discussione migo80
  • Data di inizio Data di inizio

migo80

Utente Attivo
25 Apr 2013
243
3
18
Salve sono nuovo del forum, arrivo subito al dunque....!
supponiamo di avere una tabella denominata "annunci" in un db mysql, con i relativi campi: id, nome, size, type, titolo, foto, annuncio, mail.
ora io avrei bisogno che nella pagina dove saranno visualizzati gli annunci, ci sia un pulsante che mi permetta di contattare il venditore di ogni singolo annunci.
spero di avere qualche aiuto!!! grazie.
 
ciao
potresti fare così
quendo visualizzi l'annuncio immagino che tu prelievi i dati dell'utente tra cui l'id.
quindi poui riinviare ad una pagina (anche in un popup) cfacendo un pulsante del tipo

<a href="contatta.php?vend=<?php echo $id; ?>">contatta venditore</a>

nella pag contatta.php ricevi tramite $_GET['vend'] l'id, lo verifichi, estrai i dati ce ti servono e li metti nella funzione mail() o meglio usi la classe phpmailler.
nella pgina contatta.php costruirai anche l'apposito form in cui l'utente potra scrivere quello che chiede
 
Ti ringrazio per avermi risposto, proverò nel modo da te suggerito...p.s. se dovessi avere difficoltà posso disturbarti ancora...!
 
ciao...dato che sono ancora alle prime armi con il php, ho difficoltà nel creare la pagina contatta.php, potresti farmi un esempio pratico? ringrazio in anticipo.
 
Chiedo scusa ci sono stato quasi tutta la notte con pochi risultati. per quanto riguarda il recupero dell' id del venditore ed estrazione dalla tabella ci sono riuscito in questo modo:codice nel file contatta.php:

PHP:
if(isset($_GET['pag'])&& is_numeric($_GET['pag']))
{
$id = $_GET['pag'];
$cn = new PDO('mysql:host=localhost;dbname=annunci', '****i', '****');
$sql = $cn->prepare ("SELECT id,annuncio,titolo,contatti FROM annuncio WHERE id = :un_id");
$sql->bindParam(':un_id', $id, PDO::PARAM_INT);
$sql->execute();
$result = $sql->fetch(PDO::FETCH_ASSOC);
echo $result['id'] . '<br/>';
echo '<img class="dimensione" src=\'link1.php?id='.$result['id'].'\'width="90" height="67"><br />';
echo $result['titolo'] . '<br/>';
echo $result['annuncio'] . '<br/>';
echo $result['contatti']; 
}
.
Quello di cui ho bisogno ora e' come passare i valori del form alla classe phpmailer ed inviare la mail all' indirizzo recuperato in echo $resul['contatti'].
aspettero' con pazienza :) ciao.
 
ciao
intanto una cosa:
di questi dati quali devi passare all'email da inviare
$result['titolo']
$result['annuncio']
$result['contatti'](questo è l'indirizzo a cui deve arrivare l'email?)
?
non credo che tu debba passare tutto l'anuncio, secondo me nell'oggetto dell'emai dovresti mettere solo il titolo dell'annuncio ed eventualmente la data.
poi
il form cosa deve contenere: immagino nome indirizzo email e un testo del mittente, giusto?
ancora: quando un utente scrive al titolare dell'annuncio vuoi che arrivi una copia dell'email anche a te (ccn)?
 
ciao
intanto una cosa:
di questi dati quali devi passare all'email da inviare
$result['titolo']
$result['annuncio']
$result['contatti'](questo è l'indirizzo a cui deve arrivare l'email?)
?
non credo che tu debba passare tutto l'anuncio, secondo me nell'oggetto dell'emai dovresti mettere solo il titolo dell'annuncio ed eventualmente la data.
poi
il form cosa deve contenere: immagino nome indirizzo email e un testo del mittente, giusto?
ancora: quando un utente scrive al titolare dell'annuncio vuoi che arrivi una copia dell'email anche a te (ccn)?

Ciao grazie per avermi risposto!
all' email dovrebbero passare il titolo e contatti.
nel form deve avere i campi mail e campo testo del mittente e poi una mail di ritorno a me.
 
scusa avevo dimenticato
si $result['contatti'] e' l indirizzo a cui inviare l' email. :)
 
ciao
ecco uno schema di come potresti fare
PHP:
<?php
if(isset($_POST['invia'])){
	$mittente=$_POST['mittente'];
	$testo=trim($_POST['testo']);
	if(!filter_var($mittente, FILTER_VALIDATE_EMAIL)){
		echo "indirizzo email non valido";
		echo "<meta http-equiv='Refresh' content='3; pagina_che_vuoi.php'>";//rimandi a dove vuoi tu
	}
	if($testo ==""){
		echo "il testo non può essere vuoto";
		echo "<meta http-equiv='Refresh' content='3; pagina_che_vuoi.php'>";
	}
	$tua_email="tua_email@tuo_dominio.it";//questa ti serve per ricevere copia
	$destinatario=$_POST['destinatario'];
	$oggetto="richiesta relativa all'annuncio: ".$_POST['titolo'];
	$messaggio ="messaggio inviato da: $mittente <hr>";
	$messaggio .= $testo;
	require "phpmailler/class.phpmailer.php";//richiamo la classe, verifica il percorso
	$Emailmessaggio = new PHPmailer();
	$Emailmessaggio->SetLanguage('it','language/'); //messo italiano, ma la scelta è vasta
	$Emailmessaggio->IsHTML(true); // invio l'email in formato HTML
	$Emailmessaggio->From="tuo sito";
	$Emailmessaggio->AddAddress($destinatario);
	$Emailmessaggio->AddCC($tua_email);//questa per inviare a te copia
	if(!$Emailmessaggio->Send()){ //errore di trasmissione
  		echo "il tuo messaggio è stato inviato";
		echo "<meta http-equiv='Refresh' content='3; pagina_che_vuoi.php'>";
	}else{ //invio avvenuto
  		echo "c'è stato un errore di trasmissione, riprova più tardi";
		echo "<meta http-equiv='Refresh' content='3; pagina_che_vuoi.php'>";
	}//fine if-else invio
}//fine if $_post

if(isset($_GET['pag'])&& is_numeric($_GET['pag'])){
	$id = $_GET['pag'];
	$cn = new PDO('mysql:host=localhost;dbname=annunci', '****i', '****');
	$sql = $cn->prepare ("SELECT id,annuncio,titolo,contatti FROM annuncio WHERE id = :un_id");
	$sql->bindParam(':un_id', $id, PDO::PARAM_INT);
	$sql->execute();
	$result = $sql->fetch(PDO::FETCH_ASSOC);
	echo $result['id'] . '<br/>';
	echo '<img class="dimensione" src=\'link1.php?id='.$result['id'].'\'width="90" height="67"><br />';
	echo $result['titolo'] . '<br/>';
	echo $result['annuncio'] . '<br/>';
	echo $result['contatti'];
?>
<form action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']); ?>" method="post" name="form1">
    <input name="titolo" type="hidden" id="titolo" value="<?php echo $result['titolo']; ?>">
    <input name="destinatario" type="hidden" id="destinatario" value="<?php echo $result['contatti']; ?>">
  <p>tua email 
    <input name="mittente" type="text" id="mittente">
    <br>
    testo 
    <textarea name="testo" id="testo"></textarea>
</p>
  <p>
    <input name="invia" type="submit" id="invia" value="invia">
</p>
</form>
<?php
}//fine if $_get
?>
considera comunque che è uno schema che devi mettere a punto, es al posto dei campi hidden potresti usare le sessioni, analogamente passare in sessione il valore del $_get in modo che non ti dia errore se rimandi al form,
quindi passare il get se vengo da pagina precedente o verificare che esista la sessione se dalla stessa pagina.
il tutto condito con un buon capcha per evitare spam

p.s.
comunque se navighi un po' nel forum trovi altre risposte sull'argomento
 
ciao purtroppo con il codice che mi hai suggerito non mi inviava la mail e l' ho modificato in questo modo:
file contatta.php:
PHP:
if(isset($_GET['pag'])&& is_numeric($_GET['pag']))
{
$id = $_GET['pag'];
$cn = new PDO('mysql:host=localhost;dbname=nome_db', '*******', '********');
$sql = $cn->prepare ("SELECT id,annuncio,titolo,contatti,prezzo,contatti FROM computer WHERE id = :un_id");
$sql->bindParam(':un_id', $id, PDO::PARAM_INT);
$sql->execute();
$result = $sql->fetch(PDO::FETCH_ASSOC);
$id = $result['id'];
$email = $result['contatti'];
?><br />

<table class="tabel"  width="400px"  align="center" cellpadding="2" cellspacing="2" bgcolor="#FFFFCC">
 <tr>
<td class="titolo" ><?php echo $result['titolo'] . '<br/>';?></td></tr>

<tr >
<td class="foto"  width="91px" height="68px"><?php echo '<img  src=\'link1.php?id='.$result['id'].'\'width="90" height="67">'.'<br/>';  ?></td></tr>

<tr><td class="prezzo" ><?php echo "€ ". $result['prezzo'] ;?></td></tr>

<tr >
<td  class="annuncio"><?php echo $result['annuncio'] . '<br/><br/>';?></td></tr>
</table><div align="center">

          <p class="stile11">Per chiedere informazioni su questo annuncio,</p>
	  <p class="stile11">bisogna compilare tutti i campi obbligatori,</p>
	  <p class="stile11">digitare le due parole nel captcha</p>
	  <P class="stile11">e cliccare sul tasto animato SEND MAIL.</P>
	 
<form action="send.php" method="post" name="form1"> 
    <input name="titolo" type="hidden" id="titolo" value="<?php echo $result['titolo']; ?>"> 
    <input name="destinatario" type="hidden" id="destinatario" value="<?php echo $result['contatti']; ?>"> 
   <table class="form" width="450px"  align="center" cellpadding="2" cellspacing="2" bgcolor="#FFFFCC">
    <tr>
    <td><span class="Stile13">Mail</span></td>
    <td><input type="text" name="mittente" id="mittente" size="30" maxlength="100"
    /></td>
    </tr>
    <tr>
    <td><span class="Stile13">Messaggio per l' inserzionista</span></td>
    <td><textarea cols="30" rows="10" name="testo" id="testo"></textarea></td>
    </tr>
	</table><br/>
  <div align="center">

    <?php
require_once('recaptchalib.php');
$publickey = "******************************";
echo recaptcha_get_html($publickey);
?>
   <button name="invia" id="invia" type="submit" class="mySubmitButton"></button><br/>
	</div>
 </form>	
<?php 
}
//fine if $_get 
?>


Questo il file send.php:

PHP:
    if (isset($_POST['invia'])){
   
    require_once('recaptchalib.php');
   $privatekey = "***********************************8";
    $resp = recaptcha_check_answer ($privatekey,
    $_SERVER["REMOTE_ADDR"],
    $_POST["recaptcha_challenge_field"],
    $_POST["recaptcha_response_field"]);
    if (!$resp->is_valid) {
   die ("The reCAPTCHA wasn't entered correctly. Go back and try it again." .
    "(reCAPTCHA said: " . $resp->error . ")");
    } else {
    
    }
    
$mail="*************";
$destinatario=$_POST['destinatario'];
$mittente=$_POST['mittente'];
$oggetto=$_POST['titolo'];
$annuncio=$_POST['testo'];
$to = $destinatario; 
 $subject = $oggetto;
 
$body = "\n\n"; 
$body .= "RICHIESTA RELATIVA AL TUO ANNUNCIO:\n" .$oggetto . "\n\n"; 
$body .= "MESSAGGIO INVIATO DA:\n" .$mittente  . "\n\n"; 
$body .= "MESSAGGIO:\n" .$annuncio  . "\n\n"; 

$headers = "From:" . $mail; 

// INVIO DELLA MAIL 
if(mail($to, $subject, $body, $headers)) {

header("Refresh: 1; URL=http://www.miosito.it");
echo "<p>Mail inviata con successo!</p>";
}else{
echo "<p>Errore!</p>";
} 
}


in questo modo tutto funziona correttamente!
 
ciao
avevo scritto
$destinatario=$_POST['destinatario'];
al posto di
$destinatario=$_POST['contatti'];

non usare la funzione mail() su alcuni server di posta viene bloccata )es xxxx@libero.it e altri)
poi ti era scaricata la classe class.phpmailer.php?
 
non lo avevo notato, pero' nel mio codice funziona dichiarando le due variabili $destinatario=$_POST['destinatario']; $to=$destinatario;.
La classe phpmailer c' era.
Comunque oltre a non inviare entrambe le mail, mi visualizzava in testa al form il messaggio di corretto invio della mail senza che io avessi inviato nulla, anche con il mio di codice.
mentere dividendolo in due file il messaggio viene stampato a video nel momento giusto.
 
ciao
non lo avevo notato, pero' nel mio codice funziona dichiarando le due variabili $destinatario=$_POST['destinatario']; $to=$destinatario;.
hai ragione, mi ero confuso con $result['contatti'] il campo di input hidden si chiama destinatario.
comunque ci do un occhio non capisco perchè non funzi è quello che uso io, verifico di non aver fatto degli errori di copy/paste
 
ciao....il testo e' alla fine dello script :)

PHP:
if(isset($_POST['invia'])){ 
    $mittente=$_POST['mittente']; 
    $testo=trim($_POST['testo']); 
    if(!filter_var($mittente, FILTER_VALIDATE_EMAIL)){ 
        echo "indirizzo email non valido"; 
        echo "<meta http-equiv='Refresh' content='3; pagina_che_vuoi.php'>";//rimandi a dove vuoi tu 
    } 
    if($testo ==""){ 
        echo "il testo non può essere vuoto"; 
        echo "<meta http-equiv='Refresh' content='3; pagina_che_vuoi.php'>"; 
    } 
    $tua_email="tua_email@tuo_dominio.it";//questa ti serve per ricevere copia 
    $destinatario=$_POST['destinatario']; 
	$mit=trim($_POST['mittente']);
	 $text=trim($_POST['testo']); 
    $oggetto="richiesta relativa all'annuncio: ".$_POST['titolo']; 
	$ogg=$_POST['titolo'];
    $messaggio ="messaggio inviato da: $mittente <hr>"; 
    $messaggio .= $testo; 
    require "class.phpmailer.php";//richiamo la classe, verifica il percorso 
	
    $Emailmessaggio = new PHPmailer(); 
    $Emailmessaggio->SetLanguage('it','language/'); //messo italiano, ma la scelta è vasta 
  
    
//settiamo su true il metodo che indica alla classe 
//il formato HTML
   $Emailmessaggio->IsHTML(true);
    

    $Emailmessaggio->From="mio sito"; 
    $Emailmessaggio->AddAddress($destinatario); 
    $Emailmessaggio->AddCC($tua_email);//questa per inviare a te copia 
	$Emailmessaggio->Subject=$ogg;

	//corpo del mex

$Emailmessaggio->Body .= $mittente ;
$Emailmessaggio->Body .=  $oggetto  ;
$Emailmessaggio->Body .= $text  ;
	
	
    if(!$Emailmessaggio->Send()){ //errore di trasmissione 
          echo "c'è stato un errore di trasmissione, riprova più tardi";
        echo "<meta http-equiv='Refresh' content='3; pagina_che_vuoi.php'>"; 
    }else{ //invio avvenuto 
          echo "il tuo messaggio è stato inviato";  
        echo "<meta http-equiv='Refresh' content='3; pagina_che_vuoi.php'>"; 
    }//fine if-else invio 
}//fine if $_post

ho modificato lo script in questo modo e funge per modo di dire....ti spiego....l mail che arriva e' un pasticcio cioe' le 3 variabili del corpo sono stampate in qeusto modo es : mariorossi@hotmail.it richiesta relativa all'annuncio:titolo dell'annuncio messaggio: bla bla.http//www.quello che esce su hotmail per segnalare se la mail e' uno spam pero' con caratteri esadecimali.
non riesco a mandare a capo alla fine delle stampa di ogni variabile.
 
scusa avevo dimenticato di dire che all' arrivo della mail nella parte dove dovrebbe essere scritto da quale sito e' stata mandata per esmpio "Mr. Webmaster Forum" mi esce scritto "root user" perche'......
 
ciao......continuo su questa discussione per un nuovo problema.
come eliminare un record in base alla data vecchi di due settimane? grazie
 

Discussioni simili