Ayudando a una amiga me eh puesto a desarrollar un pequeño proyecto en PHP y Mysql.
Todo iba bien hasta que me dijo que su profesor queria que utilize los ultimos lenguajes y todo eso, osea Javascript, Jquery, Ajax y bueno es como si me hubieran hablando de la teoria de la relatividad, pero buscando en la web manuales foros recomendaciones logre hacer algo bonito o bueno pasable.
Primero les explico como esta estructurada la pagina (espero y no sea muy largo)
Tengo una pagina menu, en el cual eh creado mi menu con CSS, dentro de esta pagina tengo dos div, los cuales uso como contenedores para la pagina del formulario y para el script php que sirve para seleccionar los datos.
Script de la pagina principal con el menu.
Código HTML :
<?php session_start(); if (!isset($_SESSION['nombre_usuario'])) { header("Location: index.html"); } ?> <header> <center> <img src="img/encabezado.png"> </center> </header> <center> <nav id = "menu"> <ul id = "nav"> <li><a href="#">Registro</a> <ul> <li><a href="#" onclick="formulariocliente(); cargarcliente(); return false">Cliente</a></li> <li><a href="php/proveedor.php" target= "contenido">Proveedor</a></li> <li><a href="php/usuario.php" target = "contenido">Usuario</a></li> <li><a href="php/marca.php" target = "contenido">Marca</a></li> <li><a href="php/grupo.php" target = "contenido">Grupo</a></li> <li><a href="php/producto.php" target = "contenido">Producto</a></li> </ul> </li> <li><a href="#">Procesos Comerciales</a> <ul> <li><a href="javascript:mostrar('Ventas')">Ventas</a></li> <li><a href="javascript:mostrar('Compras')">Compras</a></li> </ul> </li> <li><a href="#">Reportes</a> <ul> <li><a href="javascript:mostrar('RClientes')">Reporte de Clientes</a></li> <li><a href="javascript:mostrar('RProductos')">Reporte de Productos</a></li> <li><a href="javascript:mostrar('RCompras')">Reporte de Compras</a></li> <li><a href="javascript:mostrar('RVentas')">Reporte de Ventas</a></li> </ul> </li> <li><a href="php/cerrar_sesion.php">Cerrar Sesion</a> </li> </ul> </nav> </center> <center> <section id = "cuerpo"> <article id = "contenido"> <div id = "formulario"> </div> <div id = "resultado"> </div> </section> </center>
Por ahora solo esta funcional el enlace para cliente, ya que el resto de enlaces solo se coloco como referencia.
En el enlacede cliente, estoy llamando a dos funciones en Javascript que me ayudan a cargar los contenidos en los divs.
Código Javascript :
function cargarcliente(valor){ val = valor; $("#resultado").load("../php/cliente.php", {pagina: val}); } function formulariocliente() { $('#formulario').load('../formularios/formulario_cliente.html'); }
La funcion cargar cliente, recibe un valor ya que uso una paginación, en los mismos divs.
Script del formulario
Código HTML :
<center> <div id = "cliente"> <div id ="titulo"> <h2>Registro de Clientes</h2> </div> <div id = "form"> <div id = "izquierda"> <form id = "formulario_cliente" action= "#"> <fieldset style="border:6px groove #ccc; text-align:left;"> <legend style="font-size:16px;">Ingresar Datos</legend> <label class = "etiquetas">Documento</label><br> <input type="text" id="documento" value="" class = "cuadros"/><br> <label class = "etiquetas">Nombre</label><br> <input type="text" id="nombre" value="" class = "cuadros"/><br> <label class = "etiquetas">Direccion</label><br> <input type="text" id="direccion" value="" class = "cuadros"/><br> <label class = "etiquetas">Telefono</label><br> <input type = "text" id="telefono" value ="" class = "cuadros"/><br> </fieldset> </div> <div id = "derecha"> <div class="boton"> <button id = "enviar_cliente" type="submit" class = "botones" >Registrar</button> <p> <button id = "limpiar_cliente" type="reset" class = "botones">Limpiar</button> </div> <p> <div id = "mensaje-error" style="Display: none; color: black;"> </div> </div> </form> </div> </center>
El formulario es enviado usando ajax
Código Javascript :
$(document).ready(function() { $("#mensaje-error").css("display", "none"); // Con esto ocultamos el div con el mensaje $("#enviar_cliente").click(function() { //Obtenemos el valor del campo nombre var documento = $("input#documento").val(); var nombre = $("input#nombre").val(); var direccion = $("input#direccion").val(); var telefono = $("input#telefono").val(); //Validamos el campo nombre, simplemente miramos que no esté vacío if (documento == "" || nombre == "" || direccion == "" || telefono == "") { $("#mensaje-error").show(); $("#mensaje-error").html("<img src='../img/error.png' width = '20%'' heigth = '20%'' /><br><label>Completar todos los datos</label>"); setTimeout("$('#mensaje-error').fadeOut(3000)") $("input#documento").focus(); return false; } //Construimos la variable que se guardará en el data del Ajax para pasar al archivo php que procesará los datos var dataString = 'documento=' + documento + '&nombre=' + nombre + '&direccion=' + direccion + '&telefono=' + telefono; $.ajax({ type: "POST", url: "../php/registrar_cliente.php", data: dataString, beforeSend:function(){ $("#mensaje-error").show(); $("#mensaje-error").html("<img src='../img/cargando.gif' width = '20%'' heigth = '20%'' />"); }, success: function() { $("#mensaje-error").show(); setTimeout("$('#mensaje-error').fadeOut(1000)") $("#mensaje-error").html("<img src='../img/correcto.png' width = '20%'' heigth = '20%'' />"); $("input#documento").val(''); $("input#nombre").val(''); $("input#direccion").val(''); $("input#telefono").val(''); $("input#documento").focus(); cargarcliente(); } }); return false; }); });
Script PHP para registrar al cliente
Código PHP :
<?php include ("conexion.php"); $doc = $_POST["documento"]; $nom = $_POST["nombre"]; $dir = $_POST["direccion"]; $tel = $_POST["telefono"]; //$fecha = date('Y/m/d'); $sql = "insert into cliente (Documento, Nombre, Direccion, Telefono) values ('$doc', '$nom', '$dir', '$tel')"; $result = mysql_query($sql, $conexion); if (!$result) { echo("Fallo en la insercion de registro en la Base de Datos:" . mysql_error()); }else{ echo "exito"; } include ("cerrar_conexion.php"); ?>
y por ultimo este es el script que uso para llamar los datos de mysql, se que la manera de paginar talvez no sea la correcta incluso talvez sea muy cavernícola, pero realmente no programo en php asi que trate de inmprovisar, disculpen las faltas en la programacion.
Código PHP :
<?php include ("conexion.php"); $pagina = $_POST["pagina"]; $registros_paginas = 10; //Numero maximo de registro por pagina $inicio = $pagina * $registros_paginas; $result_total_registros = mysql_query("SELECT * FROM cliente ORDER BY id_cliente", $conexion); $total_registros = mysql_num_rows($result_total_registros); $result_consulta_mostrar = mysql_query("SELECT * FROM cliente ORDER BY id_cliente DESC LIMIT ". $inicio .", 10 ", $conexion); $numero_pagina = ceil(($total_registros/$registros_paginas)); // Numero de paginas segun cantidad de registros echo "<table id='datos'> \n"; echo "<tr id='titulos'> <td width = '30'></td> <td width = '30'></td> <td width ='100' >Documento</td> <td width='220' >Nombre</td> <td width='350' >Direccion</td> <td width='150' >Telefono</td></tr> \n"; while ($row = mysql_fetch_row($result_consulta_mostrar)){ echo "<tr> <td id = 'chk'><input name='checkbox[]' id='checkbox[]' type='checkbox' value= $row[0]></td> <td id = 'borrar'><IMG SRC='../img/borrar.png' WIDTH=16 HEIGHT=16 BORDER=0 ALT='Eliminar' ALIGN='center'> </td> <td>$row[1]</td> <td>$row[2]</td> <td>$row[3]</td> <td>$row[4]</td></tr> \n"; } echo "</table> \n"; echo "["; echo " "; for($i = 1; $i <= $numero_pagina; $i++){ $pag = $i - 1; echo "<a href = '#' onclick='cargarcliente(".$pag."); return false'>$i</a>"; echo " "; } $pagina = $total_registros - 10; echo "]"; ?>
Bueno despues de tanto codigo, les explico mi problema, cuando le doy click en el boton para guardar, la primera vez guarda dos regitros completamente iguales, pero con codigo diferente (el codigo es autoincrement) se borran los datos y si lleno de nuevo el formulario y vuelvo a darle click en el boton esta vez me guarda 4 veces lo mismo, si de nuevo lleno y guardo se guarda 8 veces y asi sigue duplicandose, lo eh probado y ha llegado hasta 512 registros hasta ahora no eh podido encontrar el problema, eh buscado pero no encuentro la solucion, si alguien podria ayudarme le agradeceria de antemano, les dejare en un enlace tambien los archivos y la base de datos, gracias de antemano.
Nota: hace algunas semanas atras en un foro x realize una pregunta y bueno hubo personas que lo primero que dijeron fue, busca no seas ocioso esto y lo otro, pero bueno esta programacion que eh realizado lo eh hecho buscando informacion de internet con libros y manuales, antes de publicar este post, eh buscando 3 dias en internet pero realmente no eh encontrado solucion, disculpen de antemano cualquier molestia, gracias.
Link del archivo
https://skydrive.live.com/embed?cid=E444745E0078692D&resid=E444745E0078692D%212427&authkey=AHXbGx2gPLW1XOQ
[url]skydrive.live.com/embed?cid=E444745E0078692D&resid=E444745E0078692D%212427&authkey=AHXbGx2gPLW1XOQ][/url]