当提交无效的PHP表单时,不会显示失败消息


Failure message doesn't display when invalid PHP form is submitted

我在使用PHP表单时遇到了一些困难,问题是即使表单字段没有经过验证,我的确认消息也会显示。

如果表单没有经过验证,我想显示一条替代消息,向用户解释出现了错误,他们的消息没有发送。

不幸的是,我对PHP的理解只和我在尝试把这个表单放在一起的教程一样好,所以我有点卡住了!有人能好心地向我解释一下我做错了什么吗?

代码如下:

<?php
ini_set('display_errors', 'On');
//Defines error variables and sets to empty
$senderErr = $senderEmailErr = $messageErr = "";
//Defines text entry variables and sets to empty
$sender = $senderEmail = $message = "";
//Defines failure/confirmation messages and sets to empty
$thankYou = "";
$formFail = "";
function test_input($data) {
   $data = trim($data);
   $data = stripslashes($data);
   $data = htmlspecialchars($data);
   return $data;
}
if ($_SERVER["REQUEST_METHOD"] == "POST") {
   if (empty($_POST["sender"])) {
     $senderErr = "Name is required";
   } else {
     $sender = test_input($_POST["sender"]);
     // Checks that name only contains letters and whitespace
     if (!preg_match("/^[a-zA-Z ]*$/",$sender)) {
       $senderErr = "Only letters and white space allowed";
     }
   }
   if (empty($_POST["senderEmail"])) {
     $senderEmailErr = "Email is required";
   } else {
     $senderEmail = test_input($_POST["senderEmail"]);
     // Checks if e-mail address syntax is valid
     if (!preg_match("/(['w'-]+'@['w'-]+'.['w'-]+)/",$senderEmail)) {
       $senderEmailErr = "Invalid email format";
     }
   }
   if (empty($_POST["message"])) {
     $messageErr = "You haven't written anything";
   } else {
     $message = test_input($_POST["message"]);
     }
if($_POST["submit"]) {
    $recipient="me@email.com";
    $subject="enquiry";
    $sender=$_POST["sender"];
    $senderEmail=$_POST["senderEmail"];
    $message=$_POST["message"];
    $mailBody="Name: $sender'nEmail: $senderEmail'n'n$message";
    mail($recipient, $subject, $mailBody, "From: $sender <$senderEmail>");
    $thankYou = "Thanks for your message. We'll get back to you shortly";
    }
    else {
        $formFail = "Oops. Something went wrong. Please fill out the required fields.";
    }
}
?>

我认为这与我没有为失败设定合适的条件有关。问题是,我不太确定从哪里开始。很抱歉我是个新手。帮助感激。谢谢。

编辑-以下是对Fred关于元素是否命名的问题的HTML回应:

    <form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
    <label>Name:</label></br>
    <input type="text" name="sender"></br>
    <span class="error">* <?php echo $senderErr;?></span>
    </br>
    <label>Email address:</label></br>
    <input type="text" name="senderEmail"></br>
    <span class="error">* <?php echo $senderEmailErr;?></span>
    </br>
    <label>Message:</label></br>
    <textarea rows="5" cols="20" name="message"></textarea></br>
    <span class="error">* <?php echo $messageErr;?></span>
    <input type="submit" name="submit" value="submit"></br>
</form>
<span><?php echo $thankYou;?></span>
<span><?php echo $formFail;?></span>

if($_POST["submit"])替换为if(($_POST["submit"]) && !empty($_POST["sender"]) && !empty($_POST["senderEmail"]) && !empty($_POST["message"]))将解决问题。

使用PHP的empty()函数,确保如果在条件语句中留下"空"的东西,将不会执行,直到all条件满足。

All&&(逻辑)运算符。