Foros del Web » Programando para Internet » PHP »

problema con formulario

Estas en el tema de problema con formulario en el foro de PHP en Foros del Web. Hola, resulta que tengo hecho un formulario en html y el archivo php que hace que me funcione y me envié el mail con los ...
  #1 (permalink)  
Antiguo 05/04/2011, 17:05
 
Fecha de Ingreso: mayo-2006
Mensajes: 198
Antigüedad: 17 años, 11 meses
Puntos: 1
problema con formulario

Hola, resulta que tengo hecho un formulario en html y el archivo php que hace que me funcione y me envié el mail con los datos que el usuario haya puesto en el formulario. Ahora bien, tengo 2 cuestiones que quisiera resolver. En primer lugar, si no completo todos los datos requeridos, me sale un mensaje "complete los datos requeridos". Perfecto, pero quisiera que este mensaje me saliera en el mismo formulario, al pie y no como sucede, que carga una página en blanco que es la del arhivo php. ¿Como puedo lograrlo? La segunda cuestión es que quisiera que al igual que me sale ese mensaje si no se cargan todos los datos, quisiera que me salga un mensaje tipo "el formulario se envió correctamente" al enviarlo. ¿cómo se hace?

Les dejó el código que tengo y muchas gracias:

en el formulario html:

<!-- Formulario para completar con los datos -->

<form action="envia.php" method="POST">

<!--INICIO - Datos del formulario a completar -->
<table border="0" whidth="100%">
<tr>
<td align="rigth" width="19%"> Nombre: </td>
<td align="rigth" width="81%"> <input type="text" name="nombre" width="50" size=40></input><br/><br></td>
</tr>
<tr>
<td align="rigth" width="19%"> Apellido: </td>
<td align="rigth" width="81%"> <input type="text" name="apellido" width="50" size=40></input><br/><br></td>
</tr>
<tr>
<td align="rigth" width="19%"> Direccion: </td>
<td align="rigth" width="81%"> <input type="text" name="direccion" width="50" size=50></input><br/><br></td>
</tr>
<tr>
<td align="rigth" width="19%">Telefono: </td>
<td align="rigth" width="81%"><input type="text" name="telefono" width="50" size=40></input><br/><br></td>
</tr>
<tr>
<td align="rigth" width="19%">Email: </td>
<td align="rigth" width="81%"><input type="text" name="email" width="50" size=40></input><br/><br></td>
</tr>
<tr>
<td align="rigth" width="19%">Consulta:</td>
<td align="rigth" width="81%"> <textarea rows="9" name="consulta" cols="50"></textarea><br/><br></td>
</tr>


<!--FIN - Datos del formulario a completar -->
<tr>
<td width="19%"></td>
<td align="rigth" width="81%"> <input type="submit" value="Enviar e-mail" />
<input type="hidden" name="prioridad" value="3"/>
<input type="hidden" name="enviar" value="1"/></td>
</tr>
</table>
</form>
<!-- Fin Formulario para completar con los datos -->


Y en el archivo php:

<?php
$usersmtp ="[email protected]"; // Entre las comillas va una cuenta de correo de su panel de control
$pass="LIMASn4tos"; // Entre las comillas va el password de la cuenta de correo
$destino="[email protected]"; // Entre las comillas la direccion de correo donde va a recibir los mails

// Se verifica que los datos han sido enviados desde el formulario, para la validaci� con el SMTP
if ( $_POST['enviar'] == "1")
{
if ( $_POST['nombre'] != "" && $_POST['email'] != "" && $_POST['consulta'] != "" )

{
// Se incluye la librer� necesaria para el envio
require_once("fzo.mail.php");

$mail = new SMTP("localhost",$usersmtp,$pass);

// Se configuran los parametros necesarios para el env�
$de = $usersmtp;
$a = $destino;
$asunto = "E-mail Contacto web marcolimas";
$cc = $_POST['[email protected]'];
$bcc = $_POST['bcc'];


$cuerpo = "Este es un e-mail enviado desde el formulario de contacto de www.marcolimas.com.ar" . "\n";
$cuerpo .= "Nombre: " .$_POST['nombre'] . "\n";
$cuerpo .= "Telefono: " .$_POST['telefono'] . "\n";
$cuerpo .= "Email: " .$_POST['email'] . "\n";
$cuerpo .= "Consulta: " .$_POST['consulta'] . "\n";



$header = $mail->make_header(
$de,
$a,
$asunto,
$_POST['prioridad'],
$cc,
$bcc
);

/*
Pueden definirse m� encabezados. Tener en cuenta la terminaci� de la
linea con (\r\n)

$header .= "Reply-To: ".$_POST['from']." \r\n";
$header .= "Content-Type: text/plain; charset=\"iso-8859-1\" \r\n";
$header .= "Content-Transfer-Encoding: 8bit \r\n";
$header .= "MIME-Version: 1.0 \r\n";
*/

// Se envia el correo y se verifica el error
$error = $mail->smtp_send($de, $a, $header, $cuerpo, $cc, $bcc);
if ($error == "0")

header("Location: contacto.html");


else
echo $error;
}
else
{

echo("Complete los campos Requeridos");
}
}
?>
  #2 (permalink)  
Antiguo 05/04/2011, 18:20
Avatar de uikekarallo  
Fecha de Ingreso: diciembre-2009
Ubicación: Galicia
Mensajes: 338
Antigüedad: 14 años, 3 meses
Puntos: 16
Respuesta: problema con formulario

Hola, puedes utilizar JavaScript para mostrar un error si el formulario no valida correctamente, sin llegar a enviarlo.

En el PHP, haces la segunda comprobación (por si JS está desactivado o no hay). Si la pasa, envías y vuelves con un header('Location: /form.php?enviado=si'). Si no la pasa, la variable tendrá valor no.
En la página del form, debes recoger con un switch (o dos if) esa variable para mostrarla donde te convenga con el mensaje adecuado.


Un saludo.
  #3 (permalink)  
Antiguo 05/04/2011, 18:31
 
Fecha de Ingreso: mayo-2006
Mensajes: 198
Antigüedad: 17 años, 11 meses
Puntos: 1
Respuesta: problema con formulario

Gracias por contestar Uikekarallo. Te cuento que soy novato en todo esto. Los códigos los copié de un ejemplo y por suerte me funcionó pero me gustaría poder hacerle esas modificaciones. El tema es que entiendo muy poco del código. me podrás dar una mano con eso? Cómo iría y en qué parte?

Muchas gracias.
  #4 (permalink)  
Antiguo 05/04/2011, 18:44
Avatar de uikekarallo  
Fecha de Ingreso: diciembre-2009
Ubicación: Galicia
Mensajes: 338
Antigüedad: 14 años, 3 meses
Puntos: 16
Respuesta: problema con formulario

Nada hombre. No hay problema.

Te pongo el ejemplo sin utilizar JavaScript para la primera comprobación. Lo malo de esto, es que si no se envía, al volver al formulario, está en blanco y hay que volver a rellenarlo. Pero bueno, eso lo puedes mirar después.

Lo primero, tienes que cambiar la extensión de contacto.html por .php para poder recoger el mensaje de enviado o de error.

En el PHP sólo modifica el final, que te quede de esta manera:
Código PHP:

// Se envia el correo y se verifica el error

if( !$mail->smtp_send($de$a$header$cuerpo$cc$bcc) )
{
  
header('Location: /contacto.php?enviado=si');
  exit();
}
else
{
  
header('Location: /contacto.php?enviado=no');
  exit();


Ahora, en contacto.php recogemos la respuesta:
Código PHP:
// en la parte superior de la página, antes de cualquier etiqueta:

<?php
  
switch( @$_GET['enviado'] )
  {
    case 
'si'$mensaje '<p>Mensaje enviado</p>'; break;
    case 
'no'$mensaje '<p>Mensaje no enviado</p>'; break;
  }
?>
<!-- ahora ya sí irían las etiquetas <html><head></head><body> -->


<!-- donde quieras mostrar el mensaje de error, pones lo siguiente: -->

<?php echo $mensaje?>
Y con eso obtienes la respuesta del formulario.


Saludos.
  #5 (permalink)  
Antiguo 16/04/2011, 10:11
 
Fecha de Ingreso: mayo-2006
Mensajes: 198
Antigüedad: 17 años, 11 meses
Puntos: 1
Respuesta: problema con formulario

Muchas gracias por tu respuesta uikekarallo. Intenté hacer lo que me indicas pero no me está saliendo. Cambie la última línea del php (envia.php) como me indicaste y luego le agregué los códigos al formulario contacto.html y lo guardé como php, con lo cual quedó contacto.php. Te copio los códigos a ver si me podes indicar dónde lo hice mal. Disculpá lo largo del código, resalte los agregados que me indicaste.

Muchísimas gracias por tu ayuda.

envia.php:

<?php
$usersmtp ="[email protected]"; // Entre las comillas va una cuenta de correo de su panel de control
$pass="LIMASn4tos"; // Entre las comillas va el password de la cuenta de correo
$destino="[email protected]"; // Entre las comillas la direccion de correo donde va a recibir los mails

// Se verifica que los datos han sido enviados desde el formulario, para la validaci� con el SMTP
if ( $_POST['enviar'] == "1")
{
if ( $_POST['nombre'] != "" && $_POST['email'] != "" && $_POST['consulta'] != "" )

{
// Se incluye la librer� necesaria para el envio
require_once("fzo.mail.php");

$mail = new SMTP("localhost",$usersmtp,$pass);

// Se configuran los parametros necesarios para el env�
$de = $usersmtp;
$a = $destino;
$asunto = "E-mail Contacto web marcolimas";
$cc = $_POST['[email protected]'];
$bcc = $_POST['bcc'];


$cuerpo = "Este es un e-mail enviado desde el formulario de contacto de www.marcolimas.com.ar" . "\n";
$cuerpo .= "Nombre: " .$_POST['nombre'] . "\n";
$cuerpo .= "Telefono: " .$_POST['telefono'] . "\n";
$cuerpo .= "Email: " .$_POST['email'] . "\n";
$cuerpo .= "Consulta: " .$_POST['consulta'] . "\n";



$header = $mail->make_header(
$de,
$a,
$asunto,
$_POST['prioridad'],
$cc,
$bcc
);

/*
Pueden definirse m� encabezados. Tener en cuenta la terminaci� de la
linea con (\r\n)

$header .= "Reply-To: ".$_POST['from']." \r\n";
$header .= "Content-Type: text/plain; charset=\"iso-8859-1\" \r\n";
$header .= "Content-Transfer-Encoding: 8bit \r\n";
$header .= "MIME-Version: 1.0 \r\n";
*/

// Se envia el correo y se verifica el error
Código PHP:
Ver original
  1. if( !$mail->smtp_send($de, $a, $header, $cuerpo, $cc, $bcc) )
  2. {
  3.   header('Location: /contacto.php?enviado=si');
  4.   exit();
  5. }
  6. else
  7. {
  8.   header('Location: /contacto.php?enviado=no');
  9.   exit();
  10. }
?>



Contacto.php:

Código PHP:
Ver original
  1. <?php
  2.   switch( @$_GET['enviado'] )
  3.   {
  4.     case 'si': $mensaje = '<p>Mensaje enviado</p>'; break;
  5.     case 'no': $mensaje = '<p>Mensaje no enviado</p>'; break;
  6.   }
  7. ?>
<!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>Marco Limas</title>
<style type="text/css">
<!--
Código HTML:
Ver original
  1. ACA VAN TODOS LOS DETALLES DE LAS ETIQUETAS QUE LOS SAQUE DE AQUI PARA QUE NO SEA TAN LARGO EL CODIGO
</style>
<script type="text/javascript">
<!--
function MM_findObj(n, d) { //v4.01
var p,i,x; if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
if(!x && d.getElementById) x=d.getElementById(n); return x;
}
function MM_preloadImages() { //v3.0
var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}
function MM_swapImgRestore() { //v3.0
var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}
function MM_swapImage() { //v3.0
var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}
//-->
</script>
<script src="Scripts/AC_RunActiveContent.js" type="text/javascript"></script>
</head>

<body onload="MM_preloadImages('../Home/bio O.png','../Home/Música O.png','../Home/Texto O.png','../Home/proyectos O.png','../Home/Visuales O.png','../Home/Agenda O.png','../Home/Contactos O.png','../Home/prensa O.png','../Texto/una maleta O.jpg','../Texto/otros poemas O.png','facebook O.png','myspace O.png','you tube O.png','../Música/home O.png')">
<table width="950" height="565" border="0" align="center" background="../Home/Fondo Home.jpg">
<tr>
<td><div style="position:relative; width:950; height:555px; margin: 0 auto;">
<div id="apDiv4"><a href="../Música/Música.html" onmouseout="MM_swapImgRestore()" onmouseover="MM_swapImage('música','','../Home/Música O.png',1)"><img src="../Home/Música.png" name="música" width="68" height="15" border="0" id="música" /></a></div>
<div id="apDiv2"><a href="../Bio/Bio.html" onmouseout="MM_swapImgRestore()" onmouseover="MM_swapImage('Bio','','../Home/bio O.png',1)"><img src="../Home/bio.png" name="Bio" width="30" height="15" border="0" id="Bio" /></a></div>
<div id="apDiv3"><img src="../Texto/leyendo.png" alt="Marco Limas leyendo" width="171" height="378" />
<div id="apDiv16"><a href="../Home/Home.html" onmouseout="MM_swapImgRestore()" onmouseover="MM_swapImage('home','','../Música/home O.png',1)"><img src="../Música/home.png" name="home" width="35" height="30" border="0" id="home" /></a></div>
</div>
<div id="apDiv"><a href="../Texto/Texto.html" onmouseout="MM_swapImgRestore()" onmouseover="MM_swapImage('texto','','../Home/Texto O.png',1)"><img src="../Home/Texto.png" name="texto" width="67" height="18" border="0" id="texto" /></a></div>
<div id="apDiv8"><a href="#" onmouseout="MM_swapImgRestore()" onmouseover="MM_swapImage('visuales','','../Home/Visuales O.png',1)"><img src="../Home/Visuales.png" name="visuales" width="96" height="19" border="0" id="visuales" /></a></div>
<div id="apDiv6">
<!-- Formulario para completar con los datos -->

<form action="envia.php" method="POST">

<!--INICIO - Datos del formulario a completar -->
<table border="0" whidth="100%">
<tr>
<td align="rigth" width="19%"> *Nombre: </td>
<td align="rigth" width="81%"> <input type="text" name="nombre" width="50" size=40></input><br/><br></td>
</tr>
<tr>
<td align="rigth" width="19%">Telefono: </td>
<td align="rigth" width="81%"><input type="text" name="telefono" width="50" size=40></input><br/><br></td>
</tr>
<tr>
<td align="rigth" width="19%">*Email: </td>
<td align="rigth" width="81%"><input type="text" name="email" width="50" size=40></input><br/><br></td>
</tr>
<tr>
<td align="rigth" width="19%">*Consulta:</td>
<td align="rigth" width="81%"> <textarea rows="9" name="consulta" cols="40"></textarea>
<br/>
<br />
* Campos Obligadorios<br></td>
</tr>


<!--FIN - Datos del formulario a completar -->
<tr>
<td width="19%"></td>
<td align="rigth" width="81%"><br />
<input type="submit" value="Enviar e-mail" />
<input type="hidden" name="prioridad" value="3"/>
<input type="hidden" name="enviar" value="1"/></td>
</tr>
<tr>
<td width="19%"></td>
<td align="rigth" width="81%"><br />
Código PHP:
Ver original
  1. <?php echo $mensaje; ?>
</td>
</tr>
</table>
</form>
<!-- Fin Formulario para completar con los datos -->
</div>
<div id="apDiv9"><a href="#" onmouseout="MM_swapImgRestore()" onmouseover="MM_swapImage('proyectos','','../Home/proyectos O.png',1)"><img src="../Home/proyectos.png" name="proyectos" width="109" height="23" border="0" id="proyectos" /></a></div>
<div id="apDiv10"><a href="#" onmouseout="MM_swapImgRestore()" onmouseover="MM_swapImage('agenda','','../Home/Agenda O.png',1)"><img src="../Home/Agenda.png" name="agenda" width="81" height="19" border="0" id="agenda" /></a></div>
<div id="apDiv11"><a href="Contacto.html"><img src="../Home/cto O.png" alt="contacto O" width="26" height="15" /></a></div>
<div class="style13" id="apDiv5"><a href="mailto:[email protected]">prensa@limasw eb.com.ar</a></div>
<div id="apDiv12"><a href="#" onmouseout="MM_swapImgRestore()" onmouseover="MM_swapImage('prensa','','../Home/prensa O.png',1)"><img src="../Home/prensa.png" name="prensa" width="75" height="19" border="0" id="prensa" /></a></div>
<div class="style13" id="apDiv7"><a href="mailto:[email protected]">info@marcolim as.com.ar</a></div>
<div id="apDiv13"><a href="http://www.facebook.com/search.php?q=Limas+Encuartos&amp;type=users" onmouseout="MM_swapImgRestore()" onmouseover="MM_swapImage('face','','facebook O.png',1)"><img src="facebook.png" name="face" width="37" height="37" border="0" id="face" /></a></div>
<div id="apDiv14"><a href="http://www.myspace.com/marcolimas" onmouseout="MM_swapImgRestore()" onmouseover="MM_swapImage('myspace','','myspace O.png',1)"><img src="myspace.png" name="myspace" width="37" height="37" border="0" id="myspace" /></a></div>
<div id="apDiv15"><a href="http://www.youtube.com/user/limasencuartos?feature=mhum" onmouseout="MM_swapImgRestore()" onmouseover="MM_swapImage('youtube','','you tube O.png',1)"><img src="you tube.png" name="youtube" width="96" height="39" border="0" id="youtube" /></a></div>
</div> </td>
</tr>
</table>
</body>
</html>
  #6 (permalink)  
Antiguo 16/04/2011, 10:44
Avatar de uikekarallo  
Fecha de Ingreso: diciembre-2009
Ubicación: Galicia
Mensajes: 338
Antigüedad: 14 años, 3 meses
Puntos: 16
Respuesta: problema con formulario

¿PHP te devuelve algún error? Si lo que ocurre es que al enviar el correo no vuelves a contacto.php fíjate que en header('Location: /contacto.php?enviado=si'); hay una barra antes del nombre de archivo. Esa barra hace que busque el archivo en la raíz del sitio. Esto es, si contacto.php esta en raíz/formulario/ no lo encontrará y de ahí que no funcione. Si tienes todos los archivos en el mismo directorio, quita la / y prueba de nuevo.

Por lo que veo parece estar todo en su sitio. Probablemente ese sea el error.
  #7 (permalink)  
Antiguo 16/04/2011, 12:54
 
Fecha de Ingreso: mayo-2006
Mensajes: 198
Antigüedad: 17 años, 11 meses
Puntos: 1
Respuesta: problema con formulario

Sí, me sale el siguiente error PHP:

Parse error: syntax error, unexpected $end in \\hmfsw\web\dtc002\marcolimas.com.ar\public_html\e nvia.php on line 65

Los 2 archivos están en el mismo directorio (que es la raíz de la web). Le saqué la / pero me sigue saliendo ese error.

Gracias por la ayuda.
  #8 (permalink)  
Antiguo 16/04/2011, 16:51
Avatar de uikekarallo  
Fecha de Ingreso: diciembre-2009
Ubicación: Galicia
Mensajes: 338
Antigüedad: 14 años, 3 meses
Puntos: 16
Respuesta: problema con formulario

Viendo el error, parece que te falta un cierre (}) en algún lado. Comprueba que se cierran correctamente los if del principio.

Código PHP:
Ver original
  1. if ( $_POST['enviar'] == "1")
  2. {
  3. if ( $_POST['nombre'] != "" && $_POST['email'] != "" && $_POST['consulta'] != "" )
  4.  
  5. {
  #9 (permalink)  
Antiguo 17/04/2011, 09:50
 
Fecha de Ingreso: mayo-2006
Mensajes: 198
Antigüedad: 17 años, 11 meses
Puntos: 1
Respuesta: problema con formulario

Cada vez más cerca. Corregí el código agregando el cierre } que faltaba y ahora me funciona cuando completo los campos de texto que hay que completar y me aparece mensaje enviado, todo bien. Pero cuando no completo alguno de los campos de texto parece que no funciona. Me lleva al php (envia.php) que aparece en blanco, sin ningún mensaje. Te copio el código para ver si encontras un error al respecto.

Muchas gracias!!

<?php
$usersmtp ="[email protected]"; // Entre las comillas va una cuenta de correo de su panel de control
$pass="LIMASn4tos"; // Entre las comillas va el password de la cuenta de correo
$destino="[email protected]"; // Entre las comillas la direccion de correo donde va a recibir los mails

// Se verifica que los datos han sido enviados desde el formulario, para la validaci� con el SMTP
if ( $_POST['enviar'] == "1" && $_POST['nombre'] != "" && $_POST['email'] != "" && $_POST['consulta'] != "" )

{
// Se incluye la librer� necesaria para el envio
require_once("fzo.mail.php");

$mail = new SMTP("localhost",$usersmtp,$pass);

// Se configuran los parametros necesarios para el env�
$de = $usersmtp;
$a = $destino;
$asunto = "E-mail Contacto web marcolimas";
$cc = $_POST['[email protected]'];
$bcc = $_POST['bcc'];
$cuerpo = "Este es un e-mail enviado desde el formulario de contacto de www.marcolimas.com.ar" . "\n";
$cuerpo .= "Nombre: " .$_POST['nombre'] . "\n";
$cuerpo .= "Telefono: " .$_POST['telefono'] . "\n";
$cuerpo .= "Email: " .$_POST['email'] . "\n";
$cuerpo .= "Consulta: " .$_POST['consulta'] . "\n";
$header = $mail->make_header(
$de,
$a,
$asunto,
$_POST['prioridad'],
$cc,
$bcc
);

/*
Pueden definirse m� encabezados. Tener en cuenta la terminaci� de la
linea con (\r\n)

$header .= "Reply-To: ".$_POST['from']." \r\n";
$header .= "Content-Type: text/plain; charset=\"iso-8859-1\" \r\n";
$header .= "Content-Transfer-Encoding: 8bit \r\n";
$header .= "MIME-Version: 1.0 \r\n";
*/

// Se envia el correo y se verifica el error

if( !$mail->smtp_send($de, $a, $header, $cuerpo, $cc, $bcc) )
{
header('Location: contacto.php?enviado=si');
exit();
}
else
{
header('Location: contacto.php?enviado=no');
exit();
}
}
?>
  #10 (permalink)  
Antiguo 17/04/2011, 13:36
Avatar de uikekarallo  
Fecha de Ingreso: diciembre-2009
Ubicación: Galicia
Mensajes: 338
Antigüedad: 14 años, 3 meses
Puntos: 16
Respuesta: problema con formulario

Tú le dices que envíe el mail si sucede lo siguiente:

Código PHP:
Ver original
  1. if ( $_POST['enviar'] == "1" && $_POST['nombre'] != "" && $_POST['email'] != "" && $_POST['consulta'] != "" )

Pero no le indicas qué hacer en caso de que eso no suceda.

Código PHP:
Ver original
  1. else
  2. {
  3.   header('Location: /contacto.php?enviado=no');
  4.   exit();
  5. }
  #11 (permalink)  
Antiguo 17/04/2011, 14:21
 
Fecha de Ingreso: mayo-2006
Mensajes: 198
Antigüedad: 17 años, 11 meses
Puntos: 1
Respuesta: problema con formulario

A ver...con los códigos que yo tenía al principio en php y el formulario en html me enviaba el formulario y no me indicaba el envío como logré hacerlo con lo que indicaste pero sí me avisaba cuando faltaba completar datos, que es lo que ahora no está ocurriendo. Yo tenía este código:

Código PHP:
Ver original
  1. // Se envia el correo y se verifica el error
  2. $error = $mail->smtp_send($de, $a, $header, $cuerpo, $cc, $bcc);
  3. if ($error == "0")
  4.  
  5. header("Location: contacto.html");
  6.  
  7.  
  8. else
  9. echo $error;
  10. }
  11. else
  12. {
  13.  
  14. echo("Complete los campos Requeridos");
  15. }
  16. }


que es el que reemplacé con lo que me indicaste:

Código PHP:
Ver original
  1. if( !$mail->smtp_send($de, $a, $header, $cuerpo, $cc, $bcc) )
  2. {
  3. header('Location: contacto.php?enviado=si');
  4. exit();
  5. }
  6. else
  7. {
  8. header('Location: contacto.php?enviado=no');
  9. exit();
  10. }

¿tengo que meter parte del código que tenía antes para que me de error si falta completar algún campo del formulario? Lo intento pero nada.

Muchas gracias!
  #12 (permalink)  
Antiguo 17/04/2011, 14:29
Avatar de uikekarallo  
Fecha de Ingreso: diciembre-2009
Ubicación: Galicia
Mensajes: 338
Antigüedad: 14 años, 3 meses
Puntos: 16
Respuesta: problema con formulario

Igual no me expliqué con claridad. Le dices qué hacer si falla el envío del mail, pero no le dices qué hacer si faltan los datos. Mira:

Código PHP:
Ver original
  1. <?php
  2. $usersmtp ="[email protected]";
  3. $pass="LIMASn4tos";
  4. $destino="[email protected]";
  5.  
  6.  // aquí le dices qué hacer si todo está en orden:
  7. if ( $_POST['enviar'] == "1" && $_POST['nombre'] != "" && $_POST['email'] != "" && $_POST['consulta'] != "" )
  8.  
  9. {
  10.  
  11. require_once("fzo.mail.php");
  12.  
  13. $mail = new SMTP("localhost",$usersmtp,$pass);
  14.  
  15.  
  16. $de = $usersmtp;
  17. $a = $destino;
  18. $asunto = "E-mail Contacto web marcolimas";
  19. $cc = $_POST['[email protected]'];
  20. $bcc = $_POST['bcc'];
  21. $cuerpo = "Este es un e-mail enviado desde el formulario de contacto de www.marcolimas.com.ar" . "\n";
  22. $cuerpo .= "Nombre: " .$_POST['nombre'] . "\n";
  23. $cuerpo .= "Telefono: " .$_POST['telefono'] . "\n";
  24. $cuerpo .= "Email: " .$_POST['email'] . "\n";
  25. $cuerpo .= "Consulta: " .$_POST['consulta'] . "\n";
  26. $header = $mail->make_header(
  27. $de,
  28. $a,
  29. $asunto,
  30. $_POST['prioridad'],
  31. $cc,
  32. $bcc
  33. );
  34.  
  35. /*
  36. $header .= "Reply-To: ".$_POST['from']." \r\n";
  37. $header .= "Content-Type: text/plain; charset=\"iso-8859-1\" \r\n";
  38. $header .= "Content-Transfer-Encoding: 8bit \r\n";
  39. $header .= "MIME-Version: 1.0 \r\n";
  40. */
  41.  
  42.  
  43.  
  44. if( !$mail->smtp_send($de, $a, $header, $cuerpo, $cc, $bcc) )
  45. {
  46. header('Location: contacto.php?enviado=si');
  47. exit();
  48. }
  49. else
  50. {
  51. header('Location: contacto.php?enviado=no');
  52. exit();
  53. }
  54. // pero aquí acabas el script sin decirle qué hacer si no es así.
  55. }
  56. // podrías decirle que haga lo mismo que cuando falla el envío:
  57. else
  58. {
  59.   header('Location: contacto.php?enviado=no');
  60.   exit();
  61. }
  62. ?>
  #13 (permalink)  
Antiguo 17/04/2011, 15:29
 
Fecha de Ingreso: mayo-2006
Mensajes: 198
Antigüedad: 17 años, 11 meses
Puntos: 1
Respuesta: problema con formulario

Me parece que no me expliqué bien yo. Con el código como lo tengo ahora el formulario responde ante el envío correcto, cuando están completos los campos de nombre, email y consulta. Y al enviarlo me aparece "mensaje enviado" en el mismo "contacto.php". Ahora bien, si alguno de esos campos no están completos no lo envía y además no me aparece "mensaje no enviado" en contacto.php sino que me salta a envia.php con la pantalla en blanco. Con lo cual creo que no está funcionando bien esa parte...

Te copio la dirección donde tengo subido el formulario por si ayuda a resolver la cuestión: http://www.marcolimas.com.ar/Contacto.php

Gracias una vez más.
  #14 (permalink)  
Antiguo 17/04/2011, 15:40
Avatar de KoswiDigital  
Fecha de Ingreso: abril-2011
Ubicación: Galicia - España
Mensajes: 220
Antigüedad: 13 años
Puntos: 37
Respuesta: problema con formulario

Hombre, igual estoy despistado, pero creo que es a lo que me refería. Recapitulemos:

Cita:
1) Estás englobando todo el código dentro de ese primer condicional. Le dices: si esto es de esta manera, continúa.

1.1) Una vez dentro del if, si se envía el email, vuelve a contacto.php con la variable enviado=si

1.2) Si no se envía, vuelve a contacto.php con la variable enviado=no

2) Aquí se acaba ese condicional if. Y también se acaba el script. Por lo que no estamos indicando qué hacer en caso de que el if no se cumpla. Por lo que al cerrar este último condicional, deberás indicarle qué hacer en caso de que no se cumpla, de esta manera:
Código PHP:
Ver original
  1. <?php
  2. $usersmtp ="xxxxxxx";
  3. $pass="xxxxxxxxx";
  4. $destino="[email protected]";
  5.  
  6. if ( $_POST['enviar'] == "1" && $_POST['nombre'] != "" && $_POST['email'] != "" && $_POST['consulta'] != "" )
  7.  
  8. {
  9.  
  10. require_once("fzo.mail.php");
  11.  
  12. $mail = new SMTP("localhost",$usersmtp,$pass);
  13.  
  14.  
  15. $de = $usersmtp;
  16. $a = $destino;
  17. $asunto = "E-mail Contacto web marcolimas";
  18. $cc = $_POST['[email protected]'];
  19. $bcc = $_POST['bcc'];
  20. $cuerpo = "Este es un e-mail enviado desde el formulario de contacto de www.marcolimas.com.ar" . "\n";
  21. $cuerpo .= "Nombre: " .$_POST['nombre'] . "\n";
  22. $cuerpo .= "Telefono: " .$_POST['telefono'] . "\n";
  23. $cuerpo .= "Email: " .$_POST['email'] . "\n";
  24. $cuerpo .= "Consulta: " .$_POST['consulta'] . "\n";
  25. $header = $mail->make_header(
  26. $de,
  27. $a,
  28. $asunto,
  29. $_POST['prioridad'],
  30. $cc,
  31. $bcc
  32. );
  33.  
  34. /*
  35. $header .= "Reply-To: ".$_POST['from']." \r\n";
  36. $header .= "Content-Type: text/plain; charset=\"iso-8859-1\" \r\n";
  37. $header .= "Content-Transfer-Encoding: 8bit \r\n";
  38. $header .= "MIME-Version: 1.0 \r\n";
  39. */
  40.  
  41.  
  42.  
  43. if( !$mail->smtp_send($de, $a, $header, $cuerpo, $cc, $bcc) )
  44. {
  45. header('Location: contacto.php?enviado=si');
  46. exit();
  47. }
  48. else
  49. {
  50. header('Location: contacto.php?enviado=no');
  51. exit();
  52. }
  53. }
  54. else
  55. {
  56.   header('Location: contacto.php?enviado=no');
  57.   exit();
  58. }
  59. ?>

Prueba así. Por lo que veo no nos explicamos mal ninguno de los dos... Simplemente no nos entendemos Un saludo.
__________________
http://www.koswidigital.com - Diseño web, Programación web, Fotografía profesional, Retoque digital.
  #15 (permalink)  
Antiguo 18/04/2011, 17:01
 
Fecha de Ingreso: mayo-2006
Mensajes: 198
Antigüedad: 17 años, 11 meses
Puntos: 1
Respuesta: problema con formulario

Gracias!! Funciona. Yo te había entendido, probé hacerlo y no me funcionó. Probablemente algún } estaba faltando o que se yo. Pero por suerte ahora me funciona y ya estoy más que conforme con esto, pero ya que estamos te hago una consulta más.
Cuando falta completar algún campo en lugar de que me salga "mensaje no enviado" le puse que salga "Faltan completar algunos campos". Ahora bien, ¿es posible que al regresar a contacto.php en lugar de que me limpie todos los campos queden escritos los que se habían completado? Yo le agregué un javascript pero no me está funcionando. En lugar de exit () le pongo "javascript:history.back(1)". Pero seguramente lo estoy haciendo mal.

Saludos.
  #16 (permalink)  
Antiguo 19/04/2011, 04:02
Avatar de KoswiDigital  
Fecha de Ingreso: abril-2011
Ubicación: Galicia - España
Mensajes: 220
Antigüedad: 13 años
Puntos: 37
Respuesta: problema con formulario

Podrías hacerlo de la siguiente manera:

Código PHP:
Ver original
  1. if( !$mail->smtp_send($de, $a, $header, $cuerpo, $cc, $bcc) )
  2. {
  3. echo '<script type="text/javascript">alert("mensaje no enviado"); window.back();</script>';
  4. exit();
  5. }
  6. else
  7. {
  8. echo '<script type="text/javascript">location.href = "contacto.php?enviado=si";</script>';
  9. exit();
  10. }
  11. }
  12. else
  13. {
  14.   echo '<script type="text/javascript">alert("mensaje no enviado"); window.back();</script>';
  15.   exit();
  16. }


Saludos.
__________________
http://www.koswidigital.com - Diseño web, Programación web, Fotografía profesional, Retoque digital.
  #17 (permalink)  
Antiguo 06/05/2011, 10:45
 
Fecha de Ingreso: mayo-2006
Mensajes: 198
Antigüedad: 17 años, 11 meses
Puntos: 1
Respuesta: problema con formulario

Me demoré un poco en hacerlo, pero finalmente le cambié por este último código y no me funciona bien. En cualquier caso me sale el cartelito de "Mensaje no enviado", esten los campos completos o no. Y luego al clickear en aceptar se queda en envia.php en lugar de volver a contacto.php.
¿Puede ser que esté algo mal en el código?

Muchas gracias.
  #18 (permalink)  
Antiguo 06/05/2011, 11:07
Avatar de KoswiDigital  
Fecha de Ingreso: abril-2011
Ubicación: Galicia - España
Mensajes: 220
Antigüedad: 13 años
Puntos: 37
Respuesta: problema con formulario

No sé si en tu código está algo mal o no... En todo caso, antes de utilizar javascript te funcionaba. Ahora, si sale el mensaje de no enviado, es porque hay un error en el envío. Respecto al javascript, prueba utilizando history.go(-2) en lugar de window.back();

Además, en el primer if donde indicamos qué hacer si no se envía, puedes decirle que te muestre el error dentro del alert, del siguiente modo:

Código PHP:
Ver original
  1. alert("mensaje no enviado\nError: '.$mail->errorInfo.'");
__________________
http://www.koswidigital.com - Diseño web, Programación web, Fotografía profesional, Retoque digital.
  #19 (permalink)  
Antiguo 06/05/2011, 13:28
 
Fecha de Ingreso: mayo-2006
Mensajes: 198
Antigüedad: 17 años, 11 meses
Puntos: 1
Respuesta: problema con formulario

Tuve que cambiar el orden y ahora funciona. Primero qué hacer en caso de que envíe, segundo, en el caso de no enviar y tercero en caso de que falten completar campos. Por otra parte cambié, en lugar de window.back(), puse history.back(1). Ahora, con el código que me mandaste, ¿Es posible que me informe en el error que hace falta completar cambios en el último if? Poniendo el código que me indicas me sale solo error.
Muchas gracias por tu gran ayuda.

if( !$mail->smtp_send($de, $a, $header, $cuerpo, $cc, $bcc) )
{
echo '<script type="text/javascript">location.href = "contacto.php?enviado=si";</script>';
exit();
}
else
{
echo '<script type="text/javascript">alert("Mensaje no enviado."); javascript:history.back(1);</script>';
exit();
}
}
else
{
echo '<script type="text/javascript">alert("Mensaje no enviado.\nError: '.$mail->errorInfo.'"); javascript:history.back(1);</script>';
exit();
}
  #20 (permalink)  
Antiguo 06/05/2011, 13:42
Avatar de KoswiDigital  
Fecha de Ingreso: abril-2011
Ubicación: Galicia - España
Mensajes: 220
Antigüedad: 13 años
Puntos: 37
Respuesta: problema con formulario

Pensaba que estabas utilizando la clase phpmailer. $mail->errorInfo; no te va a funcionar.
Tal cual está ese código que muestras, indica (por orden):

1) si el mail no se envía, vete a la página contacto.php?enviado=si
2) si se envía, avisa de que no se ha enviado y vuelve a la página anterior
3) si el script llega hasta este punto, el mensaje no se ha enviado y vuelvo a la página anterior

Entonces me pregunto, ¿cómo puede ser que te funcione? En el if, el condicional ! indica negación. Traducido es "si esto no ocurre...". Por lo que lo lógico sería pasar el punto 2 al 1 y viceversa.
__________________
http://www.koswidigital.com - Diseño web, Programación web, Fotografía profesional, Retoque digital.
  #21 (permalink)  
Antiguo 06/05/2011, 18:04
 
Fecha de Ingreso: mayo-2006
Mensajes: 198
Antigüedad: 17 años, 11 meses
Puntos: 1
Respuesta: problema con formulario

Como en el orden que me enviaste vos no me funcionaba. Es decir, indefectiblemente hacía lo que indica en el tercer if y nunca me enviaba al formulario, aunque esté todo completo, me fije que antes cuando ponía los headers el orden era en primer lugar que hacer si el formulario estaba bien y luego qué hacer en caso que no lo estuviera. Y entonces cambié el 1 x el 2 y ahora me funciona. No se nada de php, yo pensé que el if era el primero que hacer si estaba bien, y si no se cumplía, pasaba al segundo. Por lo visto según lo que me decís es al revés. Yo tampoco me explico cómo funciona entonces pero lo podés ver en http://www.marcolimas.com.ar/Contacto/contacto.php

Gracias.
  #22 (permalink)  
Antiguo 06/05/2011, 20:34
Avatar de KoswiDigital  
Fecha de Ingreso: abril-2011
Ubicación: Galicia - España
Mensajes: 220
Antigüedad: 13 años
Puntos: 37
Respuesta: problema con formulario

Bueno, algo debe estar ahí raro. Pero si funciona y te sirve, lo damos por solucionado.

Un saludo ^^
__________________
http://www.koswidigital.com - Diseño web, Programación web, Fotografía profesional, Retoque digital.
  #23 (permalink)  
Antiguo 08/05/2011, 11:05
 
Fecha de Ingreso: mayo-2006
Mensajes: 198
Antigüedad: 17 años, 11 meses
Puntos: 1
Respuesta: problema con formulario

Perfecto. Muchísimas gracias por tu ayuda.
  #24 (permalink)  
Antiguo 09/05/2011, 04:02
Avatar de KoswiDigital  
Fecha de Ingreso: abril-2011
Ubicación: Galicia - España
Mensajes: 220
Antigüedad: 13 años
Puntos: 37
Respuesta: problema con formulario

No hay de qué. Suerte :)
__________________
http://www.koswidigital.com - Diseño web, Programación web, Fotografía profesional, Retoque digital.
  #25 (permalink)  
Antiguo 09/05/2011, 13:14
 
Fecha de Ingreso: mayo-2006
Mensajes: 198
Antigüedad: 17 años, 11 meses
Puntos: 1
Respuesta: problema con formulario

No quisiera abusar de tu ayuda, pero de pesado nomás te hago una consulta más. ¿habrá alguna forma de vincular el formulario con algún archivo de excel o algo similar para generar una base de datos con todas las consultas?

Gracias.
  #26 (permalink)  
Antiguo 10/05/2011, 03:52
Avatar de KoswiDigital  
Fecha de Ingreso: abril-2011
Ubicación: Galicia - España
Mensajes: 220
Antigüedad: 13 años
Puntos: 37
Respuesta: problema con formulario

Hombre, para exportar a excel habría que poner los datos en una tabla y exportarla a excel a través de php. En realidad no es muy complicado, excepto porque tienes que tabular los datos.

Igual, más sencillo sería utilizar una base de datos mysql y guardar todos los datos en el servidor. Así, además, no tienes un archivo excel por cada consulta.

Y lo óptimo serían ambas opciones, primero guardar las consultas en mysql y luego crear un pequeño panel donde poder guardar los datos recogidos previamente de mysql y exportarlos a excel.

En todo caso, aquí te dejo un link para lo que pides: http://www.webintenta.com/exportar-tablas-html-a-excel-con-php-y-jquery.html

Para insertar los datos de ese formulario en mysql, tendrás que crear una base de datos y una tabla en ella, y luego añadir un par de líneas más a tu código.

Lo que sea, aquí estamos. Un saludo.
__________________
http://www.koswidigital.com - Diseño web, Programación web, Fotografía profesional, Retoque digital.
  #27 (permalink)  
Antiguo 10/05/2011, 10:07
 
Fecha de Ingreso: mayo-2006
Mensajes: 198
Antigüedad: 17 años, 11 meses
Puntos: 1
Respuesta: problema con formulario

Bien, voy a estudiar un poco lo que me mandás y cualquier cosa te vuelvo a consultar.

Muchas gracias nuevamente por tu ayuda.

Etiquetas: formulario
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 15:04.