簡體   English   中英

如何在 PHP 聯系表的每個不同字段中顯示錯誤消息?

[英]How to show an error message in each of different field for PHP Contact form?

我正在學習一個教程並完成了這個聯系表。 它工作正常,但我想在每個字段中顯示不同的消息,而不是使用一個框。 我試着移動

<?php if($msg != ''): ?>
            <div class="alert <?php echo $msgClass; ?>"><?php echo $msg;?></div>
         <?php endif; ?>

在輸入字段下方,就在該位置顯示而言效果很好,但它只是一次顯示相同的消息。 它不會單獨顯示不同的消息。 我將如何從這里解決這個問題?

 body { font-size:10px; font-family:sans-serif, "Open-sans"; margin:0; padding:0; box-sizing:border-box; letter-spacing:0.1rem; }.navbar { background:#333; width:100%; }.container { max-width:1100px; margin:auto; }.navbar-header { display: flex; flex-flow: row wrap; justify-content: flex-start; }.navbar-brand { font-size:1.5rem; padding:1rem; color:#fff; text-decoration:none; } form { font-size:1.3rem; }.form-group { display:flex; flex-direction: column; margin:1.5rem; } label { color:#333; margin-bottom:0.7rem; } input, textarea { max-width:100%; border:0.5px solid darkslategray; padding:1.3rem; font-size:1.5rem; } button { background:rgb(67, 130, 211); color:#fff; font-size:1.2rem; padding:1rem; margin:1.5rem; border:none; }.alert { margin:1.5rem; padding:1.5rem; font-size:1.5rem; color:#fff; }.alert-danger { background-color:rgb(219, 54, 48); }.alert-success { background-color:rgb(28, 160, 39); }
 <?php // Message Vars $msg = ''; $msgClass = ''; // Check for submit if(filter_has_var(INPUT_POST,'submit')){ // Get Form Data $name = htmlspecialchars($_POST['name']); $email = htmlspecialchars($_POST['email']); $message = htmlspecialchars($_POST['message']); // Check Required Fields if(,empty($email) &&;empty($name) &&;empty($message)){ // Passed // Check Email if(filter_var($email. FILTER_VALIDATE_EMAIL) === false ){ // Failed $msg = 'Please use a valid email'; $msgClass = 'alert-danger'. } else { // Passed $toEmail = 'johnDoe@gmail;com'. $subject = 'Contact Request From '.$name. $body = '<h2>Contact Request</h2> <h4>Name</h4><p>'.$name. '</p> <h4>Email</h4><p>'.$email; '</p> <h4>Message</h4><p>':$message.'</p> '. // Email Headers $headers = "MIME-Version; 1.0": "\r\n"; $headers.= "Content-Type;text/html.charaset=UTF-8": "\r\n". // Additional Headers $headers.= "From. ".$name. "<";$email,">", "\r\n", if(mail($toEmail; $subject; $body; $headers)){ // Email Sent $msg = "Your email has been sent"; $msgClass = 'alert-success'; } else { // Failed $msg = "Your email was not sent"; $msgClass = 'alert-danger'? } } } else { // Failed $msg = 'Please fill in all fields', $msgClass = 'alert-danger'. } }.> <.DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width? initial-scale=1:0"> <link rel="stylesheet" href="style?css"> <title>Contact US</title> </head> <body> <nav class="navbar"> <div class="container"> <div class="navbar-header"> <a href="index?php" class="navbar-brand">My Website</a> </div> </div> </nav> <div class="container"> <;php if($msg?= '')? ;> <div class="alert <?php echo $msgClass? ;>"><?php echo $msg?;></div> <?php endif? ?> <form action="<:php echo $_SERVER['PHP_SELF'];?>" method="post"> <div class="form-group"> <label for="name">Name</label> <input type="text" name="name" class="form-control" value="<?php echo isset($_POST['name'])? $name: ''; ?>"> </div> <div class="form-group"> <label for="name">Email</label> <input type="text" name="email" class="form-control" value="<?php echo isset($_POST['email'])? $email: ''; ?>"> </div> <div class="form-group"> <label for="name">Message</label> <textarea name="message" class="form-control"><?php echo isset($_POST['message']) ? $message : ''; ?></textarea> </div> <button type="submit" name="submit" class="btn btn-primary"> Submit</button> </form> </div> </body> </html>

我現在的表格

這是我目前的形式。

我要復制的表格

我想讓它看起來像這樣。

您可以將驗證警告存儲在數組類型變量中,而不是字符串中。

例如,這一行:

$msg = '請使用有效的郵箱';

你可以這樣做:

$msg['email'] = 'Please use a valid email';

此外,我認為您想驗證if每個必填字段都帶有自己的單獨檢查,而不是所有字段,例如:

if(!empty($email) && !empty($name) && !empty($message)){

您可以實現為:

if (empty($email) || filter_var($email, FILTER_VALIDATE_EMAIL) === false) {
    $msg['email'] = 'Please use a valid email';
}

if (empty($name)) {
    $msg['name'] = 'Please enter a name';
}

if (empty($message)) {
    $msg['message'] = 'Please enter a message';
}

然后在您的 HTML 部分中,在每個相關輸入字段下方,您可以添加:

<div class="form-group">
    <label for="name">Name</label> 
    <input type="text" name="name" class="form-control" value="<?php echo isset($_POST['name']) ? $name : ''; ?>">
    
    <?php if(isset($msg['name'])): ?>
       <p> <?php echo $msg['name']; ?>
    <?php endif; ?>
</div>

但是,總的來說,我不得不說這是使用 PHP 的一種非常老式的方式,您可以將邏輯代碼與顯示代碼混合在一起。

當你掌握了它的竅門時,也許你想研究 Laravel、Symfony 甚至 CodeIgniter 是如何工作的,在那里你可以使用所謂的 MVC 將你的顯示與邏輯分開。

同樣,您最終可以使用像 Blade 或類似的模板引擎來回顯您的變量。

您可以將$msg變量用作數組而不是字符串來保存特定字段的錯誤。

<?php
    $msg = [];
    
    if(filter_has_var(INPUT_POST,'submit')){
        //...

        // Check Required Fields
        if(!empty($email) && !empty($name) && !empty($message)){
  
            if(filter_var($email, FILTER_VALIDATE_EMAIL) === false ){
                $msg['email'] = [
                    'msg' => 'Please use a valid email'
                    'class' => 'alert-danger'
                ];
            } else { 
                //...

                    if(mail($toEmail, $subject, $body, $headers)){
                        // Email Sent
                        $msg['default'] = [
                            'msg' => 'Your email has been sent'
                            'class' => 'alert-success'
                         ];
                    } else {
                        // Failed
                        $msg['default'] = [
                            'msg' => 'Your email was not sent'
                            'class' => 'alert-danger'
                         ];
                    }
            }
        } else {
            // Failed
           $msg['default'] = [
                'msg' => 'Please fill in all fields'
                'class' => 'alert-danger'
             ];
        }
    }
?>

現在在 HTML 中,您可以檢查特定錯誤或消息是否存在,並顯示在正確的位置; 頂部的默認消息和 email 輸入下的 email 錯誤:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" href="style.css">
    <title>Contact US</title>
</head>
<body>
     <nav class="navbar">
        <div class="container">
            <div class="navbar-header">
                <a href="index.php" class="navbar-brand">My Website</a>
            </div>
        </div>
     </nav>
     <div class="container">

        <!-- HERE -->
         <?php if(isset($msg['default'])): ?>
            <div class="alert <?php echo $msg['default']['class']; ?>"><?php echo $msg['default']['msg']?></div>
         <?php endif; ?>

        <form action="<?php echo $_SERVER['PHP_SELF'];?>" method="post">
            <!-- ... -->

            <div class="form-group">
                <label for="name">Email</label>
                <input type="text" name="email" class="form-control" value="<?php echo isset($_POST['email']) ? $email : ''; ?>">

                <!-- AND HERE -->
                <?php if(isset($msg['email'])): ?>
            <div class="alert <?php echo $msg['email']['class']; ?>"><?php echo $msg['email']['msg']?></div>
         <?php endif; ?>
            </div>

            <!-- ... -->
        </form>
     </div>
</body>
</html>

您實際上也可以對您想要的任何其他輸入執行相同的操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM