Quiero insertar los datos de un formulario en una base de datos mysql. Para ello tengo la pagina principal (en php), una clase js donde se realiza la validación y la creación del ajax, y un php que se encarga de subir los datos a la base.
La cosa queda así:
La parte del formulario:
Código HTML:
<?php include("./php/configuracion.inc.php"); $link=conectar($bd_host,$bd_usuario,$bd_pwd,$bd_nombre); $c=mysql_query("select * from Dias",$link); ?> <form id="formlista" > <table class="Discotecas"> <tr> <td width="260" height="30" style="text-align:right"><label>Día: </label></td> <td width="334"><select id="Dias" onChange='cargaDias(this.value)'> <option value="0">- Selecciona un día -</option> <?php echo mysql_error(); while($r=mysql_fetch_array($c)){ echo "<option value=".$r['idDia'].">".$r['nombreDia']."</option>"; } ?> </select></td> </tr> <tr> <td height="30" style="text-align:right"><label>Discotecas: </label></td> <td><select id="Discoteca" disabled="disabled" onChange='cargaDisco(this.value)'> </select><img src="images/loading.gif" alt="Cargando" name="imgDisco" width="30" height="26" id="imgDisco" style="display:none"/></td> </tr> <tr> <td height="30" style="text-align:right;"><label>Hora límite: </label></td> <td><div id="Hlimite" class="listas" style="height:20px; width:70px"></div></td> </tr> <tr> <td height="30" style="text-align:right; vertical-align:top"><label>Evento: </label></td> <td><div id="Evento" class="listas" style="height:50px; width:320px"></div></td> </tr> <tr> <td height="30" style="text-align:right; vertical-align:top"><label>Información: </label></td> <td><div id="Informacion" class="listas" style="height:50px; width:320px"></div></td> </tr> <tr> <td height="30" style="text-align:right;"> <label>Personas en lista: </label> </td> <td><input class="input1" type="text" id="lisNom1" style="width:140px"> + <select id="mas1" style="width:40px"> <option value="0">0</option> <option value="1">1</option> <option value="2">2</option> </select> </td> </tr> <tr> <td></td> <td> <input class="input1" type="text" id="lisNom2" style="width:140px"> + <select id="mas2" style="width:40px"> <option value="0">0</option> <option value="1">1</option> </select> </td> </tr> <tr> <td height="30" style="text-align:right;"><label>Teléfono: </label></td> <td> <input class="input1" type="text" id="listelefono" style="width:140px"></td> </tr> <tr> <td height="30" style="text-align:right;"><label>e-mail: </label></td> <td> <input class="input1" type="text" id="lisemail" style="width:140px"></td> </tr> <tr> <td></td> <td> <p></p> <button id="botonEnviar" class="boton" onClick="validaListas()">Enviar</button></td> </tr> </table> </p> </form>
La clase js:
Código:
Este js tiene dos validadores para un formulario de contacto y para el formulario principal. El que interesa es ValidaListas()// Variables para setear onload=function() { lisNom1=document.getElementById("lisNom1"); lisNom1=document.getElementById("lisNom1"); mas1=document.getElementById("mas1"); mas2=document.getElementById("mas2"); listelefono=document.getElementById("listelefono"); lisemail=document.getElementById("lisemail"); Dia=document.getElementById("Dias"); Discoteca=document.getElementById("Discoteca"); formlista=document.getElementById("formlista"); urlDestino2="../php/lismail.php"; preCarga("images/ok.gif", "images/loading.gif", "images/error.gif"); } function preCarga() { imagenes=new Array(); for(i=0; i<arguments.length; i++) { imagenes[i]=document.createElement("img"); imagenes[i].src=arguments[i]; } } function nuevoAjax() { var xmlhttp=false; try { // No IE xmlhttp=new ActiveXObject("Msxml2.XMLHTTP"); } catch(e) { try { // IE xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); } catch(E) { xmlhttp=false; } } if (!xmlhttp && typeof XMLHttpRequest!="undefined") { xmlhttp=new XMLHttpRequest(); } return xmlhttp; } function limpiaForm() { for(i=0; i<=1; i++) { form.elements[i].className=claseNormal; } document.getElementById("inputComentario").className=comentNormal; } function campoError(campo) { campo.className=claseError; error=1; } function ocultaMensaje() { divTransparente.style.display="none"; } function muestraMensaje(mensaje) { divMensaje.innerHTML=mensaje; divTransparente.style.display="block"; } function eliminaEspacios(cadena) { // Funcion para eliminar espacios delante y detras de cada cadena while(cadena.charAt(cadena.length-1)==" ") cadena=cadena.substr(0, cadena.length-1); while(cadena.charAt(0)==" ") cadena=cadena.substr(1, cadena.length-1); return cadena; } function validaLongitud(valor, permiteVacio, minimo, maximo) { var cantCar=valor.length; if(valor=="") { if(permiteVacio) return true; else return false; } else { if(cantCar>=minimo && cantCar<=maximo) return true; else return false; } } function validaCorreo(valor) { var reg=/(^[a-zA-Z0-9._-]{1,30})@([a-zA-Z0-9.-]{1,30}$)/; if(reg.test(valor)) return true; else return false; } function validaForm() { limpiaForm(); error=0; var nombre=eliminaEspacios(form.inputNombre.value); var correo=eliminaEspacios(form.inputCorreo.value); var comentarios=eliminaEspacios(form.inputComentario.value); if(!validaLongitud(nombre, 0, 4, 50)) campoError(form.inputNombre); if(!validaCorreo(correo)) campoError(form.inputCorreo); if(!validaLongitud(comentarios, 0, 5, 500)) campoError(form.inputComentario); if(error==1) { var texto="<img src='images/error.gif' alt='Error'><br><br>Error: revisa los campos en rojo.<br><br><button style='width:45px; height:18px; font-size:10px;' onClick='ocultaMensaje()' type='button'>Ok</button>"; muestraMensaje(texto); } else { var texto="<img src='images/loading.gif' alt='Enviando'><br>Enviando...<br><br><button style='width:60px; height:18px; font-size:10px;' onClick='ocultaMensaje()' type='button'>Ocultar</button>"; muestraMensaje(texto); var ajax=nuevoAjax(); ajax.open("POST", urlDestino, true); ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); ajax.send("nombre="+nombre+"&correo="+correo+"&comentarios="+comentarios); ajax.onreadystatechange=function() { if (ajax.readyState==4) { var respuesta=ajax.responseText; if(respuesta=="OK") { var texto="<img src='images/ok.gif' alt='Ok'><br>Gracias por tu mensaje.<br>Te responderemos en la mayor brevedad posible.<br><br><button style='width:45px; height:18px; font-size:10px;' onClick='ocultaMensaje()' type='button'>Ok</button>"; } else var texto="<img src='error.gif'><br><br>Error: intentalo más tarde.<br><br><button style='width:45px; height:18px; font-size:10px;' onClick='ocultaMensaje()' type='button'>Ok</button>"; muestraMensaje(texto); } } } } function validaTel(valor) { if( !(/^\d{9}$/.test(valor))) return false; else return true; } function validaListas() { var lisNom1=eliminaEspacios(formlista.lisNom1.value); var lisNom2=eliminaEspacios(formlista.lisNom2.value); var listelefono=eliminaEspacios(formlista.listelefono.value); var lisemail=eliminaEspacios(formlista.lisemail.value); var resultado="Errores:\n"; var error=0; if(!validaLongitud(lisNom1, 0, 4, 50)){ resultado+="-Debes rellenar el campo 'Personas en lista'\n"; error=1; } if(!validaCorreo(lisemail)){ resultado+="-Debes rellenar tu e-mail\n"; error=1; } if(!validaTel(listelefono)){ resultado+="-Debes rellenar el campo número\n"; error=1; } if(error==1) alert(resultado); else { var ajax=nuevoAjax(); ajax.open("POST", urlDestino2, true); ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); ajax.send("nombre1="+lisNom1+"&nombre2="+lisNom2+"&mas1="+mas1+"&mas2="+mas2+"&email="+lisemail+"&telefono="+listelefono+"&Dia="+Dia+"&Discoteca="+Discoteca); ajax.onreadystatechange=function() { if (ajax.readyState==4) { var respuesta=ajax.responseText; if(respuesta=="OK") { alert("Apuntado en la lista. Revisa tu correo por favor"); }else alert("Ocurrió un error, intentalo de nuevo mas tarde"); } } } } // Mensajes de ayuda if(navigator.userAgent.indexOf("MSIE")>=0) navegador=0; else navegador=1;
Y por último el php:
Código PHP:
<?php
if($_POST)
{
include("php/configuracion.inc.php");
foreach($_POST as $clave => $valor) $$clave=addslashes(trim(utf8_decode($valor)));
$link=conectar($bd_host,$bd_usuario,$bd_pwd,$bd_nombre);
mysql_query("insert into reservas(idDia,discoteca,nombre1,mas1,nombre2,mas2,email,telefono) VALUES($Dia,$Discoteca,$nombre1,$mas1,$nombre2,$email,$telefono)",$link);
echo "OK";
}
echo "0K";
?>
Muchas gracias de antemano y perdonad lo farragoso del código, como he dicho, soy novato.