Foros del Web » Programando para Internet » PHP »

Validar Formulario

Estas en el tema de Validar Formulario en el foro de PHP en Foros del Web. este es mi formulario Código PHP: <form name="formulario" method="post" action="form.php">   <table width="760" border="0" cellpadding="0" cellspacing="0">     <tr>        <td width="93" height="4"></td>       <td width="20"></td>       <td width="216"></td>       <td width="124"></td>       <td width="230"></td>       <td width="20"></td>       <td width="57"></td>     </tr>     <tr>       <td height="21"></td>       <td></td>       <td></td>       <td valign="top">&nbsp;</td>       <td></td>       <td></td>       <td></td> ...
  #1 (permalink)  
Antiguo 08/12/2003, 15:06
Avatar de Gerald  
Fecha de Ingreso: julio-2003
Mensajes: 1.356
Antigüedad: 20 años, 9 meses
Puntos: 2
Validar Formulario

este es mi formulario
Código PHP:

<form name="formulario" method="post" action="form.php">
  <table width="760" border="0" cellpadding="0" cellspacing="0">
    <tr> 
      <td width="93" height="4"></td>
      <td width="20"></td>
      <td width="216"></td>
      <td width="124"></td>
      <td width="230"></td>
      <td width="20"></td>
      <td width="57"></td>
    </tr>
    <tr>
      <td height="21"></td>
      <td></td>
      <td></td>
      <td valign="top">&nbsp;</td>
      <td></td>
      <td></td>
      <td></td>
    </tr>
    <tr> 
      <td height="20"></td>
      <td valign="top" align="right"><img src="images/esq_derar.gif" width="20" height="20"></td>
      <td colspan="3" valign="top" bgcolor="#e6e6e6"><img src="images/spacer.gif" width="1" height="1"></td>
      <td valign="top"><img src="images/esq_izqar.gif" width="20" height="20"></td>
      <td></td>
    </tr>
    <tr> 
      <td height="366"></td>
      <td colspan="5" valign="top" class="textocont"> <table width="100%" border="0" cellpadding="0" cellspacing="0" class="texto" bgcolor="#e6e6e6">
 
          <tr> 
            <td valign="top" width="22" rowspan="11">&nbsp;</td>
            <td height="27" valign="top" colspan="2" align="center"> Complete 
              el siguiente formulario:</td>
            <td width="28" rowspan="11" valign="top">&nbsp;</td>
          </tr>
          <tr> 
            <td valign="top" width="252" height="28" bgcolor="#e6e6e6">Nombre 
              y Apellido:</td>
            <td width="308" valign="top"> <input type="text" name="nombre" size="35"> 
            </td>
          </tr>
          <tr> 
            <td height="28" valign="top">Empresa:</td>
            <td valign="top"> <input type="text" name="empresa" size="35"> </td>
          </tr>
          <tr> 
            <td valign="top" height="28">A que se dedica tu empresa:</td>
            <td valign="top"> <input type="text" name="rubro" size="35"> 
            </td>
          </tr>
          
          <tr> 
            <td valign="top" height="28"> URL de sitio web :</td>
            <td valign="top"> <input type="text" name="url" size="35"> </td>
          </tr>
          <tr> 
            <td valign="top" height="28">Email:</td>
            <td valign="top"> <input type="text" name="email" size="35"> </td>
          </tr>
          
          <tr> 
            <td height="24" valign="top">Razon del Contacto:</td>
            <td valign="top"> <select name="servicio" class="vinculobold">
                <option value="diseno">Dise&ntilde;o Web</option>
                <option value="aplica">Aplicaciones Web</option>
                <option value="ecomm">Comercio Electr&oacute;nico</option>
                <option value="mark">Consultas</option>
                </select> </td>
          </tr>
          <tr> 
            <td height="80" valign="top">Escribe tu consulta o comentario:</td>
            <td valign="top"> <textarea name="consulta" cols="35" rows="3"></textarea> 
            </td>
          </tr>
          <tr> 
            <td height="39" colspan="2" valign="middle"> <div align="center"> 
                
                <input type="submit" name="enviar" value="Enviar">
              </div></td>
          </tr>
        </table></td>
 <td></td>
    </tr>
    <tr> 
      <td height="20"></td>
      <td valign="top"><img src="images/esq_deraba.gif" width="20" height="20"></td>
      <td valign="bottom" bgcolor="#e6e6e6">&nbsp;</td>
      <td valign="bottom" bgcolor="#e6e6e6">&nbsp;</td>
      <td valign="bottom" bgcolor="#e6e6e6">&nbsp;</td>
      <td valign="top"><img src="images/esq_izqaba.gif" width="20" height="20"></td>
      <td></td>
    </tr>
  </table>
          
</form>
<p>
<?
if (isset($_POST["enviar"])){
if(empty(
$_POST[nombre])){
echo 
"Debes escribir un nombre.";
}
if(empty(
$_POST[email])){
echo 
"Debes colocar tu email.";
}
}
?></p>
y este es el form.php

Código PHP:
<?
          
    
//Estoy recibiendo el formulario, compongo el cuerpo 
    
$cuerpo "Formulario enviado\n"
    
$cuerpo .= "Nombre: " $_POST["nombre"] . "\n"
    
$cuerpo .= "Empresa: " $_POST["empresa"] . "\n"
     
$cuerpo .= "Rubro de la Empresa: " $_POST["rubro"] . "\n"
                
$cuerpo .= "Pagina Web: " $_POST["url"] . "\n"
                
$cuerpo .= "Email: " $_POST["email"] . "\n"
        
$cuerpo .= "Servicio que le interesa: " $_POST["servicio"] . "\n"
                
$cuerpo .= "Consulta: " $_POST["consulta"] . "\n"
    
$cuerpo  nl2br($cuerpo);
    
$to "[email protected]";
    
$subject "$nombre - Bla";
    
$mailheader "MIME-Version: 1.0 \r\n"
    
$mailheader .= "Content-type: text/html; charset=iso-8859-1 \r\n"
    
$mailheader .= "From: Formulario de Discos <$email> \r\n"
    
$mailheader .= "Return-path: $email \r\n";
    
$mailheader .= "X-Priority: 1 \r\n"
    
$mailheader .= "X-MSMail-Priority: High \r\n"
    
$mailheader .= "X-Mailer: PHP/".phpversion()." \n"
    if (
mail ($to,$subject,$cuerpo,$mailheader))
    {
    
header("Location:gracias.html");
    exit;
    } else {
    
header("Location:error.html");
    exit;
    }
    
?>
cuando le doy enviar , no me valida esos los campos nombre ni email y ademas me envia el email vacio, y me sale este error en form.php

Warning: Cannot add header information - headers already sent by (output started at /home/httpd/vhosts/g2project.com/httpdocs/form.php:2) in /home/httpd/vhosts/g2project.com/httpdocs/form.php on line 26

Necesito ayuda para poder validar los campos, que no los dejen vacios y validar email.

Y sobretodo que se vaya al form.php sin que se haya llenado todos los campos.

Antes lo validaba con javascript, pero leyendo post de seguridad de php ahora no hay que fiarse y mantener feliz a mi cliente

Gracias por su ayuda
__________________
Solo por Hoy: Trataré de fortalecer mi mente. Estudiaré y aprenderé algo útil
Hoteldipity
Arte Caracol

Última edición por Gerald; 11/04/2004 a las 18:40
  #2 (permalink)  
Antiguo 08/12/2003, 15:22
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
Hola,

Logico que no valide los campos, has puesto el codigo en el script equivocado. Si te fijas, al darle a enviar se carga form.php. Ese codigo de validacion se ejecuta cada vez que se carga la pagina con el formulario, no al enviar el formulario.

Y sobre el error en form.php, antes del header() no puedes generar ninguna salida al navegador. Y en el mensaje de error te dice que generas salida en la linea 2 de form.php.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #3 (permalink)  
Antiguo 08/12/2003, 15:56
Avatar de Gerald  
Fecha de Ingreso: julio-2003
Mensajes: 1.356
Antigüedad: 20 años, 9 meses
Puntos: 2
De acuerdo

Código PHP:
<?
if (isset($_POST["enviar"])){
if(empty(
$_POST[nombre])){
echo 
"Debes escribir un nombre.";
echo 
"<input TYPE=\"button\" VALUE=\" ATRÁS\" onClick=\"history.go(-1)\">";
}
if(empty(
$_POST[email])){
echo 
"Debes colocar tu email.";
echo 
"<input TYPE=\"button\" VALUE=\" ATRÁS\" onClick=\"history.go(-1)\">";

}
}
?>
<?
          
    
//Estoy recibiendo el formulario, compongo el cuerpo 
    
$cuerpo "Formulario enviado\n"
    
$cuerpo .= "Nombre: " $_POST["nombre"] . "\n"
    
$cuerpo .= "Empresa: " $_POST["empresa"] . "\n"
     
$cuerpo .= "Rubro de la Empresa: " $_POST["rubro"] . "\n"
                
$cuerpo .= "Pagina Web: " $_POST["url"] . "\n"
                
$cuerpo .= "Email: " $_POST["email"] . "\n"
        
$cuerpo .= "Servicio que le interesa: " $_POST["servicio"] . "\n"
                
$cuerpo .= "Consulta: " $_POST["consulta"] . "\n"
    
$cuerpo  nl2br($cuerpo);
    
$to "[email protected]";
    
$subject "$nombre - Consulta";
    
$mailheader "MIME-Version: 1.0 \r\n"
    
$mailheader .= "Content-type: text/html; charset=iso-8859-1 \r\n"
    
$mailheader .= "From: Formulario de Discos <$email> \r\n"
    
$mailheader .= "Return-path: $email \r\n";
    
$mailheader .= "X-Priority: 1 \r\n"
    
$mailheader .= "X-MSMail-Priority: High \r\n"
    
$mailheader .= "X-Mailer: PHP/".phpversion()." \n"
    if (
mail ($to,$subject,$cuerpo,$mailheader))
    {
    
header("Location:gracias.html");
    exit;
    } else {
    
header("Location:error.html");
    exit;
    }
    
?>
Entonces como seria querido amigo josemi, esta es la manera correcta, dice que hay que llenar los campos nombres y email pero sigue enviando el email
__________________
Solo por Hoy: Trataré de fortalecer mi mente. Estudiaré y aprenderé algo útil
Hoteldipity
Arte Caracol

Última edición por Gerald; 11/04/2004 a las 18:41
  #4 (permalink)  
Antiguo 09/12/2003, 16:35
Avatar de Gerald  
Fecha de Ingreso: julio-2003
Mensajes: 1.356
Antigüedad: 20 años, 9 meses
Puntos: 2
Apreciaria mucho su ayuda amigos phperos, que facil se van los post nuevo hasta la pagina 3 xD
__________________
Solo por Hoy: Trataré de fortalecer mi mente. Estudiaré y aprenderé algo útil
Hoteldipity
Arte Caracol
  #5 (permalink)  
Antiguo 10/12/2003, 02:29
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
Coloca un exit; detras de cada echo del boton de "atras", para que no ejecute nada mas del script.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #6 (permalink)  
Antiguo 10/12/2003, 18:03
Avatar de Gerald  
Fecha de Ingreso: julio-2003
Mensajes: 1.356
Antigüedad: 20 años, 9 meses
Puntos: 2
Dejame probar y te cuento como me va, aunque ya logre progrmar un formulario muy bueno :)
__________________
Solo por Hoy: Trataré de fortalecer mi mente. Estudiaré y aprenderé algo útil
Hoteldipity
Arte Caracol
  #7 (permalink)  
Antiguo 10/12/2003, 18:29
Avatar de Gerald  
Fecha de Ingreso: julio-2003
Mensajes: 1.356
Antigüedad: 20 años, 9 meses
Puntos: 2
De acuerdo Vamos bien

Código PHP:
<?
if (isset($_POST["enviar"])){
if(empty(
$_POST[nombre])){
echo 
"Debes escribir un nombre.";
echo 
"<input TYPE=\"button\" VALUE=\" ATRÁS\" onClick=\"history.go(-1)\">";
exit;
}
if(empty(
$_POST[email])){
echo 
"Debes colocar tu email.";
echo 
"<input TYPE=\"button\" VALUE=\" ATRÁS\" onClick=\"history.go(-1)\">";
exit;
}
}
    
//Estoy recibiendo el formulario, compongo el cuerpo 
    
$cuerpo "Formulario enviado\n"
    
$cuerpo .= "Nombre: " $_POST["nombre"] . "\n"
    
$cuerpo .= "Empresa: " $_POST["empresa"] . "\n"
     
$cuerpo .= "Rubro de la Empresa: " $_POST["rubro"] . "\n"
        
$cuerpo .= "Pais: " $_POST["pais"] . "\n"
        
$cuerpo .= "Pagina Web: " $_POST["url"] . "\n"
        
$cuerpo .= "Email: " $_POST["email"] . "\n"
        
$cuerpo .= "Servicio que le interesa: " $_POST["servicio"] . "\n"
        
$cuerpo .= "Consulta: " $_POST["consulta"] . "\n"
    
$cuerpo  nl2br($cuerpo);
    
$to "[email protected]";
    
$subject "$nombre - Consulta";
    
$mailheader "MIME-Version: 1.0 \r\n"
    
$mailheader .= "Content-type: text/html; charset=iso-8859-1 \r\n"
    
$mailheader .= "From: Formulario de Discos <$email> \r\n"
    
$mailheader .= "Return-path: $email \r\n";
    
$mailheader .= "X-Priority: 1 \r\n"
    
$mailheader .= "X-MSMail-Priority: High \r\n"
    
$mailheader .= "X-Mailer: PHP/".phpversion()." \n"
    if (
mail ($to,$subject,$cuerpo,$mailheader))
    {
    
header("Location:gracias.html");
    exit;
    } else {
    
header("Location:error.html");
    exit;
    }
    
?>
Hasta aqui vamos bien pero quiero validar el resto de campos pero no quiero estar avisando al usuario que campo falta, por ejemplo. Falta nombre
Falta email
Etc.

lo muestre asi te falta llenar el campo de nombre y email y etc etc.
__________________
Solo por Hoy: Trataré de fortalecer mi mente. Estudiaré y aprenderé algo útil
Hoteldipity
Arte Caracol

Última edición por Gerald; 11/04/2004 a las 18:42
  #8 (permalink)  
Antiguo 11/12/2003, 05:56
Avatar de jercer  
Fecha de Ingreso: octubre-2003
Mensajes: 373
Antigüedad: 20 años, 6 meses
Puntos: 13
Cambia:

if (isset($_POST["enviar"])){
if(empty($_POST[nombre])){
echo "Debes escribir un nombre.";
echo "<input TYPE=\"button\" VALUE=\" ATRÁS\" onClick=\"history.go(-1)\">";
exit;
}
if(empty($_POST[email])){
echo "Debes colocar tu email.";
echo "<input TYPE=\"button\" VALUE=\" ATRÁS\" onClick=\"history.go(-1)\">";
exit;
}
}

Por:

$mensaje = "";
if (isset($_POST["enviar"])){
if(empty($_POST[nombre])){
$mensaje .= "Debes escribir un nombre.<br>";
}
if(empty($_POST[email])){
$mensaje .= "Debes colocar tu email.<br>";
}
if ($mensaje != ""){
echo "Se han producido los siguientes errores:<br>".$mensaje;
echo "<input TYPE=\"button\" VALUE=\" ATRÁS\" onClick=\"history.go(-1)\">";

}
}
  #9 (permalink)  
Antiguo 12/12/2003, 18:05
Avatar de Gerald  
Fecha de Ingreso: julio-2003
Mensajes: 1.356
Antigüedad: 20 años, 9 meses
Puntos: 2
Lo logre

Gracias a todos los phperos que cooperaron con un formulario de contacto casi perfecto.
variables superglobales
validacion con javascript y php (recomendacion muy buena de cluster)

salidas con header
el uso de ;exit
wordwrap , para que no te dañe el diseño del script.

validaciones del email.

Lo de html era pan comido, java script ni que hablar, la cosa era php y gracias a ustedes lo logre.

Ahora me he planteado una duda, y espero poder solucionarlo aqui.

He descubierto un bug muy particular en muchos formularios.
al darle click varias veces al mismo formulario se repite la informacion y en mi caso llegan varios emails.

Encontre la solucion en java script pero me interesa, lograr que el formulario se envie por usuario uno por minuto , asi como en forosdelweb, que dice los administradores han dispuesto de que cada usuario pueda enviar un mensaje cada 30 segundos.

Gracias a todos.
__________________
Solo por Hoy: Trataré de fortalecer mi mente. Estudiaré y aprenderé algo útil
Hoteldipity
Arte Caracol
  #10 (permalink)  
Antiguo 13/12/2003, 22:44
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
Encontre la solucion en java script pero me interesa, lograr que el formulario se envie por usuario uno por minuto , asi como en forosdelweb, que dice los administradores han dispuesto de que cada usuario pueda enviar un mensaje cada 30 segundos
Con una cookie lo puedes implementar .. Crea una cookie con tiempo de expiración 1 minuto y en tu scripts de proceso de tu formulario (el que valida) conpruebas la existencia de esa cookie. Si existe es que todavía no puede realizar más envios (uso de formulario en sí) .. si no existe es que o bien nunca realizó un envio .. o ya pasó ese tiempo de expiración que definistes ..

Más info:
http://www.php.net/manual/en/function.setcookie.php


Tambien podrías complicarte guardando en el servidor (sea una BD, archivo de texto plano .. etc) la "IP" del usuario que usó el formulario. Esto si bien es más seguro que una cookie, plantearía problemas en IP compartidas como las de una intranet o ciertos ISP's de conexión "ADSL" y similares que pasan por un Proxy.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #11 (permalink)  
Antiguo 14/12/2003, 16:05
Avatar de Gerald  
Fecha de Ingreso: julio-2003
Mensajes: 1.356
Antigüedad: 20 años, 9 meses
Puntos: 2
Empiezo de cero

Código PHP:
<?php
// set the expiration date to one hour ago
setcookie ("TestCookie"""time() - 3600);
setcookie ("TestCookie"""time() - 3600"/~rasmus/"".example.com"1);
?>
como podria aplicar este codigo a mi formulario, gracias cluster por el enlace, me podrian echar una manito .
GRacias amigos phperos!!
__________________
Solo por Hoy: Trataré de fortalecer mi mente. Estudiaré y aprenderé algo útil
Hoteldipity
Arte Caracol
  #12 (permalink)  
Antiguo 15/12/2003, 15:55
Avatar de Gerald  
Fecha de Ingreso: julio-2003
Mensajes: 1.356
Antigüedad: 20 años, 9 meses
Puntos: 2
Echenme una manito

Vamos amigos phperos, echenme una manitoo , denme una idea....

Saludos
__________________
Solo por Hoy: Trataré de fortalecer mi mente. Estudiaré y aprenderé algo útil
Hoteldipity
Arte Caracol
  #13 (permalink)  
Antiguo 16/12/2003, 06:18
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Gerald .. Ese "código" que pusistes de setcookie() te sirve para crear unas variables en cookies (concretamente para tu caso se sobraría con la primera).

Así que el proceso de validación de tu formulario con la opción de las cookies para evitar que se use el formulario en X segundos (que defines en el 3er parámetro de setcookie() ..) sería algo así:

Código PHP:
if (isset($_COOKIE['nombrequeledes'])){
      
header("location: pagina_de_error.php");
      exit;
} else {
    
// Validas y procesas tu formulario como ya lo haces ...
    // Al final ... "seteas" (creas) la cookie:
    
setcookie(......);

Recuerda que antes de setcookie() no puede existir nada de HTML por delante .. así que tu script de proceso NO ha de usar nada de HTML, por eso el "mensaje de error" cuando la cookie está creada .. la redirecciono a otra página que será la que muestre el error (en este caso no importa pero en tus mensajes de error al validar o de exito del proceso .. debes de sacarlos de este script y mostrarlos en otro redireccionando y pasando una variable de control tipo: errores_formulario.php?codigo=blabla y gestionarlo en ese script para mostrar el error en consecuencia).

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #14 (permalink)  
Antiguo 06/01/2004, 20:06
 
Fecha de Ingreso: diciembre-2003
Ubicación: -
Mensajes: 179
Antigüedad: 20 años, 3 meses
Puntos: 0
Ha ver si me ayudan con esto, cada vez que apreto Enviar me pone para descargar el archivo procesar.php!!!

En home.htm:
Código:
<input name="nombre" type="text" id="nombre" value="Ingresa tu Nombre">            
              </p>
            <p class="Estilo28"><input name="email" type="text" id="email" value="Ingresa tu email">            
            </p>
            <form name="email" method="post" action="procesar.php">
            <input type="submit" name="Submit" value="Enviar">
            </form>
En procesar.php:
Código:
<?
if (isset($_POST["enviar"])){
if(empty($_POST[nombre])){
echo "Debes escribir un nombre.";
echo "<input TYPE=\"button\" VALUE=\" ATRÁS\" onClick=\"history.go(-1)\">";
}
if(empty($_POST[email])){
echo "Debes colocar tu email.";
echo "<input TYPE=\"button\" VALUE=\" ATRÁS\" onClick=\"history.go(-1)\">";

}
}
?>
<?
          
    //Estoy recibiendo el formulario, compongo el cuerpo 
    $cuerpo = "Formulario enviado\n"; 
    $cuerpo .= "Email: " . $_POST["email"] . "\n"; 
    $subject = "$nombre - Consulta G2project";
    if (mail ($to,$subject,$cuerpo))
    {
    header("Location:gracias.html");
    exit;
    } else {
    header("Location:error.html");
    exit;
    }
    ?>
Gracias
__________________
MundoTorrent.net El Mundo de las Descargas Gratis.
TopExtremo.com El Mejor TOP de sitios web de la Web.
Mundo-Juergos.com Tu Portal de Juegos y Animaciones Flash Gratis.

Última edición por CoolMac; 06/01/2004 a las 20:08
  #15 (permalink)  
Antiguo 06/01/2004, 20:58
Avatar de Gerald  
Fecha de Ingreso: julio-2003
Mensajes: 1.356
Antigüedad: 20 años, 9 meses
Puntos: 2
hey amigo se entiende que tu hosting soporta php no?
__________________
Solo por Hoy: Trataré de fortalecer mi mente. Estudiaré y aprenderé algo útil
Hoteldipity
Arte Caracol
  #16 (permalink)  
Antiguo 06/01/2004, 21:00
 
Fecha de Ingreso: diciembre-2003
Ubicación: -
Mensajes: 179
Antigüedad: 20 años, 3 meses
Puntos: 0
claro!!

si no estaria usando cgi
__________________
MundoTorrent.net El Mundo de las Descargas Gratis.
TopExtremo.com El Mejor TOP de sitios web de la Web.
Mundo-Juergos.com Tu Portal de Juegos y Animaciones Flash Gratis.
  #17 (permalink)  
Antiguo 28/11/2004, 18:42
 
Fecha de Ingreso: noviembre-2004
Mensajes: 35
Antigüedad: 19 años, 4 meses
Puntos: 1
No recibo ningun mail

Hola a todos, la verdad esta muy bueno este foro ya que uno se puede sacar algunas dudas.
Les comento que me funciona todo bien pero hay un problemita cuando veo en la casilla de email no recibo mail alguno de la pagina. si alguien me puede decir por que.
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 22:08.