首页 > 解决方案 > 在 PHP 中处理 HTML 表单的问题

问题描述

我有以下问题:虽然我实际上使用“if isset”来检查变量是否包含一个值,但只要在 $bestetigung 中有一个值并且空的 $ email 被简单地忽略就足够了。有人能帮助我吗?(我是初学者)

<html>
    <head>
    <link rel="stylesheet" href="style.css">
        <title>Newslatter Anmeldung</title>
        <meta charset="utf-8">
    </head>
    <body>
        <div>  
        <form method="post" action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']); ?>">
            <p>Ihre E-Mail adresse bitte: </p>
            <input type="email" name="Email">
            <p>Anrede: (optional)</p>
            <input type="radio" name="Geschlecht" value="Mann">
            <label for="Geschlecht">Mann</label><br>
            <input type="radio" name="Geschlecht" value="Frau">
            <label for="Geschlecht">Frau</label><br>
            <p>Vorname: (optional)</p>
            <input type="text" name="Vorname">
            <p>Nachname: (optional)</p>
            <input type="text" name="Nachname">
            <p><input type="checkbox" name="bestaetigung">hiermit bin ich einverstanden,<br> dass meine Daten elektronisch gespeichert werden,<br> damit mir die gewünschte Newsletter zugestellt werden kann ... <br>(gesetzliches Blahblah zum Datenschutz und Speicherung der Daten ....)</p>
            <input type="submit" value="Anmelden" name="submit">
        </form>
        </div>
    </body>
</html>
<?php
if(isset($_POST['submit'])){
    if(isset($_POST['Email'])){ 
        if(isset($_POST['bestaetigung'])){
            $Email = htmlspecialchars(stripslashes(trim($_POST['Email'])));
            $Geschlecht = $_POST['Geschlecht'];
            $Vorname = htmlspecialchars(stripslashes(trim($_POST['Vorname'])));
            $Nachname = htmlspecialchars(stripslashes(trim($_POST['Nachname'])));
            
            $date = date("syHjin");
            
            $file = fopen("nl-anwaerter.txt", "a");
            fwrite($file, "$Email");
            fwrite($file, "|");
            fwrite($file, "$Geschlecht");
            fwrite($file, "|");
            fwrite($file, "$Vorname");
            fwrite($file, "|");
            fwrite($file, "$Nachname");
            fwrite($file, "|");
            fwrite($file, "$date");
            fwrite($file, "\n");
            fclose($file);
            
            $empaenger = "$Email";
            $betreff = "Ihre Newsletter Anmeldung";
            $from = "From: PHP mailer <deinnews@letter.de>\r\n ";
            $from .= "Reply-To: php@mail.com\r\n";
            $from .= "Content-Type: text/html\r\n";
            $msg = "<h1>Newsletter Anmeldung</h1><br><p>Hallo $Name $Nachname um dich entgültig für den Nwesletter anzumelden Klicke bitte auf folgenden Linl: ";
            
            if(mail($empaenger,$betreff,$msg,$from)){
                echo "Eine E-Mail wurde erfolgreich an $Email gesendet, bitte klicke auf den Link in dieser um die Anmeldung zu bestätiegen";
            }
            
        }
    }
    
}
?>

你好,我有以下问题:虽然我实际上是使用“if isset”来检查变量是否包含值,但只要在$besteatigung中有一个值并且空的$ email被简单地忽略就足够了。有人能帮助我吗?(我是初学者)

标签: phphtmlformsif-statementisset

解决方案


isset函数不检查变量是否为空。一个空字符串(如果输入为空白,您的电子邮件输入将是什么)被视为已设置。查阅类型对照表

相反,您应该使用empty来检查电子邮件字段是否有值:

if(!empty($_POST['Email'])){

推荐阅读