Foros del Web » Programando para Internet » PHP »

Ayuda con un formulario de contacto

Estas en el tema de Ayuda con un formulario de contacto en el foro de PHP en Foros del Web. Hola. Quiero hacer un formulario de contacto y nose como se hacen estas cosas. Tengo este codigo php: Contacto.php Código PHP: <?php $nombre = $_POST ...
  #1 (permalink)  
Antiguo 24/07/2008, 15:41
(Desactivado)
 
Fecha de Ingreso: febrero-2008
Ubicación: Argentina, Santa Fe, Rosario
Mensajes: 350
Antigüedad: 16 años, 2 meses
Puntos: 5
Ayuda con un formulario de contacto

Hola. Quiero hacer un formulario de contacto y nose como se hacen estas cosas. Tengo este codigo php:
Contacto.php
Código PHP:
<?php
$nombre
=$_POST['nombre'];
$correo=$_POST['correo'];
$mensaje=$_POST['mensaje'];
$link mysql_connect("localhost""root""")
or die(
"No se pudo acceder a la base de datos");
mysql_select_db("contacto")
or die(
"No se a seleccionado la base de datos");
$query "insert into `contacto` (`nombre`,`correo`,`mensaje`) values
('$nombre','$correo','$mensaje')"
;
$result mysql_query($query)
or die(
"Query failed:$query");
?>
(Formulario...)
Lo que yo quiero hacer es que cuando entren en el documento, no se envie ningun formulario, aunque este el codigo php en el mismo, y cuando envien el formulario vacio, que quede en que se actualizo el documento y no se envio nada, y cuando envien el formulario aparezca un mensaje que diga gracias.
Como tengo con el codigo php?
No entiendo mucho de esto
Gracias
  #2 (permalink)  
Antiguo 24/07/2008, 16:01
Avatar de Mort20  
Fecha de Ingreso: junio-2008
Ubicación: Roca Casterly
Mensajes: 141
Antigüedad: 15 años, 10 meses
Puntos: 2
Respuesta: Ayuda con un formulario de contacto

Te basta con que, antes de iniciar el tratamiento de tus datos con las variables $_POST compruebes que han sido creadas (que existen), y si así es pues avanzar. Esto es porque las variables con los nombres de tu formulario no se crean hasta que lo envíes por lo menos una vez, ya sea vacío o no.

Resumiendo, pon algo así
Código PHP:
<?php 
if(isset($_POST['nombre']))
{
   if(empty(
$_POST['nombre'])) //puedes poner nombre como cualquier otro, aquí tratas si está vacío.
   //tratamiento
}
?> //código HTML con el formulario
Por otro lado, veo algunos fallos importantes de seguridad en tu código, posibles inyecciones de SQL (planteate que $nombre resulta ser = '','',''); y imprimir una consulta SQL de toda la tabla contactos. Actualmente es posible.
Mirate el tema de inyecciones SQL para solcuionarlo. Y además intenta usar siempre comillas simples en cosas de SQL aunque haya variables, unélas con el operador . y usando el \ para que no interprete las comillas simples como fin de sentencia.
  #3 (permalink)  
Antiguo 24/07/2008, 16:07
 
Fecha de Ingreso: junio-2007
Ubicación: Buenos Aires, Argentina
Mensajes: 262
Antigüedad: 16 años, 10 meses
Puntos: 1
Respuesta: Ayuda con un formulario de contacto

El mensajito de agradecimiento o confirmación de que el mensaje ha sido enviado podés

1. hacerlo por PHP: si todo se confirma, te muestra un mensaje en la página

2. Un alert de Javascript:

Código:
<script type="text/javascript">
alert("Gracias por enviar tu mensaje.");
</script>
Cualquier duda, consulte nomás.
Saludos,

Pablo
__________________
Moebius Digital | La pieza que faltaba
Diseño web | Web hosting
  #4 (permalink)  
Antiguo 24/07/2008, 21:40
(Desactivado)
 
Fecha de Ingreso: febrero-2008
Ubicación: Argentina, Santa Fe, Rosario
Mensajes: 350
Antigüedad: 16 años, 2 meses
Puntos: 5
Respuesta: Ayuda con un formulario de contacto

Cita:
Iniciado por Mort20 Ver Mensaje
Te basta con que, antes de iniciar el tratamiento de tus datos con las variables $_POST compruebes que han sido creadas (que existen), y si así es pues avanzar. Esto es porque las variables con los nombres de tu formulario no se crean hasta que lo envíes por lo menos una vez, ya sea vacío o no.

Resumiendo, pon algo así
Código PHP:
<?php 
if(isset($_POST['nombre']))
{
   if(empty(
$_POST['nombre'])) //puedes poner nombre como cualquier otro, aquí tratas si está vacío.
   //tratamiento
}
?> //código HTML con el formulario
Por otro lado, veo algunos fallos importantes de seguridad en tu código, posibles inyecciones de SQL (planteate que $nombre resulta ser = '','',''); y imprimir una consulta SQL de toda la tabla contactos. Actualmente es posible.
Mirate el tema de inyecciones SQL para solcuionarlo. Y además intenta usar siempre comillas simples en cosas de SQL aunque haya variables, unélas con el operador . y usando el \ para que no interprete las comillas simples como fin de sentencia.
Uhh, no entiendo lo que me dijiste de seguridad, si me pudieras explicar te agradeceria mucho
  #5 (permalink)  
Antiguo 25/07/2008, 04:03
Avatar de Mort20  
Fecha de Ingreso: junio-2008
Ubicación: Roca Casterly
Mensajes: 141
Antigüedad: 15 años, 10 meses
Puntos: 2
Respuesta: Ayuda con un formulario de contacto

Bueno, te lo explico más detalladamente, tú código inicial:
Código PHP:
<?php
$nombre
=$_POST['nombre'];
$correo=$_POST['correo'];
$mensaje=$_POST['mensaje'];
$link mysql_connect("localhost""root""")
or die(
"No se pudo acceder a la base de datos");
mysql_select_db("contacto")
or die(
"No se a seleccionado la base de datos");
$query "insert into `contacto` (`nombre`,`correo`,`mensaje`) values
('$nombre','$correo','$mensaje')"
;
$result mysql_query($query)
or die(
"Query failed:$query");
?>
Las variables de $_POST nombre, correo y mensaje como sabes vienen dadas por el usuario, con lo que puede poner lo que quiera.
Tu no compruebas lo que hay escrito, directamente lo metes en la BD, supón que en nombre y correo no pone nada, con lo que $correo y $nombre quedarían vacíos.
Supón que $mensaje, después de introducir algo, queda:
Código PHP:
$mensaje " '); $q = mysql_query('SELECT * FROM contacto'); while($row = mysql_fetch_array($q)) print_r($row); " 
tu código quedaría:
Código PHP:
<?php
$nombre
=$_POST['nombre'];
$correo=$_POST['correo'];
$mensaje=$_POST['mensaje'];
$link mysql_connect("localhost""root""")
or die(
"No se pudo acceder a la base de datos");
mysql_select_db("contacto")
or die(
"No se a seleccionado la base de datos");
$query "insert into `contacto` (`nombre`,`correo`,`mensaje`) values
('','',''); $q = mysql_query('SELECT * FROM contacto'); while($row = mysql_fetch_array($q)) print_r($row); ')"
;
$result mysql_query(insert into `contacto` (`nombre`,`correo`,`mensaje`) values
('','',''); $q mysql_query('SELECT * FROM contacto'); while($row mysql_fetch_array($q)) print_r($row); ))
or die(
"Query failed:$query");
?>
Cómo ves con el resaltado de sintaxis, antes de que la página muera, habrá mostrado la tabla entera de contactos.
Puede parecerte complicado, pero cualquiera que sepa un poco de PHP sabe cuales son las estructuras normales de poner las funciones, y es que no hay otras, es deducible que serán 3 los campos viendo 3 campos para rellenar en el formulario, y deducir un nombre de tabla de DB tampoco es difícil porque todo el mundo suele poner los mismos ya que es más fácil con nombres identificativos.

Por eso te decía lo de la seguridad, y por otro lado es aconsejable usar comillas simples en lo del mysql_query('consulta'); en vez de dobles porque las dobles evaluan las variables, en cambio con las simples no, para meter una variable tienes que unir con el operador . (punto), y usar la '\' para que no se interprete la comilla simple como un fin de frase. Haciéndolo así se evita - no del todo pero con bastante efectividad - que alguien meta una variable creada por él en el formulario y que tu la evalúes.

Todo esto sumado a un correcto tratamiento de los datos introducidos antes de inserir en la base de datos te evita muchos problemas.
  #6 (permalink)  
Antiguo 25/07/2008, 08:40
(Desactivado)
 
Fecha de Ingreso: febrero-2008
Ubicación: Argentina, Santa Fe, Rosario
Mensajes: 350
Antigüedad: 16 años, 2 meses
Puntos: 5
Respuesta: Ayuda con un formulario de contacto

Muchas gracias, estoy aprendiendo php en phpya, no entenedi mucho pero ya lo voy a ender. Muchitas gracias. emm, y no tenes activado el karma?? es que te quiero dar karma n-n

Ahhh, listo ya te di

Salu2
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 20:53.