Comunidad de diseño web y desarrollo en internet online

Fallo CGI y PHP en formulario

Citar            
MensajeEscrito el 16 Oct 2009 07:41 am
Hola familia, a ver, mi problema es que tengo que incluir un formulario en mi web pero no sé si hacerlo con cgi o php, estoy empezando con el tema web y me cuesta comprenderlo...
Probé con un CGI que pillé genérico de internet y lo colgué en mi carpeta cgi del servidor pero no tiraba... le pregunté a mi proveedor de hosting si me podía ofrecer el programita script del CGI y me dice que es inseguro, pero no me da solución alguna...

Preguntando me aconsejaron que lo hiciese en PHP que no creaba tanto spam como el CGI (cosa que no entiendo porque) y me proponían este formulario.php:
<?php

$nombre = isset($_REQUEST['nombre']) ? $_REQUEST['nombre'] : '';
$email = isset($_REQUEST['email']) ? $_REQUEST['email'] : '';
$comentarios = isset($_REQUEST['comentarios']) ? $_REQUEST['comentarios'] : '';

$msg = "Mensaje del formulario web: \r\n \r\n";
$msg .= "Nombre: " . $nombre . "\r\n \r\n";
$msg .= "Email: " . $email . "\r\n \r\n";
$msg .= "Comentarios: " . $comentarios . "\r\n \r\n";

mail('[email protected]','Mail desde tu página',$msg);
?>

Lo subí a mi carpeta raiz (public_html) y lo linko con mi formulario del index con el <form> pero tampoco llega... mi código del index es:

<form method="post" action="http://www.miweb.com/formulario.php">
<p><font>Nombre <br/>
<input type="text" name="nombre" size="20"></font></b></font></p>
<p><b><font >E-mail <br/>
<input type="text" name="submit_by" size="20"></font></b></p>
<p><font >Comentario <br/>
<textarea cols="16" rows="5" name="comentario"></textarea></font></b></font></p>
<p align="left"> <font face="Verdana" size="2">
<input type="submit" value="Enviar" name="submit">
<input type="reset" value="Borrar" name="reset">
</font></p>
</form>

¿Alguna idea?
Muchas gracias de antemano

Por javirockero

12 de clabLevel



 

msie8
Citar            
MensajeEscrito el 16 Oct 2009 07:43 am
Ah, decir que en la línea del PHP donde pone: "mail('[email protected]','Mail desde tu página',$msg);
?>" no sé que significa "mail desde tu página", sólo especifiqué mi email en '[email protected]'.
Puede estar ahí mi fallo? alguien sabe qué significa 'Mail desde tu página'???

Por javirockero

12 de clabLevel



 

msie8
Citar            
MensajeEscrito el 16 Oct 2009 08:40 am
Hola q tal? yo tengo uin problema parecido al tuyo lo puedes ver unos temas mas abjade éste, yo hasta ahora no tengo respuests. Aunque en tucaso pone claramente donde poner tu email y aun asii no te funciona, ufffff pues no se empiezo a perder las esperanzas con el mio.

Un saludo y SUERTE en solucionar la duda, si yo averiguo algo te aviso.

Por ALACRANMAYA

5 de clabLevel



 

firefox
Citar            
MensajeEscrito el 16 Oct 2009 04:31 pm
mail desde tu pagina es donde van a colocar el mensaje a enviar, y no usen $_REQUEST mejor usen $_POST o $_GET segun sus necesidades saludos

Por talcual

686 de clabLevel



 

Colombia

firefox
Citar            
MensajeEscrito el 16 Oct 2009 06:24 pm
Sigue el consejo de talcual, aunque no soluciona el problema que tienes ayuda a mantener la seguridad del formulario.

Pero tu problema es otro. Empezando con que no tienes mucha idea de PHP. Esas "palabras" $_REQUEST["nombre"] (que debes cambiar por $_POST["nombre"]), lo que está entre comillas es el nombre del campo del formulario. Si prestas atención en el código HTML del formulario web tienes un input con name="submit_by" pero no tienes un $_REQUEST["submit_by"] (que debes cambiar por $_POST["submit_by"]) en el código PHP, lo que significa que ese campo del formulario se pierde. Por otro lado tienes en el código PHP un $_REQUEST['email'] (que debes cambiar por $_POST["email"]) que no existe en el formulario por lo tanto la variable $email estará vacía.

Para que tu formulario funcione deberías haber hecho:

Código PHP :

<?php

$nombre = isset($_POST['nombre']) ? $_POST['nombre'] : '';
$email = isset($_POST['submit_by']) ? $_POST['submit_by'] : '';
$comentarios = isset($_POST['comentario']) ? $_POST['comentario'] : '';

$msg = "Mensaje del formulario web: \r\n \r\n";
$msg .= "Nombre: " . $nombre . "\r\n \r\n";
$msg .= "Email: " . $email . "\r\n \r\n";
$msg .= "Comentarios: " . $comentarios . "\r\n \r\n";

mail('[email protected]','Mail desde tu página',$msg);
?>


Aún así esto es extremadamente sencillo y si bien funciona está lleno de problemas de seguridad.

La cadena 'Mail desde tu página' es el subject (asunto) del correo que recibirás.

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 19 Oct 2009 09:56 am
Muchas gracias por vuestras respuestas, me han ayudado bastante, no sólo a que tire, sino también a ir entendiendo esto... es complicado cuando no has visto nunca programacion en php, pero al menos voy cogiendo conceptos y aprendiendo que es de lo que se trata.
Os comento, he cambiado todo tal cual decís y he comprobado que llega a mi email, pero tengo 2 preguntas:

1. Cómo hago para que justo despues de enviar, se redirecione a otra página y no se quede en http://www.miweb/formulario.php??? yo tengo algo así como:
<INPUT TYPE="HIDDEN" NAME="ok_url"
VALUE="http://www.miweb.com/ok.html">
<INPUT TYPE="HIDDEN" NAME="not_ok_url"
VALUE="http://www.miweb.com/not_ok.html">">
Pero no tira... porqué?? o qué otra forma hay de hacerlo?

2. Decís que esto no es muy seguro... ¿qué me aconsejáis para que sea más seguro???
Gracias otra vez



DriverOp escribió:

Sigue el consejo de talcual, aunque no soluciona el problema que tienes ayuda a mantener la seguridad del formulario.

Pero tu problema es otro. Empezando con que no tienes mucha idea de PHP. Esas "palabras" $_REQUEST["nombre"] (que debes cambiar por $_POST["nombre"]), lo que está entre comillas es el nombre del campo del formulario. Si prestas atención en el código HTML del formulario web tienes un input con name="submit_by" pero no tienes un $_REQUEST["submit_by"] (que debes cambiar por $_POST["submit_by"]) en el código PHP, lo que significa que ese campo del formulario se pierde. Por otro lado tienes en el código PHP un $_REQUEST['email'] (que debes cambiar por $_POST["email"]) que no existe en el formulario por lo tanto la variable $email estará vacía.

Para que tu formulario funcione deberías haber hecho:

Código PHP :

<?php

$nombre = isset($_POST['nombre']) ? $_POST['nombre'] : '';
$email = isset($_POST['submit_by']) ? $_POST['submit_by'] : '';
$comentarios = isset($_POST['comentario']) ? $_POST['comentario'] : '';

$msg = "Mensaje del formulario web: \r\n \r\n";
$msg .= "Nombre: " . $nombre . "\r\n \r\n";
$msg .= "Email: " . $email . "\r\n \r\n";
$msg .= "Comentarios: " . $comentarios . "\r\n \r\n";

mail('[email protected]','Mail desde tu página',$msg);
?>


Aún así esto es extremadamente sencillo y si bien funciona está lleno de problemas de seguridad.

La cadena 'Mail desde tu página' es el subject (asunto) del correo que recibirás.

Por javirockero

12 de clabLevel



 

msie8
Citar            
MensajeEscrito el 21 Oct 2009 10:09 am
Hola, al parecer ya lo he arreglado... :lol: buscando por internet encontré un script para el PHP que redirecciona la página despues de darle enviar, es así (por si alguien más tiene el mismo problema):
______________________________________________________
<script>
var targetURL="http://www.miweb.com/enviado.html"
window.location=targetURL
</script>
______________________________________________________

Aún así soy un ser inquieto con ansias de aprender y me gustaría saber de qué manera se puede hacer más profesional y/o/u seguro (decís que un CGI o un PHP como el mio no es muy seguro). :?

Agradezco toda la ayuda, abrazos! :wink:

pd: mi código php total queda así: (como digo para aquel que llegue a este post con un problema como el mio)
____________________________________________________________________________________________
<?php

$nombre = isset($_POST['nombre']) ? $_POST['nombre'] : '';
$email = isset($_POST['email']) ? $_POST['email'] : '';
$comentarios = isset($_POST['comentarios']) ? $_POST['comentarios'] : '';

$msg = "Mensaje del formulario web: \r\n \r\n";
$msg .= "Nombre: " . $nombre . "\r\n \r\n";
$msg .= "Email: " . $email . "\r\n \r\n";
$msg .= "Comentarios: " . $comentarios . "\r\n \r\n";

mail('[email protected]','Mail desde tu página',$msg);
?>
<script>
var targetURL="http://www.miweb.com/enviado.html"
window.location=targetURL
</script>
____________________________________________________________________________________________

Pd: Lógicamente el archivo enviado.html es la página que aparece cuando redirecciona al darle enviar el form... para que el cliente esté tranquilo de que su email ha llegado correctamente. (para el que no lo sepa por lógico que sea..)

Por javirockero

12 de clabLevel



 

msie8
Citar            
MensajeEscrito el 21 Oct 2009 05:37 pm
No es seguro porque entre otras cosas tal como está se puede usar para hacer spam. Esto se debe a lo básico que es la función mail() de PHP.
Por ejemplo un usuario podría escribir en el cuerpo del mensaje:

To: [email protected]

Y la función mail lo tomará como parte del encabezado y por lo tanto enviar una copia del mensaje a ese correo sin más problemas.

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 21 Oct 2009 07:23 pm
Ah, otra cosa. En vez de usar JavaScript para redireccionar a otra página podrías haber hecho:

Código PHP :

header("Location: http://www.miweb.com/enviado.html");


En PHP directamente.

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 22 Oct 2009 08:51 am
Entendido DriverOP, gracias por la explicación y por el nuevo código... voy aprendiendo!!!! ahora bien, me gustaría saber como decía de qué manera podría hacerlo más seguro? debe ser un lío no? :shock:
aún así si sacas tiempo para quitarme la duda te lo agradecería.


DriverOp escribió:

Ah, otra cosa. En vez de usar JavaScript para redireccionar a otra página podrías haber hecho:

Código PHP :

header("Location: http://www.miweb.com/enviado.html");


En PHP directamente.

Por javirockero

12 de clabLevel



 

msie8
Citar            
MensajeEscrito el 22 Oct 2009 07:40 pm
Si quieres usar mail() te sugiero que busques artículos al respecto en otro lugar. En su momento yo lo intenté pero hay tantas cosas a tener en cuenta que opté por usar un script prefabricado que no hace uso de mail() sino que tramita el protocolo SMTP directamente (otra de las causas para no usar mail() es que no está disponible en todos los hostings). Lo que yo usé como reemplazo de mail() fue Swift PHP mailer que soluciona por diseño la mayoría de los problemas de seguridad, además de que es mucho más fácil armar correos complicados (como usar formato HTML en el cuerpo, adjuntar archivos, indicar servidores de correo "especiales" como Gmail, enviar correos masivos como listas de correo, etc...)

Por DriverOp

Claber

2510 de clabLevel



 

opera

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.