Foros del Web » Programando para Internet » PHP »

Formulario en PHP

Estas en el tema de Formulario en PHP en el foro de PHP en Foros del Web. Ya había comentado unos inconvenientes para que un formulario funcione, pero intenté saber si desde el hosting necesitaban alguna configuración especial..pero me parece que no ...
  #1 (permalink)  
Antiguo 26/01/2009, 10:19
 
Fecha de Ingreso: agosto-2007
Mensajes: 114
Antigüedad: 16 años, 8 meses
Puntos: 1
Exclamación Formulario en PHP

Ya había comentado unos inconvenientes para que un formulario funcione, pero intenté saber si desde el hosting necesitaban alguna configuración especial..pero me parece que no saben nada de PHP.
Así que vuelvo a ver si esta vez puedo lograr algo.
Cuando envío el formulario me aparece como error:
Código PHP:
Notice: Use of undefined constant sendmail_from assumed 'sendmail_from' in C:Inetpubftprootmidominiosendform.php on line 46

Warning
mail() [function.mail]: Failed to connect to mailserver at "localhost" port 25verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() in C:Inetpubftprootmidominiosendform.php on line 47 
Alguien me puede ayudar para ver si me falta configuración o qué?
Gracias
  #2 (permalink)  
Antiguo 26/01/2009, 10:21
Avatar de vicram10  
Fecha de Ingreso: enero-2009
Ubicación: Asuncion
Mensajes: 326
Antigüedad: 15 años, 3 meses
Puntos: 27
Respuesta: Formulario en PHP

cual es el codigo de tu formulario, creo que mirando el codigo, podran encontrar la falla o error

salu2
  #3 (permalink)  
Antiguo 26/01/2009, 10:29
Avatar de ToLeR  
Fecha de Ingreso: noviembre-2008
Ubicación: Laboratorio La Ratonera
Mensajes: 48
Antigüedad: 15 años, 5 meses
Puntos: 1
Respuesta: Formulario en PHP

Ese error correspondode a la funcion mail() de php.

Si estas ejecutando ese script desde el servidor remoto, revisa los parametros de la funcion mail, ya que uno hace referencia a "localhost" cuando se refiere al servidor de correo.

mailserver at "localhost"

Y localhost no servira para trabajar en el servidor remoto.

Pero si de todas formas es mejor ver el codigo...
  #4 (permalink)  
Antiguo 26/01/2009, 10:58
 
Fecha de Ingreso: agosto-2007
Mensajes: 114
Antigüedad: 16 años, 8 meses
Puntos: 1
Respuesta: Formulario en PHP

Tiene el siguiente codigo:
Código PHP:
<?php
if(!$email == "" && (!strstr($email,"@") || !strstr($email,".")))
{
echo 
"<h3></h3>\n";
$badinput "<h3>Su direccion electronica no es valida o esta mal escrita, reingresela por favor.</h3>\n";
echo 
$badinput;
}

$todayis date("l, F j, Y, g:i a") ;

$asunto $asunto ;
$subject $asunto;

$nota stripcslashes($nota); 

$message " $todayis [EST] \n 
- ASUNTO: $asunto \n 
- ESCRIBE: $nombre ($email)\n 
- DOMICILIO: $domicilio\n 
- TITULO DEL MENSAJE: $asunto\n 
- MENSAJE: 
$nota \n


------------------------------------------------------------------------------------------------------------------------------------\n
- INFORMACION ADICIONAL: IP = $ipi \n
- NAVEGADOR USADO: $httpagenti \n
- SE CONTACTO DESDE LA PAGINA: $httprefi \n
"
;
ini_set(sendmail_from,'[email protected]');

$from "From: Formulario desde la web $email\r\n";


mail("recepcion@midominio"$subject$message$from);

?>
En el hosting el único dato que me envian es el servidor mail y una cuenta de contacto, pero sigue si funcionar. Tendría que colocar el servidor en algún lugar del formulario? como hago?
  #5 (permalink)  
Antiguo 26/01/2009, 18:06
 
Fecha de Ingreso: abril-2006
Mensajes: 1.128
Antigüedad: 18 años
Puntos: 33
Respuesta: Formulario en PHP

Lorsui:

Cita:
Notice: Use of undefined constant sendmail_from - assumed 'sendmail_from' in C:Inetpubftprootmidominiosendform.php on line 46
ini_set se utiliza para MODIFICAR variables de configuracion y
la que quieres cambiar "sendmail_from" no es una variable de configuracion
que yo sepa!!!.

Recomendacion: Simplemente elimina esa parte!!!.


Cita:
Warning: mail() [function.mail]: Failed to connect to mailserver at "localhost" port 25, verify
Aparentemente deseas utilizar el servidor de correo del hosting; si es asi, entonces en el php.ini debes activar o mejor dicho indicarle a php el servidor de correo a utilizar (Ejemplo: mail.tuhosting.com).
Para que tu codigo funcione, considerando que estas utilizando la funcion mail() de php, el servidor de correo de tu hosting debe permitir el relay de tu IP o la Ip que eventualmente conectara con el servidor de correo de ellos.

Realmente, es muy dificil que eso suceda; por ello debes autenticar para poder utilizar el servidor de correo de tu hosting en cuyo caso la clase phpmailer seria la indicada para lograr tu objetivo.
Procedimiento -> bajate la clase phpmailer, obtiene la direcccion del servidor de correo de tu hosting, obtiene un nombre de usuario, una contraseñe y configura tu php.ini para el servidor saliente.

Otra opcion aun mas complicada es que instales un servidor de correo en tu localhost y te familiarices con puerto por defecto para correos, MX records, etc.

Saludos
Y espero te ayude
Franco
  #6 (permalink)  
Antiguo 28/01/2009, 15:42
 
Fecha de Ingreso: agosto-2007
Mensajes: 114
Antigüedad: 16 años, 8 meses
Puntos: 1
Mil gracias, voy a empezar con lo que me enviaste a trabajar. Luego les cuento.
Gracias!!!

estuve buscando el php.ini en el hosting y no lo encuentro, puede ser que no exista? lo tengo que crear? cómo se hace?
Cuando me comunico con el hosting donde se aloja lo único que me saben decir es cuál es la cuenta a donde la puede enviar y el host que debo utilizar.

El formulario me llega vacío y con un remitente que dice Apache. Alguien me puede ayudar?

Aunque no lo crean sigo con este problema y ahora me sucede con otro servidor. Así que si no les molesta paso a comentarles algunas cosas.
Según los comentario decidí sacarle el ini_set y los errores que me envía son los siguientes:

Notice: Undefined variable: email in C:\Inetpub\ftproot\midominio\sendform.php on line 9

Notice: Undefined variable: asunto in C:\Inetpub\ftproot\midominio\sendform.php on line 18

Notice: Undefined variable: nota in C:\Inetpub\ftproot\midominiosendform.php on line 21

Notice: Undefined variable: nombre in C:\Inetpub\ftproot\midominio\sendform.php on line 25

Notice: Undefined variable: email in C:\Inetpub\ftproot\midominio\sendform.php on line 25

Notice: Undefined variable: domicilio in C:\Inetpub\ftproot\midominio\sendform.php on line 26

Notice: Undefined variable: tel_particular in C:\Inetpub\ftproot\midominio\sendform.php on line 27

Notice: Undefined variable: tel_celular in C:\Inetpub\ftproot\midominio\sendform.php on line 28

Notice: Undefined variable: ipi in C:\Inetpub\ftproot\midominio\sendform.php on line 35

Notice: Undefined variable: httpagenti in C:\Inetpub\ftproot\midominio\sendform.php on line 36

Notice: Undefined variable: httprefi in C:\Inetpub\ftproot\midominio\sendform.php on line 37

Notice: Undefined variable: email in C:\Inetpub\ftproot\midominio\sendform.php on line 41

Los script que utilizo son 3: formulario.php; sendform.php; respuesta_ok.php.
Tengan en cuanto que borré algunas cosas pensando que podrían estorbar, pero al verdad más allá de lo estético quiero primero que funcione, después veré lo otro.

formulario.php
Código PHP:
<html>
<
head>
<
meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<
title>Formulario</title>
</
head>
<
body>

<
form method="post" action="sendform.php">
Nombre Name<br>
<
input name="nombre" type="text" class="texto" id="nombre" size="36"><br>
<
b><font face="Tahoma" size="2">    Correo E-Mail:</font></b><br>


        <
br>
        <
font face="Tahoma" size="2"><b>Mensaje Menssaje:</b></font><br>
        <
textarea name="nota" cols="29" rows="8" class="texto" id="mensaje"></textarea><br>
        <
input name="Submit" type="submit" class="texto" onClick="MM_validateForm('nombre','','R','email','','RisEmail','nota','','R');return document.MM_returnValue" value="Send">
        
</
div
sendform.php

Código PHP:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<title>Formulario</title>
</head>
<body background="fondo2.gif">

<?php
if(!$email == "" && (!strstr($email,"@") || !strstr($email,".")))
{
echo 
"\n";
$badinput "<h3>Su direccion electronica no es valida o esta mal escrita, reingresela por favor.\n";
echo 
$badinput;
}

$todayis date("l, F j, Y, g:i a") ;

$asunto $asunto ;
$subject $asunto;

$nota stripcslashes($nota); 

$message " $todayis [EST] \n 
- ASUNTO: $asunto \n 
- ESCRIBE: $nombre ($email)\n 
- DOMICILIO: $domicilio\n 
- TELEFONO PARTICULAR: $tel_particular\n 
- TELEFONO CELULAR: $tel_celular\n 
- TITULO DEL MENSAJE: $asunto\n 
- MENSAJE: 
$nota \n


------------------------------------------------------------------------------------------------------------------------------------\n
- INFORMACION ADICIONAL: IP = $ipi \n
- NAVEGADOR USADO: $httpagenti \n
- SE CONTACTO DESDE LA PAGINA: $httprefi \n
"
;


$from "From: Formulario desde la web $email\r\n";

mail("[email protected]"$subject$message$from);

?>



                    
                    <form method="post" action="sendform.php" onsubmit="return FrontPage_Form1_Validator(this)" language="JavaScript" name="FrontPage_Form1">
<p><font color="#FFFFFF" face="Arial">Confirmación de envÃ*o</font><p><br>
        &nbsp;<b><font face="Tahoma" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#FFFFFF">Fecha:</strong><?php echo $todayis ?><strong>
<br />
        Remitente:</strong><?php echo $nombre ?><?php echo $email ?> )<strong>
        </strong></font></font>
        <p align="center"><font face="Tahoma" size="2"><strong>
        <font size="2" face="Tahoma" color="#000">Su Mensaje:<?php $notesout str_replace("\r""<br/>"$nota);echo $notesout?> </font>
        </strong></font>
        <p align="center"><font face="Tahoma" size="2">
        <font size="2" face="Tahoma" color="#000">
        <strong>
<br />
        Su Direccion IP:<?php echo $ip ?> <br />
        Referido desde:<?php echo $httpref ?> </font>  
<p align="center"><a href="respuesta2.php" style="text-decoration: none">
<font color="#FFFFFF" face="Tahoma" size="2">[CONFIRMAR]</font></a></td>
                    <td height="20" width="71" align="center">
                    &nbsp;</td>
                    <td height="20" width="70" align="center">
                    &nbsp;</td>
                </tr>
                <tr>
                    <td height="20" width="203">&nbsp;</td>
                    <td height="20" width="28">&nbsp;</td>
                    <td height="20" width="5">&nbsp;</td>
                    <td height="20" width="194">&nbsp;</td>
                    <td height="20" width="5">&nbsp;</td>
                    <td height="20" width="194" colspan="2">&nbsp;</td>
                    <td height="20" valign="bottom" width="140">
                    <img border="0" src="DA.gif" width="167" height="26"></td>
                </tr>
            </table>
            </td>
        </tr>
        </table>
</div>
respuesta_ok.php
Código PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Env? de Formulario</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body background="bg_b.gif">
<?php
if(!$email == "" && (!strstr($email,"@") || !strstr($email,".")))
{
echo 
"<h3></h3>\n";
$badinput "<h3>Su direccion electronica no es valida o esta mal escrita, reingresela por favor.</h3>\n";
echo 
$badinput;
}

$todayis date("l, F j, Y, g:i a") ;

$asunto $asunto ;
$subject $asunto;

$nota stripcslashes($nota); 

$message " $todayis [EST] \n 
- ASUNTO: $asunto \n 
- ESCRIBE: $nombre ($email)\n 
- MENSAJE: 
$nota \n


------------------------------------------------------------------------------------------------------------------------------------\n
- INFORMACION ADICIONAL: IP = $ipi \n
- NAVEGADOR USADO: $httpagenti \n
- SE CONTACTO DESDE LA PAGINA: $httprefi \n
"
;

$from "From: $email\r\n";


mail("[email protected]"$subject$message$from);

?>

<body bgcolor="#FFFFFF" topmargin="0" background="bg_b.gif">

<div align="center">
  <center>
  <table border="0" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="689" id="AutoNumber1" bgcolor="#4A7BB6" height="10">
    <tr>
      <td width="689" height="100%" colspan="5" bgcolor="#4A7BB6" valign="top">
      <p align="left"><OBJECT classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
 codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0"
 WIDTH="780" HEIGHT="210" id="arriba" ALIGN="">
 <PARAM NAME=movie VALUE="arriba.swf"> <PARAM NAME=quality VALUE=high> <PARAM NAME=bgcolor VALUE=#FFFFFF> 
        <EMBED src="arriba.swf" quality=high bgcolor=#FFFFFF  WIDTH="780" HEIGHT="210" NAME="arriba" ALIGN=""
 TYPE="application/x-shockwave-flash" PLUGINSPAGE="http://www.macromedia.com/go/getflashplayer"></EMBED></OBJECT>
      </td>
    </tr>
    <tr>
      <td width="163" height="230" bgcolor="#91B9DC" style="border-style: none; border-width: medium">
      <p class="MsoNormal" align="left" style="margin-left: 20; margin-right: 10">
      &nbsp;</p>
      <body background="fondoformulario.jpg">


</p>
      <p align="center">
      &nbsp;</td>
      <td width="381" height="230" bgcolor="#91B9DC" style="border-style: none; border-width: medium" valign="top">
      <p class="MsoNormal" align="left" style="margin-left: 20; margin-right: 10">
      &nbsp;</p>
        <p class="MsoNormal" align="left" style="margin-left: 20; margin-right: 10">
      <font face="Wingdings 2" color="#FFFFFF" size="5">d</font><span lang="es"><font face="Tahoma" color="#FFFFFF" size="5"> </font>
        <font face="Tahoma" color="#FFFFFF" size="4">Gracias por comunicarse con 
        nosotros</font></span></p>

</body></td>
      <td width="4" height="230" bgcolor="#91B9DC" style="border-style: none; border-width: medium">
      <p align="center">
      &nbsp;</td>
      <td width="81" height="230" bgcolor="#91B9DC" style="border-style: none; border-width: medium" background="guarda.gif">
      &nbsp;</td>
      <td width="151" height="230" bgcolor="#91B9DC" style="border-style: none; border-width: medium">
      &nbsp;</td>
    </tr>
    <tr>
      <td width="689" height="25" bgcolor="#4A7BB6" colspan="5">
      <p align="center"><b><font face="Tahoma" size="2" color="#FFFFFF">:: 
      <img border="0" src="ashleymini.gif" width="141" height="19"> ::&nbsp; 
        (011)15-6-8882276 ::</font></b></td>
    </tr>
  </table>
  </center>
</div>

</body>

</html>

Última edición por GatorV; 15/03/2009 a las 22:20
  #7 (permalink)  
Antiguo 14/03/2009, 11:15
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 15 años, 9 meses
Puntos: 416
Respuesta: Formulario en PHP

Primero, asumes que register_globals estara siempre ON. El dia que pruebes tu script en un servidor que no lo tenga activado, vas a tener problemas

Usa $_POST['nombre'] en vez de $nombre (por ejemplo).

2do, los mensajes notice no son nada FATAL.
Si quieres los puedes desactivar:
error_reporting(E_ALL ^ E_NOTICE);

3ero, te da esos notice porque usas variables que no esten definidas. Puedes eliminar los notice como te he dicho, pero lo ideal es que programes bien. Que revises que las variables EXISTAN antes de usarlas y eso.

EDIT: No habia leido el mensaje sobre que el mensaje llega vacio ... Echale una mirada al 1.

Para lo de el remitente, tienes que usar los headers correctos para enviar el correo.

Última edición por Ronruby; 14/03/2009 a las 11:22
  #8 (permalink)  
Antiguo 14/03/2009, 11:45
 
Fecha de Ingreso: agosto-2007
Mensajes: 114
Antigüedad: 16 años, 8 meses
Puntos: 1
Ante todo gracias. Ahora voy a requerir de la paciencia de quién quiera ayudarme a programar y aprender algunas cosas que me están faltando.
En principio

Cita:
Iniciado por Ronruby Ver Mensaje
Primero, asumes que register_globals estara siempre ON. El dia que pruebes tu script en un servidor que no lo tenga activado, vas a tener problemas
Supongo que por este tema también tengo ese problema con otro servidor.
Me gustaría saber, si no es demasiada molestia, qué es register_globals y cuál es su función. Y luego como debería activarlo, si tiene que estar en el script o se activa en otro lugar.

Segundo
Cita:
Usa $_POST['nombre'] en vez de $nombre (por ejemplo).
Gracias, voy a tomar ese consejo. Puedo saber cuál es la diferencia entre uno y otro y por qué conviene usar ese?

Tercero
Cita:
2do, los mensajes notice no son nada FATAL.
Si quieres los puedes desactivar: error_reporting(E_ALL ^ E_NOTICE);
Que suerte! por ahora la voy a mantener como alerta.

Cuarto
Cita:
3ero, te da esos notice porque usas variables que no esten definidas. Puedes eliminar los notice como te he dicho, pero lo ideal es que programes bien. Que revises que las variables EXISTAN antes de usarlas y eso.
Las variables las tengo que definir en el primer script, donde el usario llena sus datos, o en el segundo?

Bueno, creo que para empezar está bien, jajaja. Gracias !!!!!!

Cita:
Iniciado por Ronruby Ver Mensaje
EDIT: No habia leido el mensaje sobre que el mensaje llega vacio ... Echale una mirada al 1.

Para lo de el remitente, tienes que usar los headers correctos para enviar el correo.
Voy a ver el 1. Lo otro voy a ver también. Gracias.

Última edición por GatorV; 15/03/2009 a las 22:22
  #9 (permalink)  
Antiguo 14/03/2009, 12:28
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 15 años, 9 meses
Puntos: 416
Respuesta: Formulario en PHP

Cita:
Supongo que por este tema también tengo ese problema con otro servidor.
Me gustaría saber, si no es demasiada molestia, qué es register_globals y cuál es su función. Y luego como debería activarlo, si tiene que estar en el script o se activa en otro lugar.
Te permite recoger las variables provenientes de GET/POST/COOKIE/SERVER (GPCS) directamente.
http://www.php.net/manual/es/ini.cor...gister-globals
Pero, activarlas es un gran riesgo de seguridad.
http://www.php.net/manual/es/security.globals.php

Cita:
Gracias, voy a tomar ese consejo. Puedo saber cuál es la diferencia entre uno y otro y por qué conviene usar ese?
Cuando accedes directamente a $nombre, es porque register_globals esta activada. Por eso hay que recogerlas usando $_POST, $_GET, $_COOKIE o $_SERVER.

Cita:
Las variables las tengo que definir en el primer script, donde el usario llena sus datos, o en el segundo?
En tu script que procesa el formulario, asegurate que ninguna variable esta vacia antes de imprimirla. Un ejemplo sencillo:

Código PHP:
<?php if(isset($_POST['nombre'])) { echo $_POST['nombre']; }
Solo imprimo la variable si esta existe... Eso evitara los notice (que como te dije anteriormente no son nada del otro mundo, pero te dicen como programar correctamente).
  #10 (permalink)  
Antiguo 15/03/2009, 20:35
 
Fecha de Ingreso: agosto-2007
Mensajes: 114
Antigüedad: 16 años, 8 meses
Puntos: 1
Respuesta: Formulario en PHP

Gracias por tu paciencia y colaboración. Voy a poner manos a la obra y luego te comento.
Mil gracias.
  #11 (permalink)  
Antiguo 22/03/2009, 11:19
 
Fecha de Ingreso: agosto-2007
Mensajes: 114
Antigüedad: 16 años, 8 meses
Puntos: 1
Respuesta: Formulario en PHP

Finalmente después de tanto trabajo dí con la solución a este problema. Siempre el inconveniente se me presentaba en el archivo sendform.php.
1) Como bien escribió Ronruby necesitaba solicitar el hosting que active la función "register_globals" en el php.ini

2) Fui probando distintas cosas hasta que salió con este código de php:
Código PHP:
<?php
if(!$email == "" && (!strstr($email,"@") || !strstr($email,".")))
{
echo 
"<h3></h3>\n";
$badinput "<h3>Su direccion electronica no es valida o esta mal escrita, reingresela por favor.</h3>\n";
echo 
$badinput;
}

$todayis date("l, F j, Y, g:i a");

$asunto "desde la Web";
$subject $asunto;

$nota stripcslashes($nota); 

$message " $todayis [EST] \n 
- ASUNTO: $asunto \n 
- ESCRIBE: $nombre ($email)\n 
- MENSAJE: 
$nota \n
"
;

$from "From: $email\r\n";


mail("[email protected]"$subject$message$from);

?>
Eso fue hasta aquí. Y al menos me funcionó.
Ahora me falta, según consejo de Ronruby, probar para recogerlas usando $_POST, $_GET, $_COOKIE o $_SERVER.
Voy a probarlo en algún momento.
GRACIAS!!!
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 08:14.