Я работаю над простой формой контакта, написанной на php, и у меня почти все настроено так, как хотелось бы, потому что сейчас, все ошибки проверки отображаются в div в верхней части моей формы, и я хотел бы изменить ниже, поэтому они отображаются рядом с полем формы, которое вызвало ошибку, но я не уверен, как это сделать, поэтому я пришел к экспертам для некоторых советов.
PHP Validation Routine
$frm_valid = new Validate(); if(isset($_POST['submit'])){ $rules=array( array('Type'=>'Required','Var'=>$_POST['name'],'Msg'=>'Name field is required.'), array('Type'=>'Required','Var'=>$_POST['email'],'Msg'=>'Email address field is required.'), array('Type'=>'Email','Var'=>$_POST['email'],'Msg'=>'Your email address format is invalid.'), array('Type'=>'Required','Var'=>$_POST['subject'],'Msg'=>'Subject field is required.'), array('Type'=>'Required','Var'=>$_POST['message'],'Msg'=>'Message field is required.'), ); $result = $frm_valid->Valid($rules); if(is_array($result)){ // Print validation errors (if any) echo('<div"><b>The form cannot be submitted until the following errors are corrected.</b><ul>'); foreach($result as $key=>$val){ echo '<li>'.$val.'</li>'; } echo('</ul></div><br />'); } else { // Do something else. } }
Формы HTML
<form action="<? echo htmlentities($_SERVER['PHP_SELF']); ?>" method="post"> <input type="text" name="name" value="" /> <br /> <input type="text" name="email" value="" /> <br /> <input type="text" name="subject" value="" /> <br /> <textarea name="message" cols="80" rows="7"></textarea> <br /> <input type="submit" name="submit" value="Send" /> </form>
Для этого вам нужно изменить весь код !!! Структура, возможно, так:
<form action="<?php echo htmlentities($_SERVER['PHP_SELF']); ?>"> <ul> <li> <label> <span>Name</span> <input type="text" name="name" /> <small class="errorText"><?php echo ($_POST["name"] == "") ? "This field is required" : ""; ?></small> </label> </li> <li> <label> <span>Email</span> <input type="text" name="email" /> <small class="errorText"><?php echo ($_POST["email"] == "") ? "This field is required" : ""; ?></small> </label> </li> <li> <label> <span>Subject</span> <input type="text" name="subject" /> <small class="errorText"><?php echo ($_POST["subject"] == "") ? "This field is required" : ""; ?></small> </label> </li> <li> <label> <span>Message</span> <textarea name="message" cols="80" rows="7"></textarea> <small class="errorText"><?php echo ($_POST["message"] == "") ? "This field is required" : ""; ?></small> </label> </li> <li> <input type="submit" name="submit" value="Send" /> </li> </ul> </form>
И CSS для этого же:
* {font-family: Segoe UI, Tahoma;} h1 {font-weight: bold; font-size: 14pt; padding: 5px 0; margin: 5px 0; border: 1px solid #999; border-width: 1px 0;} input[type='submit'] {padding: 5px 20px; cursor: pointer;} ul, li {display: block; list-style: none; margin: 0; padding: 0;} ul li {padding: 5px 0;} ul li label span {display: block; cursor: pointer;} ul li label .errorText {color: #f00; font-weight: bold; vertical-align: top;} ul li label textarea {width: 300px;}
Здесь вы можете увидеть живое демо: Демо
Сохраняйте переменную ошибки для каждого поля. Сказать,
<?php $error = array( "name" => "", "email" => "", "subject" => "", "message" => "" ); ?>
Обновите их с ошибками и покажите их ниже.
<?php if (empty()$_POST["email"]) $error["email"] = "Email is required!"; elseif (!isEmail($_POST["email"])) $error["email"] = "Not a Valid Email!"; ?>
Если ошибок нет, он будет пустым, и пользователь не увидит сообщение об ошибке. В вашем Форм-коде вам нужно просто обновить этот способ:
<small class="errorText"><?php echo $error["name"]; ?></small> <small class="errorText"><?php echo $error["email"]; ?></small>
где в бэкэнд $error["email"]
будет либо "This field is required"
либо "Not a valid email address!"
,
Вы можете использовать следующий способ, если каждое поле имеет одну ошибку:
<input name='myfield'> @if ($errors->has('myfield')) <span style="color:red;"> {{ $errors->first('myfield') }} </span> @endif