- Home
- Categorie
- Coding e Sistemistica
- PHP
- Form per l'invio di una e-mail risposta
-
Form per l'invio di una e-mail risposta
Ciao ragazzi,
ho provato ad usare uno sript per inviare il contenuto in un form nella mia casella e-mail che ho preso proprio su questo sito, ma le e-mail non arrivano anche se il redirect lo fa.il codice HTML (eintragen.htm) che ho usato e:
<head>
<meta name="title" content="eintragen">
<meta name="description" content="Das Schweizer Onlineportal für Amtliche u. offizielle Kontakte, Notrufe u. Informationen, Wichtige u. nützliche Kontakte">
<meta name="keywords" content="Gemeinde, Gemeinden, Stadt, Städte, Schweiz, Informationen, Infos, Gemeindeinfos, Regional-Infos, Regional, Regional-Informationen, Amtliche Nummern, Amtliche Adressen, Nützliche Kontakte">
<meta name="author" content="[email protected]">
<meta name="copyright" content="Kommunikado Ltd.">
<meta http-equiv="Reply-to" content="[email protected]">
<meta http-equiv="content-language" content="NL">
<meta http-equiv="Content-Type" content="text/html; iso-8859-1">
<meta name="ROBOTS" content="INDEX,FOLLOW">
<meta name="creation_Date" content="08/28/2010">
<meta name="revisit-after" content="7 days">
<title>eintragen</title>
<style type="text/css">
<!--
.Stile1 {
color: #FF0000;
font-size: 12px;
}
.Stile2 {
font-size: 24px;
font-weight: bold;
}
.Stile5 { font-size: 9px;
color: #999999;
}
-->
</style>
</head><body>
<p align="center" class="MsoNormal"><span style='font-size:22.0pt;line-height:115%;
mso-ansi-language:DE' lang="de" xml:lang="de">Eintragen
<o:p></o:p>
</span></p>
<p align="center" class="MsoNormal"><a href="ch-regio-info.ch" class="Stile2">ch-regio-info.ch</a><strong> <span class="Stile1"><a href="eintragen.htm"> Eintragen</a> / <strong><a href="AGB'sKomunikadoMai10.pdf" target="blank">AGB</a></strong> / <a href="kontakt.htm">Kontakt</a></span></strong></p>
<p align="center" class="MsoNormal" title="ch-info-regio"> </p>
<p align="center" class="MsoNormal"><img src="home_arquivos/image001.png" width="317" height="210" /></p>
<p align="center" class="MsoNormal"><b style='mso-bidi-font-weight:normal'><span
style='font-size:12.0pt;line-height:115%;color:red;mso-ansi-language:DE' lang="de" xml:lang="de">__________________________________________________________________________
<o:p></o:p>
</span></b></p>
<p align="center" class="MsoNormal">
<form name="eintragen" action="mail.php" method="post" enctype="text/plain">
<table border="0" align="center" cellpadding="5" cellspacing="5">
<tr>
<td>Name, Vorname, Firma:</td>
<td><input type="text" name="Name" size="80" maxlength="80" value=""></td>
</tr><tr>
<td>Adresse (Postfach):</td><td><input type="text" name="Adresse" size="80" maxlength="80" value=""></td>
</tr><tr>
<td>PLZ, Ortschaft:</td><td><input type="text" name="Ortschaft" size="80" maxlength="80" value=""></td>
</tr><tr>
<td>Telefon, Handy:</td><td><input type="text" name="Telefon" size="80" maxlength="80" value=""></td>
</tr><tr>
<td>Fax:</td><td><input type="text" name="Fax" size="80" maxlength="80" value=""></td>
</tr><tr>
<td>E-Mail:</td><td><input type="text" name="E-Mail" size="80" maxlength="80" value=""></td>
</tr><tr>
</tr><tr>
<td>Webseite:</td><td><input type="text" name="Webseite" size="80" maxlength="80" value=""></td>
</tr><tr>
</tr><tr>
<td>Tätigkeitsbereich / Branche:</td><td><input type="text" name="Branche" size="80" maxlength="80" value=""></td>
</tr><tr>
<td><p>Ich habe die allgemeinen
<label>
<input name="checkbox" type="checkbox" value="checkbox" />
</label>
<br />
Geschäftsbedingungen<br />
gelesen und akzeptiert (<a href="AGB'sKomunikadoMai10.pdf">AGB</a>)</p>
</td><td><input type=submit value="Absenden"></td>
</tr>
</table>
<div align="center">
<p align="center" class="MsoNormal"> </p>
<p align="center" class="MsoNormal Stile5"> 2010 Kommunikado Ltd.</p>
</div>
</form>
</p>
</body>
</html>Il codice PHP (mail.php):
<?php
$mailto = "[email protected]";
$subject = "Eintragen";
$redirect = "eintragen-ok.htm";foreach($HTTP_POST_VARS as $key => $value) {
$message .= $key . ': ' . $value;
$message .= "\n";}
if (@mail($mailto, $subject, $message)) {
header("Location: $redirect");
} else {
echo('Kann nicht gesendet werden. Zurück zur vorherigen Seite und versuchen Sie einmal, danke.</p>');
}
?>Ho provato e riprovato, modificato e rimodificato ma niente.
Potreste gentilmente darmi un suggerimento?
-
Prova in questo modo:
[php]
$message = "";foreach($_POST as $key => $value) {
$message .= $key . ": " . $value . "\n";
}
[/php]Ciao!
-
Prova in questo modo:
[php]
$message = "";foreach($_POST as $key => $value) {
$message .= $key . ": " . $value . "\n";
}
[/php]Ciao!
-
Grazi Sups, funziona
Mi rimane però ancora un problema, non so come poter usare il checkbox per fare si che l'E-Mail venga inviato solo nel caso questo sia ceccato.
-
Bene!
Per il checkbox:
Una possibile soluzione in JS:<script type="text/javascript"> function conferma_invio() { var check = document.getElementById("check_invio") if(!check.checked) { alert("Devi confermare!"); return false; } else return true; return false; } </script> <input type="checkbox" name="conferma" value="si" id="check_invio" />Conferma Invio <input type="submit" value="Invia" onclick="return conferma_invio();" /> [code] Solo con PHP: [code] <input type="checkbox" name="conferma" value="si" />Conferma Invio <input type="submit" value="Invia" /> ... nella pagina che riceve i dati ... if(!isset($_POST["conferma"])) { echo "Azione da eseguire per la mancata conferma"; exit; } echo "Conferma ricevuta!";
-
Bene!
Per il checkbox:
Una possibile soluzione in JS:<script type="text/javascript"> function conferma_invio() { var check = document.getElementById("check_invio") if(!check.checked) { alert("Devi confermare!"); return false; } else return true; return false; } </script> <input type="checkbox" name="conferma" value="si" id="check_invio" />Conferma Invio <input type="submit" value="Invia" onclick="return conferma_invio();" />
Solo con PHP:
<input type="checkbox" name="conferma" value="si" />Conferma Invio <input type="submit" value="Invia" /> ... nella pagina che riceve i dati ... if(!isset($_POST["conferma"])) { echo "Azione da eseguire per la mancata conferma"; exit; } echo "Conferma ricevuta!";
In alternativa puoi combinare i due metodi, per quelli che hanno un browser senza JS.
-
Grazie, ho fatto nel seguente modo e sembra funzionare
<?php
$mailto = "[email protected]";
$subject = "Eintragen";
$redirect = "eintragen-ok.htm";$messaggio="";
$message = "";
foreach($_POST as $key => $value) {
$message .= $key . ": " . $value . "\n";
}
if(!isset($_POST["conferma"])) {
echo ('Kann nicht gesendet werden. Zurück zur vorherigen Seite und versuchen Sie einmal, danke.</p>');
exit;
}echo "Conferma ricevuta!";
if (@mail($mailto, $subject, $message)) {
header("Location: $redirect");
} else {
echo('Kann nicht gesendet werden. Zurück zur vorherigen Seite und versuchen Sie einmal, danke.</p>');
}
?>Ora per ottimizzarlo devo solo trovare come fare per evitare spam, pensavo all'inserimento di lettere e numeri generati come immagine.
Hai idea di dove trovo qualche esempio?
-
Grazie, ho fatto nel seguente modo e sembra funzionare
<?php
$mailto = "[email protected]";
$subject = "Eintragen";
$redirect = "eintragen-ok.htm";$messaggio="";
$message = "";
foreach($_POST as $key => $value) {
$message .= $key . ": " . $value . "\n";
}
if(!isset($_POST["conferma"])) {
echo ('Kann nicht gesendet werden. Zurück zur vorherigen Seite und versuchen Sie einmal, danke.</p>');
exit;
}echo "Conferma ricevuta!";
if (@mail($mailto, $subject, $message)) {
header("Location: $redirect");
} else {
echo('Kann nicht gesendet werden. Zurück zur vorherigen Seite und versuchen Sie einmal, danke.</p>');
}
?>Ora per ottimizzarlo devo solo trovare come fare per evitare spam, pensavo all'inserimento di lettere e numeri generati come immagine.
Hai idea di dove trovo qualche esempio?
-
Prima di tutto togli echo "Conferma ricevuta!"; se vuoi fare header("Location: $redirect");, altrimenti da errore, non puoi settare l'header dopo aver scritto testo nella pagina.
Per l'immagine come antispam puoi usare il sistema CAPTCHA, con una semplice ricerca (captcha in php) ne trovi un'infinità.Prova qui e *(http://www.w3facile.com/php/verifica-antispam-captcha-php-tutorial.html)i.
Ciao!
-
Prima di tutto togli echo "Conferma ricevuta!"; se vuoi fare header("Location: $redirect");, altrimenti da errore, non puoi settare l'header dopo aver scritto testo nella pagina.
Per l'immagine come antispam puoi usare il sistema CAPTCHA, con una semplice ricerca (captcha in php) ne trovi un'infinità.Prova qui e *(http://www.w3facile.com/php/verifica-antispam-captcha-php-tutorial.html)i.
Ciao!
-
Si, ho creato la pagina captcha.php con il seguente codice:
<?php
header("Content-type: image/png");
$x = 200;
$y = 75;
$code = substr($_GET['code'],0,9);
$space = $x / (strlen($code)+1);$img = imagecreatetruecolor($x,$y);
$bg = imagecolorallocate($img,255,255,255);
$border = imagecolorallocate($img,0,0,0);
$colors[] = imagecolorallocate($img,128,64,192);
$colors[] = imagecolorallocate($img,192,64,128);
$colors[] = imagecolorallocate($img,108,192,64);imagefilledrectangle($img,1,1,$x-2,$y-2,$bg);
imagerectangle($img,0,0,$x-1,$y-2,$border);for ($i=0; $i< strlen ($code); $i++)
{
$color = $colors[$i % count($colors)];
imagettftext($img,28+rand(0,8),-20+rand(0,40),($i+0.3)*$space,50+rand(0,10),$color,'arial.ttf',$code{$i});
}for($i=0;$i<400;$i++)
{
$x1 = rand(3,$x-3);
$y1 = rand(3,$y-3);
$x2 = $x1-2-rand(0,8);
$y2 = $y1-2-rand(0,8);
imageline($img,$x1,$y1,$x2,$y2,$colors[rand(0,count($colors)-1)]);
}imagepng($img);
?>E caricato nella stessa cartella sul server arial.ttf.
Digitando il Link ch-regio-info.ch/captcha.php?code=test viene generato il codice, ma non ho capito come poi integrarlo come controllo nella pagina eintragen.htm.
-
Metti un campo di testo dove scrivere l'utente deve ricopiare il codice dell'immagine.
Poi all'invio, controlli il codice inserito se è uguale a quello utilizzato dall'immagine.
Puoi utilizzare le sessioni per questo:session_start(); $_SESSION["code"] = "test"; ... <img src="captcha.php" /> Ricopia codice: <input type="text" name="nospam" /> ... in "captcha.php" aggiungi ... session_start(); header("Content-type: image/png"); $code = substr($_SESSION['code'],0,9); ... nella pagina che riceve ... if($_POST["nospam"] != $_SESSION["code"]) echo "Errore SPAM";
-
Metti un campo di testo dove scrivere l'utente deve ricopiare il codice dell'immagine.
Poi all'invio, controlli il codice inserito se è uguale a quello utilizzato dall'immagine.
Puoi utilizzare le sessioni per questo:session_start(); $_SESSION["code"] = "test"; ... <img src="captcha.php" /> Ricopia codice: <input type="text" name="nospam" /> ... in "captcha.php" aggiungi ... session_start(); header("Content-type: image/png"); $code = substr($_SESSION['code'],0,9); ... nella pagina che riceve ... if($_POST["nospam"] != $_SESSION["code"]) echo "Errore SPAM";
-
Scusa, questa prima parte
session_start();
$_SESSION["code"] = "test"dove la dovrei mettere?
-
Devi metterla nella pagina dove c'è il form da compilare, così come il tag img che punta al file captcha.php
Es.
<?php session_start(); $_SESSION["code"] = "test" ?> <html ... ... <form ... ... <img src="captcha.php" /> Ricopia codice: <input type="text" name="nospam" />
-
si, ma in ch-regio-info.ch/eintragen.htm non mi appare nessun testo.
-
Converti la pagina html in php "eintragen.php", altrimenti non viene interpretato il codice php iniziale.
-
Ciao, ho fatto e in effetti funziona, o meglio appare la scritta, solo che invece di generare un testo questa riproduce sempre solo la parola "test" e inoltre anche scrivendo la parola giusta da errore come SPAM.
-
Nella pagina con il form di invio:
$_SESSION["code"] = "test";
definisce la parola chiave che deve essere copiata dall'utente.
Se vuoi del testo casuale metti in questo caso:function codice_casuale($len) { $caratteri = "abcdefghiljkmnopqrstuvwxyz0123456789"; $codice = ""; for($i = 0; $i <= $len; $i++) { $random = rand(0, strlen($caratteri) - 1); $codice .= substr($caratteri, $random, 1); } return $codice; } $_SESSION["code"] = codice_casuale(5);
Mentre, per risolvere il controllo che restituisce sempre spam, devi aggiungere session_start(); all'inizio del file che invia l'email, mi sono dimenticato di metterlo nel post precedente.
-
Grazie mille, mi hai dato veramente un grande aiuto!
Ora sembra funzionare correttamente
Grazie ancora