Я безуспешно искал и просматривал различные примеры контактных форм и темы об отображении сообщения об ошибке через массив .
Теперь мой вопрос?
Есть ли способ включить другую переменную в $errors
или array
для распределения сообщений об ошибках в каждое конкретное поле, чтобы отображать сообщения об ошибках ниже или сбоку от каждого ошибочного поля формы.
Моя форма:
<!DOCTYPE html>
<html>
<head>
<title>Formulario de Contacto</title>
</head>
<body>
<?php
session_start();
$errors = '';
$nombre = '';
$email = '';
$seleccionado = '';
$telefono = '';
$mensaje = '';
if(isset($_POST['submit'])) {
if($_SESSION['vcode'] != $_POST['vcode']) {
$errors .= "Los caracteres no coincide con el código captcha";
}
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$nombre = test($_POST["name"]);
$email = test($_POST["mail"]);
$telefono = test($_POST["phone"]);
$mensaje = test($_POST["message"]);
$seleccionado = test($_POST['producto']);
}
if(empty($nombre)) {
$errors .= "\n Por favor ingrese su nombre.";
}else {
if (!preg_match("/^[a-zA-Z ]*$/",$nombre)) {
$errors .= "\n Sólo se permiten letras y espacios en blanco.";
}
}
if(empty($email)) {
$errors .= "\n Por favor ingrese su email. ";
}else{
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
$errors .="\n email no valido";
}
}
if(empty($telefono)) {
$errors .= "\n Por favor ingresar su número telefono. ";
}else{
if(!preg_match("/^\+?\d{1,3}?[- .]?\(?(?:\d{2,3})\)?[- .]?\d\d\d[- .]?\d\d\d\d$/", $telefono)) {
$errors .="\n Número no valido";
}
}
if($_POST['producto'] == 0){
$errors .= "\n Debe seleccionar un producto";
}
if(empty($mensaje)) {
$errors .= "\n Por favor ingrese su mensaje. ";
}
if(empty($errors)) {
$asunto = "";
$message = "Usuario:".$_POST['name']." Email:".$_POST['mail']." Telefono ".$_POST['phone']." Informacion ".$_POST['message'];
$destino = "[email protected]";
$remitente = "From: [email protected]";
mail($destino,$asunto,$message,$remitente);
unset($_POST['submit']);
$msg= "Gracias por sus comentarios";
}
}
?>
<?php
function test($data) {
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
?>
<div class="error">
<?php
if(isset($msg)){
echo "<p class='err'>".$msg."</p>";
}else{
if (isset($errors))
echo "<p class='err'>".nl2br($errors)."</p>";
# code...
?>
</div>
<form action="<?php echo htmlentities($_SERVER['PHP_SELF']); ?>" method="post" autocomplete="off" enctype="multipart/form-data">
<div class="touch">
<div class="name">
<input type="text" name="name" placeholder="Name" value='<?php echo htmlentities($nombre) ?>'>
</div>
<div class="email">
<input type="text" name="mail" placeholder="Email" value='<?php echo htmlentities($email) ?>'>
</div>
<div class="phone">
<input type="tel" name="phone" placeholder="Phone" value='<?php echo htmlentities($telefono) ?>'>
</div>
<div class="select-pro">
<select name="producto">
<?php
$datos = array("Asunto","TV","Internet");
for($i=0; $i<count($datos); $i++) {
if($i==$seleccionado) {
echo "<option value='".$i."' selected>".$datos[$i]."</option>";
}else {
echo "<option value='".$i."'>".$datos[$i]."</option>";
}
}
?>
</select>
</div>
<div class="Customer-message">
<textarea id="message" name="message" placeholder="Su consulta..."><?php echo htmlentities($mensaje) ?></textarea>
</div>
<div class="capcha">
<img src="image.php" name="vcode" id="phoca-captcha"/>
<input name="vcode" type="text" placeholder="Codigo captcha">
</div>
<input type="submit" name="submit" value="Enviar">
</div>
</form>
<?php } ?>
</body>
</html>
Я оставлю вам пример, протестированный в
localhost
.Для начала я изменил операторы
if
else
if
наif
,elseif
else
, я думаю, что они выглядят чище и лучше структурированы.Чтобы запустить все правильное сообщение, мы просто проверяем, что все
variables
формы созданы правильно. В противном случае он будет запускать, в зависимости от случая, сообщения об ошибках для каждогоinput
неправильно заполненного или пустого.Это простая система, вы всегда можете перейти на
jQuery
,AJAX
,PHP
или даже быстро создать небольшую анимациюCSS3
, если у вас мало знаний, и она показывает эти сообщения об ошибках в течение определенного времени.Я также немного оптимизировал код
PHP
.Я добавил в правило Captcha случай, если он пуст, это просто добавление наших утверждений
if
elseif
else
. Вы можете добавить те, которые хотите, если вам нужно сделать больше проверок, это может быть что-то вроде этогоif
elseif
elseif
….else
(примером может быть добавление еще одной проверки для подсчета минимума или максимума строки и т. д.).A los errores e añadido un
span
con el atributoclass
para así crear una regla estándar para dichos mensajes, en este caso una pequeña animación con un tiempo fácil de modificar (7 segundos), la animación tiene un pequeño efecto a su inicio y su fin.Ejemplo CSS:
Ejemplo HTML:
¡Suerte!
Мне приходит в голову что-то вроде этого, очевидно, что это без
style
, но вы можете распечатать их внутри одного<span>
или одного<p>
и дать ему классы, чтобы он мог хорошо видеть внизу или сбоку.Это зависит от того, как вы хотите получить ответ, будь то сразу, когда вы переходите от одной текстовой формы к другой, или после отправки с помощью отправки.
В первом случае приходится полагаться на Jscript, во втором — на глобальную переменную ($_session[]), которая устанавливается в соответствии с ошибкой