PHP不进行相应的验证

时间:2018-09-11 14:37:37

标签: php html css

我设置了一个HTML联系人表单,该表单将数据转发到php脚本,然后该脚本将电子邮件发送到指定的帐户。

以某种方式VALIDATE_MAIL过滤器不起作用,我看不到错误在哪里...你们中的某人可以帮助我吗?

此处显示HTML代码:

<form method="post" action="send_email.php">
<h3>Kontaktieren Sie uns</h3>
<input type=text id=name name=name placeholder=Name>
<input type=text id=organisation name=organisation placeholder=Organisation>
<input type=text id=Email name=Email placeholder=Email>
<input type=text id=betreff name=betreff placeholder=Betreff>
<textarea type=text id=subject name=subject placeholder=Nachricht style=height:200px></textarea>
<div class=g-recaptcha data-sitekey=6Lf1GGsUAAAAAJJTsKuFXZkO6UPhfCspnOmInRlS style="transform:scale(0.85);-webkit-transform:scale(0.85);transform-origin:0 0;-webkit-transform-origin:0 0"></div>
<input type=submit value="Nachricht senden">
<div id=info onclick=change()>Kontaktinformation</div>
</form>

这是PHP代码:

<?php
//send_email.php
$email_from = "Absender";   //Absender falls keiner angegeben wurde
$sendermail_antwort = true;      //E-Mail Adresse des Besuchers als Absender. false= Nein ; true = Ja
$name_von_emailfeld = "Email";   //Feld in der die Absenderadresse steht

$empfaenger = "info@drupe.ch"; //Empfänger-Adresse
$mail_cc = ""; //CC-Adresse, diese E-Mail-Adresse bekommt einer weitere Kopie
$betreff = "Neue Kontaktanfrage"; //Betreff der Email

$url_ok = "http://www.drupe.ch/contactsuccess.html"; //Zielseite, wenn E-Mail erfolgreich versendet wurde
$url_fehler = "http://www.drupe.ch/error.html"; //Zielseite, wenn E-Mail nicht gesendet werden konnte


//Diese Felder werden nicht in der Mail stehen
$ignore_fields = array('submit');




//Datum, wann die Mail erstellt wurde
$name_tag = array("Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag");
$num_tag = date("w");
$tag = $name_tag[$num_tag];
$jahr = date("Y");
$n = date("d");
$monat = date("m");
$time = date("H:i");

//Erste Zeile unserer Email
$msg = ":: Gesendet am $tag, den $n.$monat.$jahr - $time Uhr ::\n\n";

//Hier werden alle Eingabefelder abgefragt
foreach($_POST as $name => $value) {
   if (in_array($name, $ignore_fields)) {
        continue; //Ignore Felder wird nicht in die Mail eingefügt
   }
   $msg .= "::: $name :::\n$value\n\n";
}


$a = "@";
//E-Mail Adresse des Besuchers als Absender
if ($sendermail_antwort and isset($_POST[$name_von_emailfeld]) and filter_var($_POST[$name_von_emailfeld], FILTER_VALIDATE_EMAIL)) {
   $email_from = $_POST[$name_von_emailfeld];
}

$header="From: $email_from";

if (!empty($mail_cc)) {
   $header .= "\n";
   $header .= "Cc: $mail_cc";
}



//Email als UTF-8 senden
$header .= "\nContent-type: text/plain; charset=utf-8";

$mail_senden = mail($empfaenger,$betreff,$msg,$header);


//Weiterleitung, hier konnte jetzt per echo auch Ausgaben stehen
if($mail_senden){
  header("Location: ".$url_ok); //Mail wurde gesendet
  exit();
} else{
  header("Location: ".$url_fehler); //Fehler beim Senden
  exit();
}

电子邮件确实已发送。因此,一切都可以解决,但只有过滤器不起作用。我究竟做错了什么?如果你们中的任何一个可以为我指出正确的方向,那将真的很有帮助。

非常感谢:)

1 个答案:

答案 0 :(得分:0)

根据php.net manualfilter_var返回成功时的过滤值,如果出错则返回false

所以也许filter_var部分应该是……。喜欢:

filter_var($_POST[$name_von_emailfeld], FILTER_VALIDATE_EMAIL) !== false

在if子句中有效。

当然,您也应该处理其他情况,以免在电子邮件地址无效的情况下不发送电子邮件。