Problema con Formulario

Iniciado por Mechamon, 27 Septiembre 2017, 17:22 PM

0 Miembros y 1 Visitante están viendo este tema.

Mechamon

Hola, un amigo tiene un problema usa un formulario y cuando le da enviar si nombre y apellido no tiene ñ o tilde, se envía sin problema, pero si tiene alguno de esos 2 casos da el error siguiente como se podría corregir.  Gracias

Lo sentimos mucho, pero hubo errores encontrados con el formulario que enviaste. Estos errores aparecen a continuación.

El nombre que ingresó no parece ser válido.
El Apellido que ingresó no parece ser válido.


Vuelva por favor y solucione estos errores.

#!drvy

Sin el código, no se puede ayudar.

No somos magos, ni adivinos, ni leemos tarot.

Saludos

Mechamon

#2
Código (php) [Seleccionar]
<?php
if(isset($_POST['email'])) {
 
    
// EDIT THE 2 LINES BELOW AS REQUIRED
    
$email_to "info@dominio.com";
    
$email_subject "Formulario de contacto";
 
    function 
died($error) {
        
// your error code can go here
        
echo "Lo sentimos mucho, pero hubo errores encontrados con el formulario que enviaste. ";
        echo 
"Estos errores aparecen a continuación.<br /><br />";
        echo 
$error."<br /><br />";
        echo 
"Vuelva por favor y solucione estos errores.<br /><br />";
        die();
    }
 
 
    
// validation expected data exists
    
if(!isset($_POST['first_name']) ||
        !isset(
$_POST['last_name']) ||
        !isset(
$_POST['email']) ||
        !isset(
$_POST['telephone']) ||
        !isset(
$_POST['comments'])) {
        
died('Lo sentimos, pero parece haber un problema con el formulario que envió.');       
    }
 
     
 
    
$first_name $_POST['first_name']; // required
    
$last_name $_POST['last_name']; // required
    
$email_from $_POST['email']; // required
    
$telephone $_POST['telephone']; // not required
    
$comments $_POST['comments']; // required
 
    
$error_message "";
    
$email_exp '/^[A-Za-z0-9._%-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}$/';
 
  if(!
preg_match($email_exp,$email_from)) {
    
$error_message .= 'La dirección de correo electrónico que introdujo no parece válida.<br />';
  }
 
    
$string_exp "/^[A-Za-z .'-]+$/";
 
  if(!
preg_match($string_exp,$first_name)) {
    
$error_message .= 'El nombre que ingresó no parece ser válido.<br />';
  }
 
  if(!
preg_match($string_exp,$last_name)) {
    
$error_message .= 'El Apellido que ingresó no parece ser válido.<br />';
  }
 
  if(
strlen($comments) < 2) {
    
$error_message .= 'El Mensaje que ingresó no parece ser válido.<br />';
  }
 
  if(
strlen($error_message) > 0) {
    
died($error_message);
  }
 
    
$email_message "Form details below.\n\n";
 
     
    function 
clean_string($string) {
      
$bad = array("content-type","bcc:","to:","cc:","href");
      return 
str_replace($bad,"",$string);
    }
 
     
 
    
$email_message .= "Nombre: ".clean_string($first_name)."\n";
    
$email_message .= "Apellido: ".clean_string($last_name)."\n";
    
$email_message .= "Correo electrónico: ".clean_string($email_from)."\n";
    
$email_message .= "Teléfono: ".clean_string($telephone)."\n";
    
$email_message .= "Mensaje: ".clean_string($comments)."\n";
 
// create email headers
$headers 'From: '.$email_from."\r\n".
'Reply-To: '.$email_from."\r\n" .
'X-Mailer: PHP/' phpversion();
@
mail($email_to$email_subject$email_message$headers);  
?>


<!-- include your own success html here -->

Gracias por contactarnos. Estaremos en contacto con usted muy pronto.

<?php
 
}
?>



Código (html5) [Seleccionar]
<form name="contactform" method="post" action="send_form_email.php">
<table width="450px">
<tr>
<td valign="top">
<label for="first_name">Nombre *</label>
</td>
<td valign="top">
<input type="text" name="first_name" maxlength="50" size="30">
</td>
</tr>
<tr>
<td valign="top">
<label for="last_name">Apellido *</label>
</td>
<td valign="top">
<input type="text" name="last_name" maxlength="50" size="30">
</td>
</tr>
<tr>
<td valign="top">
<label for="email">Correo electrónico *</label>
</td>
<td valign="top">
<input type="text" name="email" maxlength="80" size="30">
</td>
</tr>
<tr>
<td valign="top">
<label for="telephone">Teléfono</label>
</td>
<td valign="top">
<input type="text" name="telephone" maxlength="30" size="30">
</td>
</tr>
<tr>
<td valign="top">
<label for="comments">Mensaje *</label>
</td>
<td valign="top">
<textarea name="comments" maxlength="1000" cols="25" rows="6"></textarea>
</td>
</tr>
<tr>
<td colspan="2" style="text-align:center">
<input type="submit" value="Enviar">
</td>
</tr>
</table>
</form>

#!drvy

El error lo tienes en la linea 42 del PHP. Se hace una comprobación de los strings pero no admite acentos ni ñ ni ningún caracter que no sea (A-Za-z .'-) es decir, espacio, punto, comilla simple, guion, y las letras del tipo US-ASCII.

En un principio, activando el unicode y buscando palabras utf8 deberia funcionar:
Código (php) [Seleccionar]
$string_exp = "/^[\p{L} .'-]+$/u";

También puedes añadir manualmente los caracteres que buscas:
Código (php) [Seleccionar]
$string_exp = "/^[A-Za-zñÑçÇáéóíúÁÉÓÍÚ .'-]+$/";

Saludos



Mechamon

#4
Gracias entonces cambio la linea 42 $string_exp = "/^[A-Za-z .'-]+$/"; por esta otra linea

$string_exp = "/^[A-Za-zñÑçÇáéóíúÁÉÓÍÚ .'-]+$/";




y el html tiene el <meta charset="utf-8">


Mod: No hacer doble post.