首页 > 解决方案 > PHP 没有相应地验证

问题描述

我设置了一个 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();
}

电子邮件确实发送了。所以一切正常,但只有过滤器不起作用。我究竟做错了什么?如果你们中的任何人能指出我正确的方向,那将非常有帮助。

非常感谢提前:)

标签: phphtmlcss

解决方案


根据php.net 手册,在成功和出现错误的情况下filter_var返回过滤值。false

所以也许这filter_var部分应该是某事。喜欢:

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

在 if 子句中有效。

当然,您也应该处理 else-case,如果电子邮件地址无效,则不发送电子邮件。


推荐阅读