PHP中处理HTML表单的问题

问题描述

我有以下问题:虽然我实际上使用“if isset”来检查变量是否包含一个值,但如果只有在 $besteatigung 中有一个值并且空的 $ 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,"$Vorname");
            fwrite($file,"$Nachname");
            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”来检查变量是否包含值,但如果仅在 $bestatigung 中有值并且空的 $ email 被简单地忽略就足够了。有人能帮助我吗? (我是初学者)

解决方法

isset 函数不检查变量是否为空。空字符串(如果输入为空,您的电子邮件输入将是什么)被视为已设置。咨询type comparison table

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

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