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. Hola tengo un formaulario ya hecho y me gustari saber como hacer dos cosas: -Como hacer para que si no se rellenan ciertos campos no ...
  #1 (permalink)  
Antiguo 21/10/2006, 06:04
Borjimante
Invitado
 
Mensajes: n/a
Puntos:
Validar formulario

Hola tengo un formaulario ya hecho y me gustari saber como hacer dos cosas:

-Como hacer para que si no se rellenan ciertos campos no se pueda enviar el formulario

-Para modificar el tipo de letra cuando confirmas el envio.

Cita:
<?
if (!$HTTP_POST_VARS){
?>
<form action="contacto.php" method=post name="contacto.php" id="contacto.php">
<table width="300" border="0" align="left">
<tr>
<td valign="middle" align="left"><div align="left"><p><b>Nombre:</b></p></div></td>
<td><input type=text name="nombre" size=30> </td>
</tr>
<tr>
<td valign="middle" align="left"><div align="left"><p><b>Email:</b></p></div></td>
<td><input type=text name="email" size=30></td>
</tr>
<tr>
<td valign="middle" align="left"><div align="left"><p><b>Asunto:</b></div></td>
<td><input type=text name="asunto" size=30></td>
</tr>
<tr>
<td valign="middle" align="left"><div align="center"><p><b>Mensaje:</b></p></div></td>
<td><textarea name="coment" cols="25" rows="5"></textarea></td>
</tr>
<tr>
<td><p>&nbsp;</p></td>
<td><input name="submit" type=submit value="Enviar"><input name="B4" type="reset" value="Borrar"></td>
</tr>
</table>
</form>
<?

}else{

//Estoy recibiendo el formulario, compongo el cuerpo

$cuerpo = "Formulario enviado desde la pagina web www.antera-solutions.com\n";

$cuerpo .= "Nombre: " . $HTTP_POST_VARS["nombre"] . "\n";

$cuerpo .= "Email: " . $HTTP_POST_VARS["email"] . "\n";

$cuerpo .= "Mensaje: " . $HTTP_POST_VARS["asunto"] . "\n";

$cuerpo .= "Mensaje: " . $HTTP_POST_VARS["coment"] . "\n";



//mando el correo...

mail("[email protected]","Formulario recibido",$cuerpo);



//doy las gracias por el envío

echo "<p>Su pregunta se ha enviado correctamente.</p>";

}

?></td>
</table>
Un saludo
  #2 (permalink)  
Antiguo 21/10/2006, 07:12
Avatar de JavierB
Colaborador
 
Fecha de Ingreso: febrero-2002
Ubicación: Madrid
Mensajes: 25.052
Antigüedad: 22 años, 2 meses
Puntos: 772
Cita:
Iniciado por Borjimante Ver Mensaje
-Como hacer para que si no se rellenan ciertos campos no se pueda enviar el formulario
Para eso tendrás que usar JavaScript. En las FAQs y en los mensajes de ese foro puedes encontrar algunos ejemplos.

De todas formas, como recomiendan los maestros, no se te olvide validarlo también en el servidor.

Saludos,
  #3 (permalink)  
Antiguo 21/10/2006, 11:17
Borjimante
Invitado
 
Mensajes: n/a
Puntos:
y no hay otra manera que sea con php?
  #4 (permalink)  
Antiguo 21/10/2006, 13:49
 
Fecha de Ingreso: septiembre-2006
Ubicación: Buenos Aires
Mensajes: 125
Antigüedad: 17 años, 8 meses
Puntos: 0
Cita:
Iniciado por Borjimante Ver Mensaje
y no hay otra manera que sea con php?
Con php lo podes podes validar ;pero una vez que te mandan el formulario.
Es decir que si algo esta mal tenes que pedir que se vuelva a ingresar.
si queres que se valide antes que se envie,tiene que ser con javascript.

Para hacer las cosas de manera robusta siempre valida en php.
despues fijate si lo haces con javascript.
Por que si alguien tiene en el navegador desabilitado javascript pueden mandanterte cualquier cosa.(intentos de hackeo,etc).

Saludos.
  #5 (permalink)  
Antiguo 22/10/2006, 04:51
Borjimante
Invitado
 
Mensajes: n/a
Puntos:
y que tendria que hacer para validar con php? digo que que tendria que poner ademas en el codigo que e posteado?
  #6 (permalink)  
Antiguo 22/10/2006, 07:51
 
Fecha de Ingreso: abril-2005
Mensajes: 100
Antigüedad: 19 años
Puntos: 0
tienes que crear un script que procese todos los datos, puedes hacerlo en el mismo archivo del formulario o enviarlo a otro archivo php

si usas el mismo formulario dirigelo con el action del form a la misma pagina

este es un ejemplo del codigo

Código PHP:

<?php
if($_POST){
  
  
// aqui se compruebas todos los campos del formulario

  
$ok 0;
  if(
$_POST['campo1']){ $ok++; }
  if(
$_POST['campo2']){ $ok++; }
  if(
$_POST['campo3']){ $ok++; }
  ......

}

if(
$ok == 3){

  
// se mete en la bd

} else { // no cumple todas las condiciones y se muestra de nuevo el formulario
?>

Aqui el codigo HTML del formulario

<? ?>
ese script deberia funcionar no lo he comprabado pq lo he escrito rapidamente, pero esa es la mecanica aseguir, solo tienes que ajustarlo un poco a lo que necesites. Recuerda poner en cada campo del formularo el valor por defecto: <? echo $_POST['campo']; ?> para que no tenga que escribir de nuevo todo los datos.
  #7 (permalink)  
Antiguo 22/10/2006, 09:15
Avatar de franquero  
Fecha de Ingreso: julio-2005
Mensajes: 179
Antigüedad: 18 años, 9 meses
Puntos: 1
Buenas.

Quizás te sea útil echar un vistazo a estos post:

http://www.forosdelweb.com/f18/validar-cuestionario-410724/

http://www.forosdelweb.com/f18/como-puedo-validar-campos-obligatorios-formulario-357744/
__________________
Es una suerte que la sociedad libre sea más productiva, porque de no haberlo sido jamás se habría tolerado.
  #8 (permalink)  
Antiguo 23/10/2006, 12:29
Borjimante
Invitado
 
Mensajes: n/a
Puntos:
He puesto ese codigo junto con el mio y me a quedado asi

Cita:
<?php
if($_POST){

// aqui se compruebas todos los campos del formulario

$ok = 0;
if($_POST['email']){ $ok++; }
if($_POST['asunto']){ $ok++; }
if($_POST['coment']){ $ok++; }

}

if($ok == 3){

// se mete en la bd

} else { // no cumple todas las condiciones y se muestra de nuevo el formulario

if (!$HTTP_POST_VARS){
?>

<form action="contacto.php" method=post name="contacto.php" id="contacto.php">
<table width="300" border="0" align="left">
<tr>
<td valign="middle" align="left"><div align="left"><p><b>Nombre:</b></p></div></td>
<td><input type=text name="nombre" size=30> </td>
</tr>
<tr>
<td valign="middle" align="left"><div align="left"><p><b>Email:</b></p></div></td>
<td><input type=text name="email" size=30></td>
</tr>
<tr>
<td valign="middle" align="left"><div align="left"><p><b>Asunto:</b></div></td>
<td><input type=text name="asunto" size=30></td>
</tr>
<tr>
<td valign="middle" align="left"><div align="center"><p><b>Mensaje:</b></p></div></td>
<td><textarea name="coment" cols="25" rows="5"></textarea></td>
</tr>
<tr>
<td><p>&nbsp;</p></td>
<td><input name="submit" type=submit value="Enviar"><input name="B4" type="reset" value="Borrar"></td>
</tr>
</table>
</form>
<? } ?>
<?

else{

//Estoy recibiendo el formulario, compongo el cuerpo

$cuerpo = "Formulario enviado desde la pagina web www.antera-solutions.com\n";

$cuerpo .= "Nombre: " . $HTTP_POST_VARS["nombre"] . "\n";

$cuerpo .= "Email: " . $HTTP_POST_VARS["email"] . "\n";

$cuerpo .= "Mensaje: " . $HTTP_POST_VARS["asunto"] . "\n";

$cuerpo .= "Mensaje: " . $HTTP_POST_VARS["coment"] . "\n";



//mando el correo...

mail("[email protected]","Formulario recibido",$cuerpo);



//doy las gracias por el envío

echo "<p>Su pregunta se ha enviado correctamente.</p>";

}

?>
</td>
</table>
Pero me da un error tras otro seriia alguien tan amable de decirme como quedaria una vez insertado todo el codigo?

Un saludo
  #9 (permalink)  
Antiguo 23/10/2006, 14:34
Avatar de Erikfrancisco  
Fecha de Ingreso: noviembre-2003
Ubicación: Estado de México
Mensajes: 503
Antigüedad: 20 años, 5 meses
Puntos: 4
Y si pruebas poniendo tu código de esta manera:

ejem.php
Código PHP:
<html>
<
head>
   <
title>HTML comun y corriente</title>
</
head>
<
body>
<
form action="contacto.php" method="post" name="contacto.php" id="contacto.php">
<
table width="300" border="0" align="left">
<
tr>
   <
td valign="middle" align="left"><div align="left"><p><b>Nombre:</b></p></div></td>
   <
td><input type=text name="nombre" size=30></td>
</
tr>
<
tr>
   <
td valign="middle" align="left"><div align="left"><p><b>Email:</b></p></div></td>
   <
td><input type=text name="email" size=30></td>
</
tr>
<
tr>
   <
td valign="middle" align="left"><div align="left"><p><b>Asunto:</b></div></td>
   <
td><input type=text name="asunto" size=30></td>
</
tr>
<
tr>
   <
td valign="middle" align="left"><div align="center"><p><b>Mensaje:</b></p></div></td>
   <
td><textarea name="coment" cols="25" rows="5"></textarea></td>
</
tr>
<
tr>
   <
td><p>&nbsp;</p></td>
   <
td><input name="submit" type=submit value="Enviar"><input name="B4" type="reset" value="Borrar"></td>
</
tr>
</
table>
</
form>
</
body>
</
html
contacto.php
Código PHP:
<?php 
if( !empty ( $_POST['nombre'] ) && !empty ( $_POST['email'] ) && !empty ( $_POST['asunto'] ) && !empty ( $_POST['coment'] ) ) // aqui se compruebas todos los campos del formulario
{
   
// Estoy recibiendo el formulario, compongo el cuerpo 

   
$cuerpo "Formulario enviado desde la pagina web www.antera-solutions.com\n";
   
$cuerpo .= "Nombre: ".$_POST['nombre']."\n";
   
$cuerpo .= "Email: ".$_POST['email']."\n";
   
$cuerpo .= "Mensaje: ".$_POST['asunto']."\n";
   
$cuerpo .= "Mensaje: ".$HTTP_POST_VARS['coment']."\n";

   
//mando el correo... 
   
mail"[email protected]""Formulario recibido"$cuerpo ); 

   if ( 
mail )
   {
      
//doy las gracias por el envío
      
echo "<p>Su pregunta se ha enviado correctamente.</p>"
   }
   else
   {
      echo 
"Ocurrio un error, no se pudo enviar el email";
   }
}
else
{
   
header"Location: ejem.php" );
}
?>
Como te darás cuenta el código consta de dos archivos ejem.php (muestra el formulario) y contacto.php (se encarga de mandar el email). Espero que esto te sirva de algo o por lo menos te de una idea. Suerte
  #10 (permalink)  
Antiguo 23/10/2006, 16:05
Borjimante
Invitado
 
Mensajes: n/a
Puntos:
funciona bien pero me sale este error al no completar algun campo:

Cita:
Warning: Cannot modify header information - headers already sent by (output started at /home/anteraso/public_html/contacto2.php:7) in /home/anteraso/public_html/contacto2.php on line 48
Como lo soluciono de tal manera que diga que hace falta completar algun campo?

Un saludo
  #11 (permalink)  
Antiguo 24/10/2006, 08:18
Avatar de Erikfrancisco  
Fecha de Ingreso: noviembre-2003
Ubicación: Estado de México
Mensajes: 503
Antigüedad: 20 años, 5 meses
Puntos: 4
Y exactamente ¿cual es el código completo de tu archivo contacto2.php? por que el que yo te puse no consta de 48 líneas y ahy te marca que tienes un error en esa línea.
  #12 (permalink)  
Antiguo 24/10/2006, 08:51
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 4 meses
Puntos: 129
Cita:
Iniciado por Erikfrancisco Ver Mensaje
Y exactamente ¿cual es el código completo de tu archivo contacto2.php? por que el que yo te puse no consta de 48 líneas y ahy te marca que tienes un error en esa línea.
Le habrá puesto más "HTML" por medio .. de hecho en la línea: 7 de contacto2.php es donde tiene el problema real .. Será algo de HTML .. o un echo "algo" .. o un simple espacio o salto de línea antes de <?

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #13 (permalink)  
Antiguo 25/10/2006, 13:17
Borjimante
Invitado
 
Mensajes: n/a
Puntos:
este es el codigo entero de la página para que veais el fallo

Cita:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Antera Solutions :: Diseño y desarrollo web a medida</title>
<meta name="title" content="Antera Solutions :: Diseño y desarrollo web a medida">
<meta name="Keywords" content="Diseño web, desarrollo web, diseño y desarrollo web, creacion de webs, promocion web, antera solutions, portfolio, web, servicios, empresa, española">
<meta name="Description" content="Empresa española que ofrece servicios de diseño y desarrollo web para cada cliente">
<meta name="author" content="Antera Solutions">
<meta name="revisit-after" content="15 days">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link href="index-2.css" rel="stylesheet" type="text/css">
</head>
<body>
<div id="header">
<div id="links-header"><a href="index.php" class="header">Espa&ntilde;ol</a> <span class="Estilo-idiomas">|</span> <a href="#" class="header">English</a></div>
</div>
<div id="cuerpo"><!-- Dejo abierto el DIV -->
<div id="barra-grande-arriba"><img src="imagenes/barra-arriba.jpg" width="700" height="20" alt="Barra-Abajo"></div>
<div id="texto">
<p><h1>CONTACTO</h1>
<?php
if( !empty ( $_POST['nombre'] ) && !empty ( $_POST['email'] ) && !empty ( $_POST['asunto'] ) && !empty ( $_POST['coment'] ) ) // aqui se compruebas todos los campos del formulario
{
// Estoy recibiendo el formulario, compongo el cuerpo

$cuerpo = "Formulario enviado desde la pagina web www.antera-solutions.com\n";
$cuerpo .= "Nombre: ".$_POST['nombre']."\n";
$cuerpo .= "Email: ".$_POST['email']."\n";
$cuerpo .= "Mensaje: ".$_POST['asunto']."\n";
$cuerpo .= "Mensaje: ".$HTTP_POST_VARS['coment']."\n";

//mando el correo...
mail( "[email protected]", "Formulario recibido", $cuerpo );

if ( mail )
{
//doy las gracias por el envío
echo "<p>Su pregunta se ha enviado correctamente, en breve recibira una respuesta.</p>";
}
else
{
echo "Ocurrio un error, no se pudo enviar el email";
}
}
else
{
header( "Location: contacto.php" );
}
?>
</div>
<div id="columna-izq">
<div class="left_nav">
<ul class="left_navlist">
<li><a href="index.php">Inicio</a></li>
<li><a href="portfolio.php">Portfolio</a></li>
<li><a href="servicios.php">Servicios</a></li>
<li><a href="empresa.php">Empresa</a></li>
<li><a href="mapa-web.php">Mapa Web</a></li>
<li><a href="enlaces.php">Enlaces</a></li>
<li><a href="contacto.php">Contacto</a></li>
</ul>
</div>
<p>&nbsp;</p>
<div id="oferta"align="center">
<br><h2>Oferta Dise&ntilde;o Web</h2><br>
<br><b>DISE&Ntilde;O WEB (4 P&Aacute;GINAS)</b><br>
<br><b>+</b><br>
<br><b>PAGINA CON FORMULARIO</b><br>
<br><b>+</b><br>
<br><b>DISE&Ntilde;O DE LOGO O BANNER</b><br>
<br><b>+</b><br>
<br><b>PRESENTACI&Oacute;N FLASH</b><br>
<br><b>=</b><br>
<br><b>100 EUROS</b><br>
<br><b><a href="oferta.php" class="link-oferta">VER MAS IMFORMACI&Oacute;N</a></b><br>
</div>
</div><!-- Cierro DIV Cuerpo -->
<div id="links" align="center">
<p><a href="servicios.php" class="link-bajo">Diseño web</a> | <a href="servicios.php" class="link-bajo">Desarrollo web</a> | <a href="servicios.php" class="link-bajo">Promocion en buscadores</a> | <a href="servicios.php" class="link-bajo">Creacion de webs</a> <a href="empresa.php" class="link-bajo">Empresa Española</a> | <a href="portfolio.php" class="link-bajo">Portfolio</a> | <a href="servicios.php" class="link-bajo">Servicios</a> | <a href="contacto.php" class="link-bajo">Contacto</a> | <a href="enlaces.php" class="link-bajo">Enlaces</a> | <a href="enlaces2.php" class="link-bajo">Otros enlaces</a></p>
</div>
<div id="barra-grande-abajo"><img src="imagenes/barra-abaja.jpg" width="700" height="20" alt="Barra-Abajo"></div>
</div>
<div id="bajo">
<span class="Estilo-idiomas">
<a href="http://validator.w3.org/check?uri=http%3A//www.antera-solutions.com/contacto2.php" class="bajo">HTML</a> | <a href="http://jigsaw.w3.org/css-validator/validator?uri=http://www.antera-solutions.com/contacto2.php" class="bajo">CSS</a> | <a href="#" class="bajo">Accesibilidad</a> | <a href="http://creativecommons.org/licenses/by-nc-nd/2.5/" class="bajo">Licencia</a><br>
&copy; <a href="http://www.antera-solutions.com" class="bajo">Antera Solutions</a> Dise&ntilde;o y Desarrollo web 2006 | optimizado por <a href="http://www.antera-solutions.com" class="bajo">Antera Solutions</a> | <a href="http://www.antera-solutions.com" class="bajo">Dise&ntilde;o y Desarrollo web</a></span></div>
</body>
</html>
  #14 (permalink)  
Antiguo 25/10/2006, 13:51
Avatar de Erikfrancisco  
Fecha de Ingreso: noviembre-2003
Ubicación: Estado de México
Mensajes: 503
Antigüedad: 20 años, 5 meses
Puntos: 4
Solo una pregunta ¿de donde sacaste esta línea?
Código PHP:
header"Location: contacto.php" ); // es tu supuesta línea 48 
Yo lo que te puse fue:
Código PHP:
header"Location: ejem.php" ); 
Porque se supone que redireccionamos hacia la página que contiene el formulario; amenos que, contacto.php sea la página que contiene el formulario pero... ¿si guardaste el archivo con ese nombre?, digo, se te pudo haber pasado guardar el archivo como ejem.php y quieres redireccionar a contacto.php pues no se podrá hacer ya que no existe ese archivo. Otra cosa, deberías de colocar todo ese código al principio del archivo, es decir, arriba de <HTML>. Suerte
  #15 (permalink)  
Antiguo 25/10/2006, 14:54
Borjimante
Invitado
 
Mensajes: n/a
Puntos:
esque lo redirigi a contacto.php por que guarde contacto.php en vez de ejemp.php de hay el cambio y eso esta todo correto entonces que puede fallar?
  #16 (permalink)  
Antiguo 25/10/2006, 16:32
 
Fecha de Ingreso: julio-2006
Ubicación: sevilla
Mensajes: 251
Antigüedad: 17 años, 10 meses
Puntos: 5
Si no quieres que el usuario tenga que rellenar el de nuevo los campos al equivocarse puedes usar una tabla tipo papelera donde vas almacenando los cmapso correctos de esta formas los puedes recargar en el formulario una vez cumplido todos los requisitos los grabas en la tablas de datos que sea de verdad y vacias la tabla papelera
  #17 (permalink)  
Antiguo 26/10/2006, 07:54
Borjimante
Invitado
 
Mensajes: n/a
Puntos:
claro osea yo quiero que se envie el formulario y sino rellena todos los campos vuelva atras pero siga escrito y lo quiero hacer pero que funcione bien. asique haber si alguien me puede hechar una duda me da igual que sea javascript que php o lo que sea pero que funcione bien
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 02:28.