Foros del Web » Programando para Internet » PHP »

Formulario de contacto

Estas en el tema de Formulario de contacto en el foro de PHP en Foros del Web. Hola! Estoy trantando de hacer un formulario en html que se mande a mi mail mediante un archivo php. Soy muy nueva en estos temas, ...
  #1 (permalink)  
Antiguo 27/07/2008, 14:04
 
Fecha de Ingreso: abril-2005
Mensajes: 20
Antigüedad: 19 años
Puntos: 0
Formulario de contacto

Hola!
Estoy trantando de hacer un formulario en html que se mande a mi mail mediante un archivo php. Soy muy nueva en estos temas, pero intente de varias maneras y no pasa nada
Queria mostrarles como lo hago a ver si alguien detecta algun error:

mi html queda asi:
Código:
  <FORM>
                <form id= "contatco" name= "contacto" method="post" action="form.php">
                <span class="resg">Nombre:<br>
                <INPUT span class="cuadros" TYPE="TEXT" size="50px" name="nombre" id="nombre">
                <br><br>Correo electrónico:<br>
                <input span class="cuadros" type="text" size="50px" name="correo" id="correo">
                <br><br>Mensaje:<br>
                <textarea class="gris" name="mensaje" rows="5" cols="47" id="mensaje"></textarea>
                <br><br></span>
                <input span class="gris" TYPE=SUBMIT value="Enviar">
                <INPUT span class="gris" TYPE=RESET value="borrar">
		        </form>
                </FORM>
Y mi PHP así:
Código:
<?PHP; 

$nombre = $_POST['nombre'];
$correo = $_POST['correo'];

$header = 'From: ' . $mail . " \r\n";
$header .= "X-Mailer: PHP/" . phpversion() . " \r\n";
$header .= "Mime-Version: 1.0 \r\n";
$header .= "Content-Type: text/plain";

$mensaje = "Este mensaje fue enviado por " . $nombre . " \r\n";
$mensaje .= "Su e-mail es: " . $mail . " \r\n";
$mensaje .= "Mensaje: " . $_POST['mensaje'] . " \r\n";
$mensaje .= "Enviado el " . date('d/m/Y', time());

$para = '[email protected]';
$asunto = 'Consulta desde Web';

mail($para, $asunto, utf8_decode($mensaje), $header);

echo 'Mensaje Enviado';

?>
Gracias por cualquier ayuda!!
Mariana.
  #2 (permalink)  
Antiguo 27/07/2008, 14:18
 
Fecha de Ingreso: junio-2006
Ubicación: Jáltipan Veracruz, México
Mensajes: 150
Antigüedad: 17 años, 10 meses
Puntos: 1
Respuesta: Formulario de contacto

mmm, dos puntos, primero, en tu correo revisa sino te manda el mail a correo no deseado, de acuerdo al servidor que utilizas puede hacer eso.

segundo, debes de instalar un servidor smtp para que puedas enviar los mail.

te dejo un código que si me funciona, solo adáptalo a lo que requieres.


<?php


// a quien va el correo
$destinatario ="[email protected]"; // aquí puedes poner tu dirección pra que cheques que te llega

$asunto = "Prueba de correo en PHP"; // asunto del correo

$cuerpo = "<div><b>Mi nombre es: </b> Pablo <br> <b><br> hoy es:</b> ".date("d/m/Y"). "<br> <br><br> debe de llegar este correo</div>";

//para el envío en formato HTML
$headers = "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/html; charset=iso-8859-1\r\n";


//dirección del remitente
$headers .= "From: Norberto Pablo <"."[email protected]"." > \r\n"; // aqui quien es el que envía el correo

//direcciones que recibirán copia oculta
//$headers .= "Bcc: [email protected]\r\n";
mail($destinatario,$asunto,$cuerpo,$headers);

?>


cualquier duda, comenta.
__________________
" La vida es un programa que no hemos logrado depurar."
"El programar tu vida es como si le metieras más errores a tu futuro, el proceso es ahora"
  #3 (permalink)  
Antiguo 28/07/2008, 17:08
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Formulario de contacto

En primer lugar, para poder trabajar correctamente necesitás HTML válido. De otra forma, podés encontrarte errores extraños sin motivo aparente. Además, siempre es recomendable hacer las cosas bien, ¿no? Y esto tiene el valor agregado de que lográs entender cómo funcionan las cosas.

Dicho esto, te recomiendo que pases tus páginas por http://validator.w3.org, ese sitio te dirá si tu página tiene HTML válido o tiene errores. A primera vista se notan varios errores, como el hecho de que estás usando 2 etiquetas form, o el atributo "span" dentro de los "input", que nada tiene que hacer ahí (de hecho, no existe un atributo con ese nombre).

Segundo punto: El código PHP es correcto (al menos así lo parece), pero es vulnerable a un ataque de inyección de cabeceras. Un spammer podría sin demasiada facilidad usarlo para enviar correo basura.

Tercer punto: para saber si quien falla es tu formulario o la página php, podés usar

print_r($_POST)

en form.php, eso te mostrará todo lo que se envió por el formulario. Si lo ves vacío, quiere decir que hay algo mal en el formulario, y si ves todos los datos, el problema está con tu PHP.

Sobre el tema de la seguridad, podés leer esto: http://aitorserra.es/evitar-spam-en-formularios-php/


Saludos.
  #4 (permalink)  
Antiguo 31/07/2008, 06:33
 
Fecha de Ingreso: abril-2005
Mensajes: 20
Antigüedad: 19 años
Puntos: 0
Respuesta: Formulario de contacto

uhhh que de cosas... la verdad que seguramente debe haber mucho error... estoy experimentando y probando que sale... voy a leer en detalle todo a ver que puedo pasar en limpio y despues les consulto nuevas dudas!
gracias!
mariana
  #5 (permalink)  
Antiguo 02/08/2008, 12:42
 
Fecha de Ingreso: abril-2005
Mensajes: 20
Antigüedad: 19 años
Puntos: 0
Respuesta: Formulario de contacto

vayamos de a poco!!..jja..
norpool1:
a que te refieres con "debes de instalar un servidor smtp para que puedas enviar los mail"...este formulario esta subido a una web..el servidor deberia tener smtp o algo asi?..no se lo que es eso, podrias explicarme brevemente para que sirve con respecto al formulario que quiero hacer?

el codigo php que me dejaste es como para usarlo solo o como es eso?..yo solo se ingresar datos mediante un formulario html..como envio un mensaje solo con un archivo php?...me serviria para probar si llegan o que?

bueno empecemos con esas dudas.. asi me organizo un poco, muchas gracias!!
mariana.
  #6 (permalink)  
Antiguo 02/08/2008, 12:50
 
Fecha de Ingreso: abril-2005
Mensajes: 20
Antigüedad: 19 años
Puntos: 0
Respuesta: Formulario de contacto

alvlin:
me pusiste que uno de mis errores es poner el atributo "span" dentro de los "input", eso lo hice para que me tomara las caracteristicas de los cuadros segun un estilo css. funciona, pero si no deberia hacerlo, como personalizo los cuadros de texto?
gracias por toda la info, quiero ir procesando de a poco!
mariana.
  #7 (permalink)  
Antiguo 02/08/2008, 14:31
 
Fecha de Ingreso: abril-2005
Mensajes: 20
Antigüedad: 19 años
Puntos: 0
Respuesta: Formulario de contacto

bueno, creo que mi principal problema era la doble etiqueta <form> que tenia, porque al cambiarlo empezo a andar el formulario. pero como bien lo predijo alvlin algun spammer ya se metio en mi formulario. Por eso queria ver como solucionarlo, lei el link que me dejaste alvlin y tambien otro que era muy parecido. Vos me podrias explicar un poco el codigo que aconsejan insertar para proteger el script? asi veo como insertarlo en mi php.
muchas gracias

Código PHP:
$from $_POST["sender"];
$from urldecode($from);
if (
eregi(”r”,$from) || eregi(”n”,$from)){
die(
”Posible email injection”);

donde tendria que insertarlo?
en "sender" tendria que poner algo especifico o queda asi?
gracias!!
mariana.
  #8 (permalink)  
Antiguo 02/08/2008, 16:18
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Formulario de contacto

maryiann,

no entiendo (sinceramente, sin ironía) en qué te puede ayudar poner un atributo que no existe. ¿podrías mostrar el código que tenés ahora e indicar (quizás en una captura de pantalla) la diferencia que ves cuando lo cambiás? Ojo que solaente me refiero a quitar la palabra "span" de dentro del input, no a quitar el atributo class, por ejemplo.

Con respecto al segundo mensaje, la idea es buscar si dentro de las casillas de texto se introdujo algún salto de línea. Por lo tanto lo que tenés que buscar es "\r" y "\n", no "r" y "n".
El código que pegaste no funcionará por ese detalle y también porque las comillas no son las "comunes". Cuidado con eso.

Ya poniéndome caprichoso diría que no uses ereg, ya que utiliza un motor de expresiones regulares que en este caso es como matar un mosquito a cañonazos. Es mejor usar strpos.
Lo que deberías hacer es aplicar una función como esta:

Código PHP:
function validarTexto($campo) {
    return ( (
strpos($campo"\r") !== false) || (strpos($campo"\n") !== false) );

Esta función devuelve verdadero si los campos NO contienen uno de los caracteres de salto de línea. Deberías aplicarla a todos los campos de texto que te lleguen del formulario. Suponiendo que tus campos se llamen "nombre" y "correo-e" (los nombres de los campos son los atributos "name" de cada input)

Código PHP:
if ( validarTexto($_POST['nombre']) && validarTexto($_POST['correo-e']) ) {
    
// todo correcto, proceder con el envío
} else {
    die(
'¡No me atraparás, maldito spammer! XD');


Espero que haya quedado claro.

Saludos.
  #9 (permalink)  
Antiguo 03/08/2008, 17:10
 
Fecha de Ingreso: abril-2005
Mensajes: 20
Antigüedad: 19 años
Puntos: 0
Respuesta: Formulario de contacto

hola alvlin!
en cuanto a lo del atributo span yo creí que el atributo para css era span class todo junto, pero si decis que solamente con class seria corecto así lo voy a poner!

por otro lado muchas gracias por toda la explicacion, estoy intentando ahora juntar todo en mi php, te muestro a ver si esta bien ordenarlo asi, aunque estoy casi segura que debo estar haciendo lio o por lo menos repitiendo cosas, a ver que me podés corregir, gracias!

Código PHP:
<?PHP

$nombre $_POST['nombre'];
$correo $_POST['correo'];

$from $_POST['correo']; 
$from urldecode($from); 
if ( 
validarTexto($_POST['nombre']) && validarTexto($_POST['correo']) ) { 
    
// todo correcto, proceder con el envío 
} else { 
    die(
'¡No me atraparás, maldito spammer! XD'); 
}  

$header 'From:' $correo " \r\n";
$header .= "X-Mailer: PHP/" phpversion() . " \r\n";
$header .= "Mime-Version: 1.0 \r\n";
$header .= "Content-Type: text/plain";

$mensaje "Este mensaje fue enviado por " $nombre " \r\n";
$mensaje .= "Su e-mail es: " $correo " \r\n";
$mensaje .= "Mensaje: " $_POST['mensaje'] . " \r\n";
$mensaje .= "Enviado el " date('d/m/Y'time());

$para '[email protected]';
$asunto 'Consulta desde Web';

mail($para$asuntoutf8_decode($mensaje), $header);

include(
"gracias.html"); 
echo 
'Mensaje Enviado';

?>
  #10 (permalink)  
Antiguo 03/08/2008, 17:12
 
Fecha de Ingreso: abril-2005
Mensajes: 20
Antigüedad: 19 años
Puntos: 0
Respuesta: Formulario de contacto

lo acabo de probar asi y me salto este error

Fatal error: Call to undefined function: validartexto() in /home/el000220/public_html/form.php on line 16

hice desastre!!! que paso?
mariana.
  #11 (permalink)  
Antiguo 03/08/2008, 17:49
 
Fecha de Ingreso: abril-2005
Mensajes: 20
Antigüedad: 19 años
Puntos: 0
Respuesta: Formulario de contacto

Bueno, aca sigo intentando comprender el mecanismo...
reforme el php asi:

Código PHP:
<?PHP

$nombre $_POST['nombre'];
$correo $_POST['correo'];

$from $_POST['correo']; 
$from urldecode($from); 

function 
validarTexto($campo) { 
    return ( (
strpos($campo"\r") !== false) || (strpos($campo"\n") !== false) ); 
}  

if ( 
validarTexto($_POST['nombre']) && validarTexto($_POST['correo']) ) { 
    
// todo correcto, proceder con el envío 
} else { 
    die(
'¡No me atraparás, maldito spammer! XD'); 
}  

$header 'From:' $correo " \r\n";
$header .= "X-Mailer: PHP/" phpversion() . " \r\n";
$header .= "Mime-Version: 1.0 \r\n";
$header .= "Content-Type: text/plain";

$mensaje "Este mensaje fue enviado por " $nombre " \r\n";
$mensaje .= "Su e-mail es: " $correo " \r\n";
$mensaje .= "Mensaje: " $_POST['mensaje'] . " \r\n";
$mensaje .= "Enviado el " date('d/m/Y'time());

$para '[email protected]';
$asunto 'Consulta desde Web';

mail($para$asuntoutf8_decode($mensaje), $header);

include(
"gracias.html"); 
echo 
'Mensaje Enviado';

?>
Ahora no me manda el mail y me abre una pagina que dice '¡No me atraparás, maldito spammer! XD'... que siginifica?

gracias!!
mariana.
  #12 (permalink)  
Antiguo 03/08/2008, 18:52
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Formulario de contacto

Me equivoqué yo en la lógica del programa, perdón por eso
Para que funcione, cambiá la línea

Código PHP:
return ( (strpos($campo"\r") !== false) || (strpos($campo"\n") !== false) ); 
Código PHP:
return ( (strpos($campo"\r") === false) && (strpos($campo"\n") === false) ); 
Ahora sí tiene que funcionar.


Saludos, y disculpas de nuevo
  #13 (permalink)  
Antiguo 03/08/2008, 20:35
 
Fecha de Ingreso: abril-2005
Mensajes: 20
Antigüedad: 19 años
Puntos: 0
Respuesta: Formulario de contacto

bueno alvlin, un placer!! ya me funciona perfecto!! o al menos eso creo por ahora. el mail se manda todo perfecto...
se puede decir entonces que estoy protegida de span?!
esperemos que nada se meta!!
miles de gracias, es una satisfaccion increible cuando uno logra hacer algo, por lo menos con ayuda!!!! asi uno va aprendiendo

saludos!!!
mariana.
  #14 (permalink)  
Antiguo 03/08/2008, 21:19
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Formulario de contacto

Siempre es un gusto ayudar

No sé si estás completamente protegida de toda clase de spam, dado que no conozco todas las clases de ataques posibles. Siempre es posible que haya algún método que uno no conozca para abusarse de los sistemas.
Personalmente no he visto ninguna otra clase de abuso directo de estos formularios, así que creo que esta protección es suficiente.


Saludos
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 19:13.