El problema es el siguiente. Yo tengo que mandar un formulario a la base de datos, que almacena un asunto y un mensaje.
El objetivo es crear un blog.
Quiero que el usuario pueda dejar una nota,y entonces la nota valla a la db. Pero también quiero que pueda borrarla.
A su vez, quiero que no sobrepase los 10 mensajes una sola persona.
Y también, que no se cometan redundancias como escribir dos veces un mensaje con el mismo asunto(simplificacion de escribir 2 mensajes iguales).
Bueno, os pego los códigos por aqui.
Los scripts funcionan bien pero tienen cosas extrañas:
Lo que sospecho es que cuando pulsas en enviar, ajax envia, pero si rápidamente vuelves a pulsar, vuelve a hacer una segunda peticion, y se me cuela un mensaje javascript con el mismo asunto y mensaje, pero en la db no.
Alguna idea para que no pase eso?
Gracias.
Código de INDEX.PHP
Código:
y ahora el archivo que uso para procesar este blog. PROCESABLOG.PHP<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>Blog</title> <meta name="GENERATOR" content="Quanta Plus"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <link rel="stylesheet" type="text/css" href="blogstyle.css"/> <script language="javascript" type="text/javascript"> // <!-- MENSAJESPERMITIDOS = 10; /*El blog tiene varias cosas. 1.Función que crea un nuevo div con el contenido, ademàs de (meterlo en la db). 2.Función que carga todos los comentarios anteriores de la db. */ accion='accion'; function AJAX(){ if(window.XMLHttpRequest){ peticion_http = XMLHttpRequest(); } else if(window.ActiveXObject){ peticion_http = new ActiveXObject("Microsoft.XMLHTTP"); } //Realizo la petición http peticion_http.open('GET','procesablog.php?contenido='+contenido+'&asunto='+asunto+'&accion='+accion,true); peticion_http.send(null); peticion_http.onreadystatechange = function(){ if(peticion_http.readyState==4){ respuesta=peticion_http.responseText;}} return respuesta; } //Display function CreaDiv(DivRoot,asunto,contenido){ //identifico el nodo raiz DivRoot = document.getElementById(DivRoot); //Creo los elementos hijos de la raiz Div = document.createElement("div"); Div.setAttribute("id","post"); Asunto = document.createElement("h3"); /*CRUZ PARA CERRAR**************/ Cruz = document.createTextNode("Cerrar"); Cerrar = document.createElement("a"); Cerrar.appendChild(Cruz); Div.appendChild(Cerrar); Cerrar.setAttribute("onclick","accion='borrar';borracomentario(this.parentNode);"); //Asignando un id a la cruz. Cerrar.setAttribute("id","cerrar"); /**********************************************/ //Creo los elementos nietos de la raiz Texto = document.createTextNode(contenido); AsuntoTexto = document.createTextNode(asunto); //Enlazo nieto e hijo, hijo y padre. Asunto.appendChild(AsuntoTexto); Div.appendChild(Asunto); //Enlazo hijo y padre Div.appendChild(Texto); //uno el padre con la raíz DivRoot.appendChild(Div); } //Procesando la informacion function Procesa(){ DivRoot = "blogdisplay"; //Saco el input asunto= document.getElementById("blogasunto").value; //Saco el textarea contenido = document.getElementById("blogmensaje").value; //Miro cuantos div hay, y si hay que añadir más o no. if(document.getElementById(DivRoot).childNodes.length<=MENSAJESPERMITIDOS){ //La función procesa también llamarà a AJAX. respuesta = AJAX();//calcula una respuesta entre otras cosas. if( respuesta == 1){ //Creo Div CreaDiv(DivRoot,asunto,contenido); } else alert(respuesta); } } function borracomentario (div){ //conseguir el asunto bueno. asunto=div.childNodes[1].firstChild.nodeValue; div.parentNode.removeChild(div); //Esta función hará mas cosas cuando haya que borrar el comentario de la db. AJAX(); } // --> </script> </head> <body> <h1>::El blog del Espía::</h1><br> <div id="blog" > <label>Asunto</label><br><input type="text" size="26" id="blogasunto" /><br> <textarea rows="10" cols="30" id="blogmensaje" ></textarea><br> <a onclick="accion='insertar';Procesa();" id="button" >Anotar</a> </div> <div id="blogdisplay"></div> </body> </html>
Código:
<?php #Globales include_once("/home/zeuslife/public_html/inc/globals.php"); #Función Query include_once("/home/zeuslife/public_html/inc/query_i.php"); /* #Funciones include_once("/home/zeuslife/public_html/inc/functions.php"); #Funciones include_once("/home/zeuslife/public_html/inc/security.php"); $user = $_SESSION['UTSW']; $userid = $_SESSION['IDTSW']; */ //Cambio las variables que vienen, por las buenas. $userid = 48; $mensaje = $_GET['contenido']; $asunto = $_GET['asunto']; $accion = $_GET['accion']; //El ajax se ha enviado por post, por tanto, tengo las variables: $userid, $asunto, $mensaje y $accion //Pongo el userid mio, para hacer las pruevas. $ultimolog = date("Y")."-".date("m")."-".date("d")." ".date("h").":".date("i").":".date("s"); if ($accion == "insertar"){ //Condición para insertar. $que = db_query("SELECT * FROM spy_notebook WHERE userid='$userid' AND asunto='$asunto'"); $cuantas = mysql_num_rows($que); if($cuantas==0){ $query = db_query("INSERT INTO spy_notebook (userid,ultimoedit,nota,asunto) VALUES('$userid','$ultimolog','$mensaje','$asunto')"); echo 1; } else { echo 0; } } else if ($accion == "borrar"){ $query = db_query("DELETE FROM spy_notebook WHERE userid = '$userid' AND asunto='$asunto'"); echo 1; } ?>
Supongo que la historia estaria en frenar el javascript, que se esperara a que la petición acabara, pero no se me ocurre como.
Otro problema que tiene, es que misteriosamente, la primera vez que quiero pulsar el boton ANOTAR, no anota, y no se bien bien porqué, y ahi si que no tengo ni sospechas ni nada, no tengo ni idea de porqué.
Muchas grácias, y saludos!!