En esta parte veremos como almacenar los valores ingresados por el usuario en nuestro formulario y almacenarlos en una base de datos MySQL usando PHP para ello, vamos a utilizar el mismo codigo del tutorial anterior.
1. Antes de empezar
Ya que vamos a trabajar con PHP, es necesario que tengas instalado en tu sistema un servidor local que soporte PHP.
CREATE TABLE `cf` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`nombre` varchar(255) NOT NULL,
`email` varchar(255) NOT NULL,
`asunto` varchar(255) NOT NULL,
`mensaje` text NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
Lo primero que vamos a hacer es crear una tabla con los campos del formulario, si haz modificado el formulario añadiendole o quitandole campos, tendras que hacer lo mismo aqui, el siguiente codigo es un SQL que podemos ejecutar desde phpMyAdmin o ingresarlo manualmente si no disponimos de esa herramienta:
Le vamos a poner ‘cf’ (contact form) a la tabla y definimos los campos, primero id que va a ser la llave primaria y con auto_increment y luego los campos del formulaio.
Ahora vamos a crear un nuevo archivo donde se van almacenar los datos de conexión a la base de datos, a este le pondremos conexion.php:
El contenido de este archivo tiene que ser asi:
<?php
$host = 'localhost';
$usuario = 'root';
$pass = 'root';
$conn = mysql_connect($host, $usuario, $pass) or die ('Error conectando a la base de datos');
$bdnombre = 'cf';
mysql_select_db($bdnombre);
Allà definiremos las credenciales de conexión a MySQL, en caso de trabajar en un servidor local casi siempre son esos (localhost, root, root).
2. index.php
Abrimos este archivo y modificamos la parte de PHP, lo primero sera incluir a conexion.php, en esta ocasion vamos a usar require, ya que es necesario que ese archivo este presente:
<?php
require("conexion.php");
if(isset($_POST['boton'])){
if($_POST['nombre'] == ''){
$error1 = '<span class="error">Ingrese su nombre</span>';
}else if($_POST['email'] == '' or !preg_match("/^[a-zA-Z0-9_\.\-]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-\.]+$/",$_POST['email'])){
$error2 = '<span class="error">Ingrese un email correcto</span>';
}else if($_POST['asunto'] == ''){
$error3 = '<span class="error">Ingrese un asunto</span>';
}else if($_POST['mensaje'] == ''){
$error4 = '<span class="error">Ingrese un mensaje</span>';
}else{
$dest = "tu@email.com"; //Email de destino
$nombre = $_POST['nombre'];
$email = $_POST['email'];
$asunto = $_POST['asunto']; //Asunto
$cuerpo = $_POST['mensaje']; //Cuerpo del mensaje
//Cabeceras del correo
$headers = "From: $nombre <$email>\r\n"; //Quien envia?
$headers .= "X-Mailer: PHP5\n";
$headers .= 'MIME-Version: 1.0' . "\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n"; //
if(mail($dest,$asunto,$cuerpo,$headers)){
$result = '<div class="result_ok">Email enviado correctamente <img src="https://tursos.com/wp-includes/images/smilies/icon_smile.gif" alt=":)" class="wp-smiley"> </div>';
// si el envio fue exitoso reseteamos lo que el usuario escribio:
$_POST['nombre'] = '';
$_POST['email'] = '';
$_POST['asunto'] = '';
$_POST['mensaje'] = '';
}else{
$result = '<div class="result_fail">Hubo un error al enviar el mensaje <img src="https://tursos.com/wp-includes/images/smilies/icon_sad.gif" alt=":(" class="wp-smiley"> </div>';
}
}
}
?>
Ahora nos movemos hasta la linea 34 luego de la parte donde se hace la condicional si envio o no el correo, alli añadimos un salto de linea y ponemos dos lineas en una se va a guardar la consulta SQL que se va ejecutar y la otra va a ir la funcion que la ejecute:
if(mail($dest,$asunto,$cuerpo,$headers)){
$sql = "INSERT INTO `cf` (`nombre`,`email`,`asunto`,`mensaje`) VALUES ('{$_POST['nombre']}','{$_POST['email']}','{$_POST['asunto']}','{$_POST['mensaje']}')";
mysql_query($sql) or die(mysql_error());
$result = '<div class="result_ok">Email enviado correctamente :)</div>';
// si el envio fue exitoso reseteamos lo que el usuario escribio:
$_POST['nombre'] = '';
$_POST['email'] = '';
$_POST['asunto'] = '';
$_POST['mensaje'] = '';
}else{
$result = '<div class="result_fail">Hubo un error al enviar el mensaje :(</div>';
}
Y con eso ya tendrÃamos nuestro formulario funcionando, recuerda que si modificaste los campos haz de hacerlo tambien en la consulta, por ejemplo:
$sql = "INSERT INTO `cf` (`nombre`,`email`,`asunto`,`mensaje`,`campo_z`,`campo_x`,`campo_y`)
VALUES ('{$_POST['nombre']}','{$_POST['email']}','{$_POST['asunto']}','{$_POST['mensaje']}','{$_POST['campo_z']}','{$_POST['campo_x']}','{$_POST['campo_y']}')";
O en caso tengas el los valores guardados/concatenados en variables:
$sql = "INSERT INTO `cf` (`nombre`,`email`,`asunto`,`mensaje`)
VALUES ('$nombre','$email','$asunto','$mensaje','$body')";
3. Mejoras de seguridad
Como vamos a trabajar con bases de datos es recomendable asegurarnos que no nos inyecten el formulario, para eso vamos a usar mysql_real_escape_string antes de la consulta mediante un foreach, de esta forma lo hara en todas las variables POST que se hayan ingresado:
if(mail($dest,$asunto,$cuerpo,$headers)){
foreach($_POST AS $key => $value) {
$_POST[$key] = mysql_real_escape_string($value);
}
$sql = "INSERT INTO `cf` (`nombre`,`email`,`asunto`,`mensaje`) VALUES ('{$_POST['nombre']}','{$_POST['email']}','{$_POST['asunto']}','{$_POST['mensaje']}')";
mysql_query($sql) or die(mysql_error());
$result = '<div class="result_ok">Email enviado correctamente :)</div>';
// si el envio fue exitoso reseteamos lo que el usuario escribio:
$_POST['nombre'] = '';
$_POST['email'] = '';
$_POST['asunto'] = '';
$_POST['mensaje'] = '';
} else {
$result = '<div class="result_fail">Hubo un error al enviar el mensaje :(</div>';
}
4. Código Final
<?php
require('conexion.php');
if(isset($_POST['boton'])){
if($_POST['nombre'] == ''){
$error1 = '<span class="error">Ingrese su nombre</span>';
}else if($_POST['email'] == '' or !preg_match("/^[a-zA-Z0-9_\.\-]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-\.]+$/",$_POST['email'])){
$error2 = '<span class="error">Ingrese un email correcto</span>';
}else if($_POST['asunto'] == ''){
$error3 = '<span class="error">Ingrese un asunto</span>';
}else if($_POST['mensaje'] == ''){
$error4 = '<span class="error">Ingrese un mensaje</span>';
}else{
$dest = "tu@email.com"; //Email de destino
$nombre = $_POST['nombre'];
$email = $_POST['email'];
$asunto = $_POST['asunto']; //Asunto
$cuerpo = $_POST['mensaje']; //Cuerpo del mensaje
//Cabeceras del correo
$headers = "From: $nombre <$email>\r\n"; //Quien envia?
$headers .= "X-Mailer: PHP5\n";
$headers .= 'MIME-Version: 1.0' . "\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n"; //
if(mail($dest,$asunto,$cuerpo,$headers)){
foreach($_POST AS $key => $value) {
$_POST[$key] = mysql_real_escape_string($value);
}
$sql = "INSERT INTO `cf` (`nombre`,`email`,`asunto`,`mensaje`) VALUES ('{$_POST['nombre']}','{$_POST['email']}','{$_POST['asunto']}','{$_POST['mensaje']}')";
mysql_query($sql) or die(mysql_error());
$result = '<div class="result_ok">Email enviado correctamente <img src="https://tursos.com/wp-includes/images/smilies/icon_smile.gif" alt=":)" class="wp-smiley"> </div>';
// si el envio fue exitoso reseteamos lo que el usuario escribio:
$_POST['nombre'] = '';
$_POST['email'] = '';
$_POST['asunto'] = '';
$_POST['mensaje'] = '';
}else{
$result = '<div class="result_fail">Hubo un error al enviar el mensaje <img src="https://tursos.com/wp-includes/images/smilies/icon_sad.gif" alt=":(" class="wp-smiley"> </div>';
}
}
}
?>
<html>
<head>
<title>Contacto</title>
<link rel='stylesheet' href='estilos.css'>
<script src='http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js'></script>
<script src='funciones.js'></script>
</head>
<body>
<form class='contacto' method='POST' action=''>
<div><label>Tu Nombre:</label><input type='text' class='nombre' name='nombre' value='<?php echo $_POST['nombre']; ?>'><?php echo $error1 ?></div>
<div><label>Tu Email:</label><input type='text' class='email' name='email' value='<?php echo $_POST['email']; ?>'><?php echo $error2 ?></div>
<div><label>Asunto:</label><input type='text' class='asunto' name='asunto' value='<?php echo $_POST['asunto']; ?>'><?php echo $error3 ?></div>
<div><label>Mensaje:</label><textarea rows='6' class='mensaje' name='mensaje'><?php echo $_POST['mensaje']; ?></textarea><?php echo $error4 ?></div>
<div><input type='submit' value='Envia Mensaje' class='boton' name='boton'></div>
<?php echo $result; ?>
</form>
</body>
</html>
Con eso hemos terminado esta ultima parte del formulario (por ahora), recuerda que puedes descargarte el código fuente en este enlace.
Si no entendiste una parte o tienes alguna duda, házmela saber en los comentarios.
yudith dice
coloque pasos para hacer una pagina web esta excelente todos los tutoriales
Alex Torres dice
Para no tener que escribir tanto $_Post[‘variable’] yo les recomendaria que abajo de include(«conexion.php») simplemente escriban el siguiente codigo:
import_request_variables(«GP», «»);
Y de esta manera traten las variables como si las estuvieran declarando en el mismo documento.
saludotes, chao 🙂
Josue dice
A partir de 5.4 esa funcion fue eliminada, remplazada por extract.
Santiago dice
Hola Josue, quisiera saber si se podria realizar Formularios de contactos, basados solo en HTML y CSS y validarlos(No en PHP), he estado leyendo casi toda tu pagina y solo vi q validaste para PHP y no para html pues estoy trabajando en esos formatos para crear una pagina web, no se mucho sobre esta materia, espero que me puedas ayudar, te antemano se agradece.
Josue Ochoa dice
La validación para HTML (cliente) la realiza JavaScript y PHP es necesario para realizar el envio, una solución podrÃa ser Wufoo, no necesitas PHP solo lo embebes en cualquier pagina y listo.
Santiago dice
Buenos dias, yo copie el codigo tal cual, cree la tabla en una base de datos mia en el localhost. Tengo prendido el xaamp corriendo el apache y el mysql y sin embargo no me funciona. Cuando lo ejecuto en el navegador me tira el codigo directamente. Si lo corro en el «Coda» en la parte de preview me lo visualiza pero al enviar me aparece el codigo. Espero una respuesta si es posible, muchas gracias.
Josue dice
«el navegador me tira el codigo directamente» te sale el código en forma literal? explÃcame esa parte, si es lo que pienso te haz fijado si estas accediendo mediante http://localhost/..
Santiago dice
al ponerle el localhost me tira: Object not found!
The requested URL was not found on this server. If you entered the URL manually please check your spelling and try again.
If you think this is a server error, please contact the webmaster.
Error 404
localhost
Wed Dec 19 00:01:46 2012
Apache/2.2.14 (Unix) DAV/2 mod_ssl/2.2.14 OpenSSL/0.9.8l PHP/5.3.1 mod_perl/2.0.4 Perl/v5.10.1
Y si tengo prendido el xaamp y la ruta de acceso esta bien. En el preview del editor de texto «Coda 2 » me tira todo pero cuando le doy send o boton de enviar me lanza el codigo direcamente.
Josue Ochoa dice
Pues no funciona tu servidor local, prueba http://localhost:8888, o en ultima instalate http://www.mamp.info/en/index.html que es mejor para Mac.
Santiago dice
ahi me instale el mamp y me sigue tirando el mismo error, sinceramente no se que es lo que sucede, porque el codigo lo copie tal cual.
Santiago dice
En el codigo cambie el require por el include porque si no no me lo muestra ni en el coda, y me tira este error: («Coda 2») Warning: include(conexion.php): failed to open stream: No such file or directory in – on line 11 Warning: include(): Failed opening ‘conexion.php’ for inclusion (include_path=’.:’) in – on line 11
Josue Ochoa dice
Fijate la ubicacion de conexion.php, pero te funciona el MAMP? puedes entrar a http://localhost:8888 y ver la pagina de inicio?
Santiago dice
sisis me funciona, porque entro a la pagina de inicio tipeando http://localhost:8888. conexio.php lo tengo en el desktop, donde tengo los demas archivos. Igual estuve viendo y ni siquiero un
me lo imprime correctamente. Me aparece el codigo directo
Josue dice
Haz definido que sea el Desktop tu directorio web en MAMP?
Santiago dice
ahhh no ahi me fijo. Muchas gracias.:)
Santiago dice
era eso, muchas gracias.
Pedrog dice
Buenos dÃas y felicidades a todos.
Tengo un problema, almaceno un id de session en una variable y cuando lo inserta en la base de datos me mete otro, no se que hacer ya. Lo hago asÃ:
$id_user = session_id();
if(empty($id_user))
{
session_start();
}
$id_user = session_id();
Alguien puede ayudarme?
Josue Ochoa dice
El segundo $id_user = session_id(); no deberÃa ir dentro de la condición antes que cierre el } ?
pedrog dice
Hola a todos. Gracias Josue. No, la segunda variable va fuera, si no me daba errores. Ya he descubierto por qué era: simplemente porque habÃa creado el campo en la BBDD demasiado pequeño (un varchar de 26) y la cadena era mayor… si es que estoy tonto!!
Muchas gracias a todos.
Dani dice
Jola Josue,
Muchas gracias por tus explicaciones, me puede venir muy bien para introducir datos en una base de datos que ya tengo.
y ahà está mi problemilla, porque cuando relleno el formulario me dice No database selected
Como es lógico, pues en mi caso, la tabla en la que quiero escribir (customer) está dentro de la dase de datos (dbxxxxxxxx9). Cómo lo conecto?
Un saludo!
Josue Ochoa dice
Maria dice
Hola, espero me pueda ayudar; estoy usando en WampServer, copie el código tal cual lo descargue de la página y me envÃa el siguiente error:
Warning: mysql_connect() [function.mysql-connect]: Access denied for user ‘root’@’localhost’ (using password: YES) in C:\wamp\www\codigofuente\conexion.php on line 7.
Sin embargo no tengo contraseña, definida
Josue dice
Hola Maria, la password en un servidor local normalmente es root tambien, prueba con esa.
Dani dice
Buenas, Josue!
Cuando ejecuto en el XAMPP mi IP me sale este error:
Warning: mysql_connect(): Access denied for user ‘root’@’localhost’ (using password: YES) in C:\xampp-portable\htdocs\conexion.php on line 7
Error conectando a la base de datos
¿Alguna sugerencia?
Gracias de antemano!
Dani dice
Muy rápido… 🙂 Vi lo que le respondiste a MarÃa, pero donde coloco la contraseña? en «conexion.php»?
Josue dice
en $pass:
Daniel dice
Hola Amigo primero que todo felicitarte por tu trabajo es excelente yo modifique tu formulario para hacer un registro de matriculas todo ok en la BD y todo pero tengo una consulta como envio todo el contenido a mi email de igual manera que a la BD ya que en tu form solo esta enviando el mensaje escrito al email nuestro yo quiero de igual maneraque me lleguen todos los datos a un email, aparte de lo que se guarda en la base de datos me podris indicar que hago para hacer esto
de antemano muchas gracias
Josue Ochoa dice
Con mail(), mira la parte 3: https://tursos.com/tutoriales/php/como-hacer-un-formulario-de-contacto-iii-validar-y-enviar-con-php
alea dice
hola buenas, como podria hacer para que un correo determinado me salga por defecto en un formulario, me explico si el formulario fuera de una pagina web de una tienda que el correo fuera o bien del vendedor del producto o del administrador por defecto, cuando el usuario estuviera interesado en un producto.
muchas gracias.
Josue Ochoa dice
Lo defines en el atributo value, ej:
Mario dice
Hola Josue, me gustarÃa saber como poner una condicional ya que es para una newsletter… necesito que sólo envie el correo cuando el checkbox este encendido… No sé donde fallo:
<?php
require("conexion.php");
if(isset($_POST['boton'])){
if($_POST['email'] == '' or !preg_match("/^[a-zA-Z0-9_\.\-]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-\.]+$/",$_POST['email'])){
$error2 = 'Ingrese un email correcto’;
}else if(isset($_POST[‘validar’]) && $_POST[‘validar’] == ‘1’)
echo ‘Has aceptado correctamente las condiciones de uso.’;
else
echo ‘Debes aceptar las condiciones de uso.’;
}else{
$dest = «info@camisetas-piopio.com»; //Email de destino
$email = $_POST[‘email’];
$cuerpo = $_POST[‘mensaje’];
//Cabeceras del correo
$headers = «From: $email\r\n»; //Quien envia?
$headers .= «X-Mailer: PHP5\n»;
$headers .= ‘MIME-Version: 1.0’ . «\n»;
$headers .= ‘Content-type: text/html; charset=iso-8859-1’ . «\r\n»; //
Muuuuchas gracias.
Josue Ochoa dice
https://tursos.com/tutoriales/javascript/como-validar-checkboxes-radiobuttons-y-selects-con-jquery
joseaceved dice
funciona con el wamp?
Josue Ochoa dice
No habria porque no.
joseaceved dice
pense que es el wamp porque me pone codigo en todas las casillas, la lleno con nombre, email y texto y le doy a enviar en boton pero se envia la informacion se queda en el formulario.
joseaceved dice
perdon que puse se envia, es lo contrario no se envia la informacion se queda en el formulario
Engerbert dice
Buenas tardes tu codigo esta excelente, pero al tratar de correrlo con el sistema operativo windows genera varios errores:
Notice: Undefined variable: Nombre in C:\wamp\www\lenguaje_de_programacion_II\examen_formulario_con_foto_y_db\index.php on line 53
Notice: Undefined variable: error1 in C:\wamp\www\lenguaje_de_programacion_II\examen_formulario_con_foto_y_db\index.php on line 53
Notice: Undefined index: email in C:\wamp\www\lenguaje_de_programacion_II\examen_formulario_con_foto_y_db\index.php on line 54
Notice: Undefined index: error2 in C:\wamp\www\lenguaje_de_programacion_II\examen_formulario_con_foto_y_db\index.php on line 54
y asi con todas las variables que continuan despues de esa linea
Si me puedes ayudar a corregir te lo agradezco, estoy usando WampServer Version 2.2, gracias.
Josue Ochoa dice
No son errores, son solo notificaciones, algunas instalaciones de PHP reportan eso cuando no se han declarado variables, pon el siguiente codigo:
error_reporting(0);
Engerbert dice
Buenas tardes, para confirmar, el codigo que me dices es:
error_reporting(0);
o solo: error_reporting(0);
gracias
Josue Ochoa dice
Cualquiera pero ponlo dentro de PHP <?php
Engerbert dice
Diculpa ya lo coloque en el codigo y nada, si gustas te puedo encviar un print screen para que lo veas
Josue Ochoa dice
Pon tu código.
Engerbert dice
Contacto
error_reporting(0);
<?php
require('conexion.php');
if(isset($_POST['boton'])){
if($_POST['nombre'] == ''){
$error1 = "Ingrese su nombre»;
}else if($_POST[‘email’] == » or !preg_match(‘/^[a-zA-Z0-9_\.\-]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-\.]+$/’,$_POST[‘email’])){
$error2 = «Ingrese un email correcto»;
}else if($_POST[‘asunto’] == »){
$error3 = «Ingrese un asunto»;
}else if($_POST[‘mensaje’] == »){
$error4 = «Ingrese un mensaje»;
}else{
$dest = ‘tu@email.com’; //Email de destino
$nombre = $_POST[‘nombre’];
$email = $_POST[‘email’];
$asunto = $_POST[‘asunto’]; //Asunto
$cuerpo = $_POST[‘mensaje’]; //Cuerpo del mensaje
//Cabeceras del correo
$headers = ‘From: $nombre $email\r\n’; //Quien envia?
$headers .= ‘X-Mailer: PHP5\n’;
$headers .= ‘MIME-Version: 1.0’ . ‘\n’;
$headers .= ‘Content-type: text/html; charset=iso-8859-1’ . ‘\r\n’; //
if(mail($dest,$asunto,$cuerpo,$headers)){
$sql = «INSERT INTO `cf` (`nombre`,`email`,`asunto`,`mensaje`) VALUES (‘{$_POST[‘nombre’]}’,'{$_POST[‘email’]}’,'{$_POST[‘asunto’]}’,'{$_POST[‘mensaje’]}’)»;
mysql_query($sql) or die(mysql_error());
$result = «Email enviado correctamente :)»;
// si el envio fue exitoso reseteamos lo que el usuario escribio:
$_POST[‘nombre’] = »;
$_POST[‘email’] = »;
$_POST[‘asunto’] = »;
$_POST[‘mensaje’] = »;
}else{
$result = «Hubo un error al enviar el mensaje :(«;
}
}
}
?>
Tu Nombre:<input type='text' class='nombre' name='nombre' value='’>
Tu Email:<input type='text' class='email' name='email' value='’>
Asunto:<input type='text' class='asunto' name='asunto' value='’>
Mensaje:
Josue Ochoa dice
El error_reporting tienes que ponerlo dentro del <?php, las etiquetas <code> son solo para que aparezca como codigo aqui en los comentarios, tu codigo deberia quedar:
Engerbert dice
Si ahora si entendà lo que me decÃas, pasado e bruto (yo), es que el error_reporting va dentro del php y que la etiqueta code no va en ninguna parte, pasao e bruto (yo), gracias, ahora si se muestra perfectamente como en mi debian. Como dicen el que no sabe es como el que no ve y el que no pregunta nunca aprende. Ahora me queda resolver el porque no envÃa el mensaje. Gracias
Antonio dice
Hola,
Gracias por compartir un tan buen formulario de contacto, Quisiera agregar la fecha y hora ademas de la IP del visitante. en el formulario pero me da resultado en la consulta Fecha: 0000-00-00 00:00:00, la IP ni me la graba. Lo tengo puesto asÃ:
}else{
$dest = «mi-email»; //Email de destino
$nombre = $_POST[‘nombre’];
$email = $_POST[‘email’];
$asunto = $_POST[‘asunto’]; //Asunto
$cuerpo = $_POST[‘mensaje’]; //Cuerpo del mensaje
$date = $_POST[‘date’];
$ip = $_POST[‘ip’];
……
if(mail($dest,$asunto,$cuerpo,$headers)){
if(mail($dest,$asunto,$cuerpo,$headers)){
foreach($_POST AS $key => $value) {
$_POST[$key] = mysql_real_escape_string($value);
}
$sql = «INSERT INTO `cf` (`nombre`,`email`,`asunto`,`mensaje`,`date`,`ip`) VALUES (‘{$_POST[‘nombre’]}’,'{$_POST[‘email’]}’,'{$_POST[‘asunto’]}’,'{$_POST[‘mensaje’]}’,'{$_POST[‘date’]}’,'{$_POST[‘ip’]}’)»;
…..
Muchisimas Gracias
Josue Ochoa dice
$date = $_POST[‘date’];
$ip = $_POST[‘ip’];
¿date e ip son valores que el usuario proporciona en el formulario?
Antonio dice
Cuando este completo plasmo el formulario para ampliar el tuyo
Antonio dice
No Josue, son capturados por el servidor, pero con tantos cambios que he creado lo tengo todo para empezar de 0, no estoy muy habituado a usar bases de datos
Jorge dice
Estimado
Agregue a mi formulario una lista desplegable con varias opciones y me gustarÃa que al seleccionar una u otra opción apareciera un cuadro de texto correspondiente a la opción señalada. ¿Como me recomiendas hacerlo?.
Saludos.-
Josue Ochoa dice
Con jQuery http://api.jquery.com/change/
Engerbert dice
Buenas, hice los cambios inclui el codigo y los mensajes desaparecieron, el formulario funciona pero no envia correos utilizando windows xp sp3 con wamserver, desactive el firewall, el antivirus, instale iis con los complementos smtp pero no envia los mensajes o por lo menos no sale de mensaje no enviado
John Joseph dice
Es muy bueno tu código para mail.
Necesito conectar una base de datos con dos tablas de MySQL a un formulario WEB que código fuente me recomendarÃas. Es para un foro de propuestas.
Esta es la estructura de la tabla y las estoy desarrollando con PHP5.
CREATE TABLE `propuestas`
(
id_propuesta int(11) NOT NULL auto_increment,
id_usuario int(11) default NULL,
Seccion varchar(255) default NULL,
Sugerencia varchar(255) default NULL,
fecha datetime default NULL,
tema varchar(50) default NULL,
PRIMARY KEY (`id_propuesta`)
) ENGINE=MyISAM AUTO_INCREMENT=129 DEFAULT CHARSET=utf8
—————————————————————
CREATE TABLE `usuarios` (
`id_usuario` int(11) NOT NULL auto_increment,
`Nombre` varchar(255) default NULL,
`Usuario` varchar(255) default NULL,
`Password` varchar(255) default NULL,
`Mail` varchar(255) default NULL,
`ubicacion` varchar(255) default NULL,
PRIMARY KEY (`id_usuario`)
) ENGINE=MyISAM AUTO_INCREMENT=205 DEFAULT CHARSET=utf8
John Joseph dice
En PROPUESTAS se almacenan las propuestas de la gente respecto a temas de educacion, salud, gobierno.
Y en USUARIOS valido la sesión de cada usuario.
Fernando dice
Lo subi a mi host, y no se que pasa cuando doy enviar me redireciona y dice «No database selected», que tendria que hacer?
mario dice
no cache niuna de mysql :/ ayudame porfa
Andres MP dice
hola muy buenos tus codigos excelente el formulario.
mira tengo el siguiente problema me sale este mensaje de error Warning: mail() [function.mail]: Failed to connect to mailserver at «localhost» port 25, verify your «SMTP» and «smtp_port» setting in php.ini or use ini_set() in C:ServidorWEBindex2.php on line 25 no se si puedas ayudarme
josueochoa dice
En localhost no te va a funcionar.
Alessandro Degiusti dice
me da error: (el codigo que use es el de la descarga de todo) osea, los datos se guardan en la base de datos, pero muestra esos errores
Jaime Rioseco Rioseco dice
Estimado, resolviste esto?
lorena dice
un 10, mil gracias excelente la explicación voy a estar pendiente de tu blog =)
Jovanny Casimiro Galindez dice
que tal amigo, una pregunta, este archivo descargble…es el mismo del de los 2 temas anteriores?
Carmen dice
Hola Josue,
Ante todo, gracias por este exelente tutorial; subi el ejemplo a mi servidor y todo funciona OK.
Mi
consulta: tengo un formulario con 10 campos de los cuales solo 5 seran
obligatorios; entonces no tengo idea de como declarar los campos no
obligatorios en la parte php correspondiente.Gracias por tu ayuda.
josueochoa dice
Simplemente obvialos en la cadena de condicionales (if…else).
Carmen dice
Gracias Josue,
Ahora tengo un pequeño problema, al enviar el formulario el aviso en verde de mail enviado correctamente no desaparece y si intento refrescar la pagina me sale el mensaje de firefox que todos los datos se volveran a enviar (aunque todos los campos estan vacios) y aun asi si reenvio; este mensaje en verde no desaparece. Espero tu respuesta, saludos.
Nicolás Arce dice
Hola me sale esto :/
You have an error in your SQL syntax; check the manual that corresponds
to your MySQL server version for the right syntax to use near ‘comuna`)
VALUES (‘Nicolás Arce’,’Croquis web’,’Nicolás Arce’,’contacto@croquis’
at line 1
WebTursos dice
Cual es tu código PHP? eso sale cuando tienes un error de comillas.
Leo dice
Hola Josue, implemente tus codigos a mi formulario y todo esta bien;
pero necesito ayuda para lo siguiente: tengo dos campos de telefonos
(fijo y celular) y deseo hacer que solo uno de ellos sea obligatorio y
ademas que estos campos solo acepten numeros. Yo he logrado hacer la
eleccion de uno de los campos, pero cuando quiero que solo acepte
numeros alli reside mi problema, adjunto las modificaciones de mi
archivo JS.
$(document).ready(function() {
var emailreg = /^([w-.]+@([w-]+.)+[w-]{2,4})?$/;
var telreg = /^([0-9+s+-])+$/;
$(«.boton»).click(function(){
$(«.error»).fadeOut().remove();
if ($(«.nombres»).val() == «» || /^s+$/.test($(«.nombres»).val())) {
$(«.nombres»).focus();
$(«.a»).after(‘(*) Nombres obligatorio’);
return false;
}
if ($(«.email»).val() == «» || !emailreg.test($(«.email»).val())) {
$(«.email»).focus();
$(«.b»).after(‘(*) Ingrese un email correcto’);
return false;
}
if ($(«.tel_fijo»).val() == «» && $(«.tel_celular»).val() ==»») {
$(«.tel_fijo»).focus();
$(«.c»).after(‘(*) Al menos un telefono es obligatorio’);
return false;
}
if ($(«.mensaje»).val() == «») {
$(«.mensaje»).focus();
$(«.d»).after(‘(*) Falta su mensaje’);
return false;
}
});
$(«.nombres, .mensaje»).bind(‘blur keyup’, function(){
if ($(this).val() != «») {
$(‘.error’).fadeOut();
return false;
}
});
$(«.tel_fijo»).bind(‘blur keyup’, function(){
if ($(«.tel_fijo»).val() != «» && telreg.test($(«.tel_fijo»).val())) {
$(‘.error’).fadeOut();
return false;
}
});
$(«.tel_celular»).bind(‘blur keyup’, function(){
if ($(«.tel_celular»).val() != «» && telreg.test($(«.tel_celular»).val())) {
$(‘.error’).fadeOut();
return false;
}
});
$(«.email»).bind(‘blur keyup’, function(){
if ($(«.email»).val() != «» && emailreg.test($(«.email»).val())) {
$(‘.error’).fadeOut();
return false;
}
});
});
De ante mano gracias por su ayuda.
Angel Guillermo Marin Aguirre dice
oye ya tngo el formulario y los datos guardados en mysql pero lo que me gustaria saver es como puedo lograr hacer el login comparando los datos que introduce el usuario(nombre de usuario y contraseña) con los que ya tengo guardados en la base d datos gracias de antemano
josueochoa dice
Este tutorial es sobre como hacer un formulario de contacto.
Javier Seclen dice
Josue:
El formulario completo me parece que no funciona para localhost?
Si fuera asi por que? TendrÃa que probarlo en un servidor que no fuera local?
Gracias por tu pronta respuesta,
Javier S.
josueochoa dice
No funciona porque desde localhost no puedes enviar emails, necesita estar en un servidor real.
Eduard dice
Hola buenas, antes de nada agradecer este tutorial es muy bueno y muy bien explicado, estoy usando el formulario para añadir a la base de datos para enviar newsletters, me gustarÃa mucho que me dijeras como hacer un botón para darse de baja y que borre el email automáticamente de la base de datos.
También decir que cuando rellenan los datos del formulario satisfactoriamente me llega el correo sin ninguna información pero en la bd esta correctamente.
josueochoa dice
Crea un archivo delete.php, pero para borrar una fila especifica necesitas el id, este lo vamos a obtener por GET, cosa que al final el link seria asà delete.php?id=3, el código que contiene delete.php es: https://gist.github.com/josueochoa/6073274, obviamente tendrÃas que cambiar varias cosas en el archivo, como la ubicación de conexion.php y los nombres de tus campos.
Eduard dice
Solo poniendo eso con una casilla de formulario, ya se dará de baja y se borraran todos los campos que contienen ese id?
Cuando recibo el email me llega con el contenido en blanco, como lo puedo arreglar, para que se vea la información que han rellenado en el formulario, en teorÃa esta echo asà ya no?
En la base de datos todos las palabras que contienen acentos se ven extraños y aveces no se pueden leer, como puedo arreglar esto? piensa que lo esta utilizando en catalán y castellano, y el catalán tiene acentos cerrados ««».
Hay alguna manera, para que no se dupliquen los datos? es decir los correos electrónicos. Que no se puedan dar de alta si ya lo han echo una vez.
Josue David Montoya dice
Buen dÃa necesito que puedas ayudar en algo…como hacer en un formulario para que genere un numero para cada persona que se inscriba. muchas gracias y muy buenos los ejemplos.
josueochoa dice
Puedes utilizar el campo id que se genera cada vez que alguien envia un mensaje, si lo que quieres es hacer algo como un registro te recomiendo veas este tutorial: https://tursos.com/como-hacer-un-sistema-de-registro-de-usuarios-en-php-mysql/
douglasfugazi dice
Buenas, como hacer para que el formulario se le pueda subir una imagen, pero que la imagen se guarde no en la base de datos si no en una carpeta del ftp ? gracias
Edison dice
Me da este error: Warning: mail() [function.mail]: Failed to connect to mailserver at «localhost» port 25, verify your «SMTP» and «smtp_port» setting in php.ini or use ini_set() in C:wampwwwcfdb_codigofuenteindex.php on line 25
josueochoa dice
No te va a funcionar en localhost.
Felipe Delgado Bohorquez dice
He hecho todo y me sigue diciendo que Ingrese un Email Correcto! Como resuelvo eso Gracias.
Antonio Traverso dice
Estimado Josué,
A tu formulario creo que le hace falta un poco de código extra, para la auto respuesta. Te dejo este trozo de código y ahà me dices si está bien o no y dónde insertarlo (creo que antes del else por si hubo errores):
//Enviando auto respuesta.
$pfw_header = «From: empresa@gmail.comn»
. «Reply-To: empresa@gmail.comn«;
$pfw_subject = «Mensaje recibido exitosamente»;
$pfw_email_to = «$email»;
$pfw_message = «Muchas Gracias $Nombre, por su Solicitud:
$Texton»
. «Su mensaje ha sido recibido satisfactoriamente. n»
. «Nos pondremos en contanto contigo lo antes posible en su e-mail: $email n»
. » n»
. » n»
. «————————————————————————–n»
. «Favor de NO responder este E-mail ya que es generado Automaticamente.n»
. «Atte. Empresa.comn»
. «www.empresa.com»;
@mail($pfw_email_to, $pfw_subject ,$pfw_message ,$pfw_header ) ;
//Fin de Auto responder
Saludos y excelente tu sitio
Soporte Goitia dice
Saludos estaba usando anteriormente un formulario parecido a este y quisiera implementar la validacion completamente que usas en este. No he podido hacerlo ya que mi formulario solo estaba en principio archivando los datos en un archivo de texto. Y me tranque en la informacion que imprime tu formulario en caso de que resulte positivo el envio del mail daria «result ok!» en mi caso seria en caso de que se haya abierto el archivo de texto llamado «datos txt» y se haya escrito los datos correctamente daria «result ok» te adjunto mi codigo de apertura del archivo de texto, grabado de datos y cierre del mismo.
Cesar Manrique dice
hola, me sale este error , pero los datos se envÃan de forma correcta
Warning: mail() [function.mail]: Filename cannot be empty in /home/u848700000/public_html/forcotiza/index.php on line 25
Gera Vic dice
amigo ¿como puedo modificar la informacion una ves insertada en la base de datos desde otro formulario?
Juan dice
Hola, estoy interesasdo en ofrecerte servicios de agenciamiento, esto quiere decir en pasarte 10 clientes gratis y que el 11vo cliente pueda yo tener una comision en base a ello, si estas interesado escribirme a mi correo hermeneutico25789@gmail.com. Saludos