php - 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();
}
电子邮件确实发送了。所以一切正常,但只有过滤器不起作用。我究竟做错了什么?如果你们中的任何人能指出我正确的方向,那将非常有帮助。
非常感谢提前:)
解决方案
根据php.net 手册,在成功和出现错误的情况下filter_var
返回过滤值。false
所以也许这filter_var
部分应该是某事。喜欢:
filter_var($_POST[$name_von_emailfeld], FILTER_VALIDATE_EMAIL) !== false
在 if 子句中有效。
当然,您也应该处理 else-case,如果电子邮件地址无效,则不发送电子邮件。
推荐阅读
- npm - NPM 包 crypto-js 是否与加密货币或密码学有关?
- pandas - 通过 buildozer 的 Android 应用程序:需求与配方
- xml - 国家等的 XSLT 特殊字符
- angular - 过滤来自 AngularFire2 实时数据库查询的结果
- angular - 在 reducer 中过滤数据
- python - tkinter 更改级联标签背景颜色
- python - 如何告诉 beanstalkc 接收器在保留任务之前等待 X 秒?
- javascript - 单击按钮时,如何更改另一个页面中元素的类属性?
- corda - Corda - 在同一事务中具有多个状态的流中的性能
- logging - MarkLogic 8 - 请求没有超时 - 在记录 XDMP-XDQPNOSESSION 后不断重试