![](/img/trans.png)
[英]how show text form contact.blade.php in the message in laravel
[英]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.