Foros del Web » Programando para Internet » PHP »

Un error grave

Estas en el tema de Un error grave en el foro de PHP en Foros del Web. Hola lo que quiero hacer es que cuando alaguen envié un mensaje valida el nombre, el mensaje, el email y el teléfono pero que no ...
  #1 (permalink)  
Antiguo 16/05/2012, 09:05
Avatar de patilanz  
Fecha de Ingreso: enero-2012
Mensajes: 880
Antigüedad: 12 años, 3 meses
Puntos: 29
Pregunta Un error grave

Hola lo que quiero hacer es que cuando alaguen envié un mensaje valida el nombre, el mensaje, el email y el teléfono pero que no sea obligatorio pero al hacer el programa usando funciones y haciendo que guarda los errores en un array, al principio me muestra bien el formulario pero al dar al botón me sale error y no me abre la siguiente pagina. El programa es esta:

Código PHP:
<?php
if($_POST["oculto"]) {
    if (
$errores_formulario validar_formilario()) {
        
    }else {
        
procesar_formulario();
    }
}else {
mostrar_formulario();
}


//Funciones
//La funcion de mostrar el formulario y si hay errores tambien
function mostrar_formulario($errores "") {
//Si hay errores imprimirlos
if($errores) {
    print 
"Porfavor corrige los siguientes errores: <ul><li>";
    print 
implode("</li><li>"$errores);
    print 
"</li></ul>";
}
print 
'<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Documento sin título</title>
</head>

<body>
<form id="form1" name="form1" method="post" action="Prueba_complicada.php">
  <p>
    <label for="nombre"></label>
     Nombre*: 
     <input type="text" name="nombre" id="nombre" />
  </p>
  <p>
    <label for="email"></label>
    Email*: 
    <input type="text" name="email" id="email" />
  </p>
  <p>
    <label for="mensaje"></label>
    Mensaje*: 
    <input type="text" name="mensaje" id="mensaje" />
  </p>
  <p>
    <label for="telefono"></label>
    Telefono:
    <input type="text" name="telefono" id="telefono" />
    <input name="oculto" type="hidden" id="oculto" value="1" />
  </p>
  <p>
    <input type="submit" name="button" id="button" value="Enviar" />
  </p>
</form>
</body>
</html>
'
;
}



//La funcion de validar el formulario
function validar_formulario() {
    
//Empezar con un array vacio para añadir le luego si hay errores
    
$errores = array();
    
    
//Añadir mensaje de error si el nombre es muy corto
    
if(!empty($_POST["nombre"]) && isset($_POST["nombre"]) &&
        !empty(
$_POST["email"]) && isset($_POST["email"]) &&
        !empty(
$_POST["mensaje"]) && isset($_POST["mensaje"])) {
        print 
'<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Documento sin título</title>
</head>

<body>
<form id="form1" name="form1" method="post" action="Prueba_complicada.php">
  <p>
    <label for="nombre"></label>
     Nombre*: 
     <input type="text" name="nombre" id="nombre" />
  </p>
  <p>
    <label for="email"></label>
    Email*: 
    <input type="text" name="email" id="email" />
  </p>
  <p>
    <label for="mensaje"></label>
    Mensaje*: 
    <input type="text" name="mensaje" id="mensaje" />
  </p>
  <p>
    <label for="telefono"></label>
    Telefono:
    <input type="text" name="telefono" id="telefono" />
    <input name="oculto" type="hidden" id="oculto" value="1" />
  </p>
  <p>
    <input type="submit" name="button" id="button" value="Enviar" />
  </p>
</form>
</body>
</html>
'
;
        print 
"<br />";
        print 
'Rellene los campos necesarios."El telefono no es oblitario."';
        
//Si el telefono esta vacio continuara validando los demas campos porque no es obligatorio.
        //Validar el telefono
        
if(empty($_POST["telefono"])) {
            if(
$_POST["nombre"] < 2) {
                
$errores[0] = "Nombre demasiado corto!";
            }
        
//Validar el email con el patron para emails.
        
if(!preg_match("=^[^@\s]+@([-a-z0-9]+\.)+[a-z]{2,}$=")) {
            
$errores[1] = "Email no valido!";
        }
        
//Validar el mensaje si es menos de 10 lineas.
        
if($_POST["mensaje"] < 10) {
            
$errores[2] = "El mensaje no puede ser menos de 10 caracteres!";
        }
        
//Validar el mensaje si es mas de 600 lineas.
        
if($_POST["mensaje"] > 600) {
            
$errores[3] = "El mensaje no puede ser mas de 600 lineas!";
        }
        
//Si el telefono tiene escrito validara el telefono con los demas campos.
            
        
} else {
            if(
preg_match("@^\d{9}$@"$_POST["telefono"])) {
                
$errores[4] = "Telefono no valido, aunque no es obligatorio.";
                
            }
            
            
            
        }
        
        }
    return 
$errores;
}
//Funcion para decir hola
function procesar_formulario() {
if(
$_POST["nombre"] && $_POST["email"] && $_POST["telefono"] && $_POST["mensaje"]) {
    print 
"Hola " $_POST["nombre"] . " con email: " $_POST["email"] . " con telefono: " $_POST["telefono"] . " ,creo el mensaje: <br />" $_POST["mensaje"] ;
    print 
"Gracias :)";
    } elseif(
$_POST["nombre"] && $_POST["email"] && $_POST["mensaje"]) {
        print 
"Hola " $_POST["nombre"] . " con email: " $_POST["email"] .  " ,creo el mensaje: <br />" $_POST["mensaje"] ;
        print 
"Gracias :)";
    }
}


?>

Por favor ayuden me a solucionar el problema.
  #2 (permalink)  
Antiguo 16/05/2012, 12:52
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 15 años, 9 meses
Puntos: 1532
Respuesta: Un error grave

si dicha función te devuelve un array de errores ¿contra que lo comparas?, la idea es que si dicho array no tiene elementos esta OK, y si tiene > 1 presenta errores.
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...
  #3 (permalink)  
Antiguo 16/05/2012, 13:29
Avatar de patilanz  
Fecha de Ingreso: enero-2012
Mensajes: 880
Antigüedad: 12 años, 3 meses
Puntos: 29
Pregunta Respuesta: Un error grave

Cita:
Iniciado por maycolalvarez Ver Mensaje
si dicha función te devuelve un array de errores ¿contra que lo comparas?, la idea es que si dicho array no tiene elementos esta OK, y si tiene > 1 presenta errores.
Con esto:
if ($errores_formulario = validar_formilario()) {
no ago que a $errores_formulario se le pone el resultado de la funcion validar_formulario y la if devuelve true si existe es decir si hay errores??
  #4 (permalink)  
Antiguo 16/05/2012, 14:05
Avatar de cuasatar  
Fecha de Ingreso: junio-2011
Ubicación: Bogotá Rock City
Mensajes: 1.230
Antigüedad: 12 años, 10 meses
Puntos: 181
Respuesta: Un error grave

No se para que abres un tema nuevo sobre algo que preguntaste hace poco. Fuera de eso la redacción de las preguntas (del tema anterior y de este) son muy deficientes y no permiten entender para nada de que trata la duda en concreto.

Cita:
Por favor ayuden me a solucionar el problema.
He leido todos los mensajes que has colocado en el post antiguo y nuevo y no se entiende cual es el problema.
__________________
Blog de humor http://elcuasatar.net63.net/
  #5 (permalink)  
Antiguo 16/05/2012, 14:45
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 15 años, 9 meses
Puntos: 1532
Respuesta: Un error grave

ajá, pero que tiene $errores_formulario, los arrays no se comparan así
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...
  #6 (permalink)  
Antiguo 16/05/2012, 14:49
 
Fecha de Ingreso: julio-2008
Ubicación: Barcelona
Mensajes: 2.100
Antigüedad: 15 años, 9 meses
Puntos: 165
Respuesta: Un error grave

Te recomiendo que rehagas tu código porque no se entiende..

Te dejo un ejemplo:

http://buildinternet.com/2008/12/how...ng-php-part-1/

Un saludo!
__________________
Gracias por el Karma :D

empleo ofertas de trabajo
  #7 (permalink)  
Antiguo 16/05/2012, 16:50
Avatar de stramin  
Fecha de Ingreso: marzo-2008
Ubicación: Cubil felino
Mensajes: 1.652
Antigüedad: 16 años, 1 mes
Puntos: 336
Respuesta: Un error grave

uy... sorry amigo pero estoy igual que los demás, mira te voy a decir lo que creo que quieres, corrígeme si me equivoco:

Validar el nombre, mensaje, mail y telefono, (supongo que es un formulario de contacto), los campos no deben ser obligatorios, por lo tanto se puede poner solo telefono, o se puede enviar vacio, sin embargo se deben validar si existen.

Luego quieres un log donde se guarden los intentos de envío fallido en un array, supongo que sería una tabla en la base de datos.

Si todo sale bien te lleva a otra página.

Estoy en lo correcto?
__________________
El objetivo de este foro es orientar al usuario como un favor y no como una obligación.

Yo soy de los que dan puntos por aporte :D
  #8 (permalink)  
Antiguo 17/05/2012, 06:33
Avatar de patilanz  
Fecha de Ingreso: enero-2012
Mensajes: 880
Antigüedad: 12 años, 3 meses
Puntos: 29
De acuerdo Respuesta: Un error grave

Cita:
Iniciado por stramin Ver Mensaje
uy... sorry amigo pero estoy igual que los demás, mira te voy a decir lo que creo que quieres, corrígeme si me equivoco:

Validar el nombre, mensaje, mail y telefono, (supongo que es un formulario de contacto), los campos no deben ser obligatorios, por lo tanto se puede poner solo telefono, o se puede enviar vacio, sin embargo se deben validar si existen.

Luego quieres un log donde se guarden los intentos de envío fallido en un array, supongo que sería una tabla en la base de datos.

Si todo sale bien te lleva a otra página.

Estoy en lo correcto?
Gracias por tu respuesta!
Casi.. quiero validar el nombre, mensaje, mail, y el telefono pero solo que el telefono que no sea obligatorio poro si hay algo que lo valida
y los demas campos los valida primero si hay algo y luego que guarda los errores en un array para poder mostrarlos por separado
  #9 (permalink)  
Antiguo 17/05/2012, 06:34
Avatar de patilanz  
Fecha de Ingreso: enero-2012
Mensajes: 880
Antigüedad: 12 años, 3 meses
Puntos: 29
Información Respuesta: Un error grave

Cita:
Iniciado por maycolalvarez Ver Mensaje
ajá, pero que tiene $errores_formulario, los arrays no se comparan así
Esque estoy aprendiendo php de un libro y allí es casi lo mismo (solo lo del array)...
  #10 (permalink)  
Antiguo 17/05/2012, 07:01
Avatar de patilanz  
Fecha de Ingreso: enero-2012
Mensajes: 880
Antigüedad: 12 años, 3 meses
Puntos: 29
De acuerdo Respuesta: Un error grave

Cita:
Iniciado por maycolalvarez Ver Mensaje
ajá, pero que tiene $errores_formulario, los arrays no se comparan así
Gracias por tu respuesta pero corregi el error de que no me salia nada pero luego no me lo compara bien, y el codigo casi igual es este:

Código PHP:
<?php
if($_POST["oculto"]) {
    
$errores_formulario validar_formulario();
    if (
$errores_formulario) {
        
mostrar_formulario($errores_formulario);
    }else {
        
procesar_formulario();
    }
}else {
mostrar_formulario();
}


//Funciones
//La funcion de mostrar el formulario y si hay errores tambien
function mostrar_formulario($errores '') {
//Si hay errores imprimirlos
if($errores) {
    print 
"Porfavor corrige los siguientes errores: <ul><li>";
    print 
implode("</li><li>"$errores);
    print 
"</li></ul>";
}
print 
'<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Documento sin título</title>
</head>

<body>
<form id="form1" name="form1" method="post" action="Prueba_complicada.php">
  <p>
    <label for="nombre"></label>
     Nombre*: 
     <input type="text" name="nombre" id="nombre" />
  </p>
  <p>
    <label for="email"></label>
    Email*: 
    <input type="text" name="email" id="email" />
  </p>
  <p>
    <label for="mensaje"></label>
    Mensaje*: 
    <input type="text" name="mensaje" id="mensaje" />
  </p>
  <p>
    <label for="telefono"></label>
    Telefono:
    <input type="text" name="telefono" id="telefono" />
    <input name="oculto" type="hidden" id="oculto" value="1" />
  </p>
  <p>
    <input type="submit" name="button" id="button" value="Enviar" />
  </p>
</form>
</body>
</html>
'
;
}



//La funcion de validar el formulario
function validar_formulario() {
    
//Empezar con un array vacio para añadir le luego si hay errores
    
$erroritos = array();
    
    
//Añadir mensaje de error si faltan  campos para escribir
    
if(!empty($_POST["nombre"]) && isset($_POST["nombre"]) &&
        !empty(
$_POST["email"]) && isset($_POST["email"]) &&
        !empty(
$_POST["mensaje"]) && isset($_POST["mensaje"])) {
            
$erroritos[0] = "Rellena los campos obligatorio! El telefono no se entre ellos!";
            if(empty(
$_POST["nombre"]) && !isset($_POST["nombre"]) &&
                empty(
$_POST["email"]) && !isset($_POST["email"]) &&
                empty(
$_POST["mensaje"]) && !isset($_POST["mensaje"])) {
                    
        
//Si el telefono esta vacio continuara validando los demas campos porque no es obligatorio.
        //Validar el telefono
        
if(empty($_POST["telefono"])) {
            if(
strlen($_POST["nombre"]) < 2) {
                
$erroritos[1] = "Nombre demasiado corto!";
            }
        
//Validar el email con el patron para emails.
        
if(!preg_match("/^[^\s]+@([-a-z0-9]+\.)+[a-z]{2,}$/")) {
            
$erroritos[2] = "Email no valido!";
        }
        
//Validar el mensaje si es menos de 10 lineas.
        
if(strlen($_POST["mensaje"]) < 10) {
            
$erroritos[3] = "El mensaje no puede ser menos de 10 caracteres!";
        }
        
//Validar el mensaje si es mas de 600 lineas.
        
if(strlen($_POST["mensaje"]) > 600) {
            
$erroritos[4] = "El mensaje no puede ser mas de 600 lineas!";
        }
        
//Si el telefono tiene escrito validara el telefono con los demas campos.
            
        
} else {
            if(
preg_match("@^\d{9}$@"$_POST["telefono"])) {
                
$erroritos[5] = "Telefono no valido, aunque no es obligatorio.";
                
            }
        }
            
            
        }
        
        }
    return 
$erroritos;
}
//Funcion para decir hola
function procesar_formulario() {
if(
$_POST["nombre"] && $_POST["email"] && $_POST["telefono"] && $_POST["mensaje"]) {
    print 
"Hola " $_POST["nombre"] . " con email: " $_POST["email"] . " con telefono: " $_POST["telefono"] . " ,creo el mensaje: <br />" $_POST["mensaje"] ;
    print 
"Gracias :)";
    } elseif(
$_POST["nombre"] && $_POST["email"] && $_POST["mensaje"]) {
        print 
"Hola " $_POST["nombre"] . " con email: " $_POST["email"] .  " ,creo el mensaje: <br />" $_POST["mensaje"] ;
        print 
"Gracias :)";
    }
}


?>
Como compararlos ??
  #11 (permalink)  
Antiguo 18/05/2012, 13:44
Avatar de patilanz  
Fecha de Ingreso: enero-2012
Mensajes: 880
Antigüedad: 12 años, 3 meses
Puntos: 29
Respuesta: Un error grave

Lo mejore todabia um poco pero todabia sigue sin imprimir nada cuando le doy a enviar sin haber escrito nada ...

Código PHP:
Ver original
  1. <?php
  2. if($_POST["oculto"]) {
  3.     $errores_formulario = validar_formulario();
  4.     if (strlen($errores_formulario[0]) > 0 || strlen($errores_formulario[1]) > 0 || strlen($errores_formulario[2]) > 0 || strlen($errores_formulario[3]) > 0|| strlen($errores_formulario[4]) > 0 || strlen($errores_formulario[5]) > 0) {
  5.         mostrar_formulario($errores_formulario);
  6.     }else {
  7.         procesar_formulario();
  8.     }
  9. }else {
  10. mostrar_formulario();
  11. }
  12.  
  13.  
  14. //Funciones
  15. //La funcion de mostrar el formulario y si hay errores tambien
  16. function mostrar_formulario($errores = "") {
  17. //Si hay errores imprimirlos
  18. if(strlen($errores) > 0) {
  19.     print "Porfavor corrige los siguientes errores: <ul><li>";
  20.     print implode("</li><li>", $errores);
  21.     print "</li></ul>";
  22. }
  23. print '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  24. <html xmlns="http://www.w3.org/1999/xhtml">
  25. <head>
  26. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  27. <title>Documento sin título</title>
  28. </head>
  29.  
  30. <body>
  31. <form id="form1" name="form1" method="post" action="Prueba_complicada.php">
  32.  <p>
  33.    <label for="nombre"></label>
  34.     Nombre*:
  35.     <input type="text" name="nombre" id="nombre" />
  36.  </p>
  37.  <p>
  38.    <label for="email"></label>
  39.    Email*:
  40.    <input type="text" name="email" id="email" />
  41.  </p>
  42.  <p>
  43.    <label for="mensaje"></label>
  44.    Mensaje*:
  45.    <input type="text" name="mensaje" id="mensaje" />
  46.  </p>
  47.  <p>
  48.    <label for="telefono"></label>
  49.    Telefono:
  50.    <input type="text" name="telefono" id="telefono" />
  51.    <input name="oculto" type="hidden" id="oculto" value="1" />
  52.  </p>
  53.  <p>
  54.    <input type="submit" name="button" id="button" value="Enviar" />
  55.  </p>
  56. </form>
  57. </body>
  58. </html>
  59. ';
  60. }
  61.  
  62.  
  63.  
  64. //La funcion de validar el formulario
  65. function validar_formulario() {
  66.     //Empezar con un array vacio para añadir le luego si hay errores
  67.     $erroritos = array();
  68.    
  69.     //Añadir mensaje de error si faltan  campos para escribir
  70.     if(!empty($_POST["nombre"]) && isset($_POST["nombre"]) &&
  71.         !empty($_POST["email"]) && isset($_POST["email"]) &&
  72.         !empty($_POST["mensaje"]) && isset($_POST["mensaje"])) {
  73.             $erroritos[0] = "Rellena los campos obligatorio! El telefono no se entre ellos!";
  74.         }
  75.             elseif(strlen($_POST["nombre"]) > 0  &&
  76.                 strlen($_POST["email"]) > 0 &&
  77.                 strlen($_POST["mensaje"]) > 0) {
  78.                    
  79.         //Si el telefono esta vacio continuara validando los demas campos porque no es obligatorio.
  80.         //Validar el telefono
  81.         if(!empty($_POST["telefono"]) && isset($_POST["telefono"])) {
  82.             if(strlen($_POST["nombre"]) < 2) {
  83.                 $erroritos[1] = "Nombre demasiado corto!";
  84.             }
  85.         //Validar el email con el patron para emails.
  86.         if(!preg_match("/^[^\s]+@([-a-z0-9]+\.)+[a-z]{2,}$/")) {
  87.             $erroritos[2] = "Email no valido!";
  88.         }
  89.         //Validar el mensaje si es menos de 10 lineas.
  90.         if(strlen($_POST["mensaje"]) < 10) {
  91.             $erroritos[3] = "El mensaje no puede ser menos de 10 caracteres!";
  92.         }
  93.         //Validar el mensaje si es mas de 600 lineas.
  94.         if(strlen($_POST["mensaje"]) > 600) {
  95.             $erroritos[4] = "El mensaje no puede ser mas de 600 lineas!";
  96.         }
  97.         //Si el telefono tiene escrito validara el telefono con los demas campos.
  98.            
  99.         } else {
  100.             if(preg_match("@^\d{9}$@", $_POST["telefono"])) {
  101.                 $erroritos[5] = "Telefono no valido, aunque no es obligatorio.";
  102.                
  103.             }
  104.                 if(strlen($_POST["nombre"]) < 2) {
  105.                 $erroritos[1] = "Nombre demasiado corto!";
  106.             }
  107.         //Validar el email con el patron para emails.
  108.         if(!preg_match("/^[^\s]+@([-a-z0-9]+\.)+[a-z]{2,}$/")) {
  109.             $erroritos[2] = "Email no valido!";
  110.         }
  111.         //Validar el mensaje si es menos de 10 lineas.
  112.         if(strlen($_POST["mensaje"]) < 10) {
  113.             $erroritos[3] = "El mensaje no puede ser menos de 10 caracteres!";
  114.         }
  115.         //Validar el mensaje si es mas de 600 lineas.
  116.         if(strlen($_POST["mensaje"]) > 600) {
  117.             $erroritos[4] = "El mensaje no puede ser mas de 600 lineas!";
  118.         }
  119.            
  120.         }
  121.            
  122.            
  123.         }
  124.        
  125.        
  126.     return $erroritos;
  127. }
  128. //Funcion para decir hola
  129. function procesar_formulario() {
  130. if($_POST["nombre"] && $_POST["email"] && $_POST["telefono"] && $_POST["mensaje"]) {
  131.     print "Hola " . $_POST["nombre"] . " con email: " . $_POST["email"] . " con telefono: " . $_POST["telefono"] . " ,creo el mensaje: <br />" . $_POST["mensaje"] ;
  132.     print "Gracias :)";
  133.     } elseif($_POST["nombre"] && $_POST["email"] && $_POST["mensaje"]) {
  134.         print "Hola " . $_POST["nombre"] . " con email: " . $_POST["email"] .  " ,creo el mensaje: <br />" . $_POST["mensaje"] ;
  135.         print "Gracias :)";
  136.     }
  137. }
  138.  
  139.  
  140. ?>

Etiquetas: formulario.php, no_carga, programa, solucion
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:05.