uranus Skrevet 20. desember 2007 Del Skrevet 20. desember 2007 Hei! Driver og lager liten medlemssystem for meg og noen venner, og skal ha sånn ajax "trykk her for å redigere" så popper opp textarea og du skriver, og den lagrer der uten å reloade browseren. Alt det funker, MEN informasjonen blir ikke lagret i databasen. Brukte denne guiden: http://24ways.org/2005/edit-in-place-with-ajax Så problemet. Her er fila som skal sende til serveren (er lokal webserver så pass og det er bytta nå) Den heter didyouknow.php som ligger i profile_updates mappa. <?php $l = mysql_connect ( "localhost" , "root" , "" ) or die("Error connecting: <br><br>".mysql_error()); mysql_select_db( "medlemssystem" ) or die("Error getting db: <br><br>".mysql_error()); $uid = $_SESSION['s_uid']; $content = $_POST['content']; $query = mysql_query("UPDATE users SET didyouknow = '$content' WHERE id = '$uid' LIMIT 1") or die(mysql_error()); if ($query) { echo htmlspecialchars($content); } else { echo "Det funka faen ikke!"; } ?> Så er det JS fila. Event.observe(window, 'load', init, false); function init(){ makeEditable('didyouknow'); } function makeEditable(id){ Event.observe(id, 'click', function(){edit($(id))}, false); Event.observe(id, 'mouseover', function(){showAsEditable($(id))}, false); Event.observe(id, 'mouseout', function(){showAsEditable($(id), true)}, false); } function edit(obj){ Element.hide(obj); var textarea = '<div id="'+obj.id+'_editor"><textarea id="'+obj.id+'_edit" name="'+obj.id+'" rows="4" cols="30" style="width: 200px; background-color: #CCC; font-size: 11px;">'+obj.innerHTML+'</textarea>'; var button = '<div><input id="'+obj.id+'_save" type="button" value="Lagre" /> ELLER <input id="'+obj.id+'_cancel" type="button" value="Avbryt" /></div></div>'; new Insertion.After(obj, textarea+button); Event.observe(obj.id+'_save', 'click', function(){saveChanges(obj)}, false); Event.observe(obj.id+'_cancel', 'click', function(){cleanUp(obj)}, false); } function showAsEditable(obj, clear){ if (!clear){ Element.addClassName(obj, 'editable'); }else{ Element.removeClassName(obj, 'editable'); } } function saveChanges(obj){ var new_content = escape($F(obj.id+'_edit')); obj.innerHTML = "Lagrer..."; cleanUp(obj, true); var success = function(t){editComplete(t, obj);} var failure = function(t){editFailed(t, obj);} var url = 'profile_updates/didyouknow.php'; var pars = 'id=didyouknow&content='+new_content; var myAjax = new Ajax.Request(url, {method:'post', postBody:pars, onSuccess:success, onFailure:failure}); } function cleanUp(obj, keepEditable){ Element.remove(obj.id+'_editor'); Element.show(obj); if (!keepEditable) showAsEditable(obj, true); } function editComplete(t, obj){ obj.innerHTML = t.responseText; showAsEditable(obj, true); } function editFailed(t, obj){ obj.innerHTML = '<b>Beklager</b>, oppdateringen ble ikke gjennomført.'; cleanUp(obj); } Håper virkelig noen kan hjelpe meg. Tror det har noe med at didyouknow.php ikke vet hva den skal sende til databasen. Lenke til kommentar
Intramin Skrevet 20. desember 2007 Del Skrevet 20. desember 2007 Prøv å legge print_r($_POST); øverst i didyouknow.php og se om du får svar om arrayet når du prøver å lagre (sånn jeg forstod det når jeg skumleste JS-koden) Lenke til kommentar
uranus Skrevet 20. desember 2007 Forfatter Del Skrevet 20. desember 2007 (endret) Array ( [id] => didyouknow [content] => asda ) asda Endret 20. desember 2007 av uranus Lenke til kommentar
uranus Skrevet 20. desember 2007 Forfatter Del Skrevet 20. desember 2007 OPPDATERING: Den funker nå, men ofte så viser den ikke selve oppdateringen i feltet før jeg oppdaterer browseren. Noe man kan gjøre med det? Lenke til kommentar
jeg_lyver_mye Skrevet 20. desember 2007 Del Skrevet 20. desember 2007 Sikkert cacha! Søk i wikipedia om det og ajax, tror det skal være en rekke løsninger på det. Lenke til kommentar
grimjoey Skrevet 20. desember 2007 Del Skrevet 20. desember 2007 (endret) du kan sende headere som gjør at browseren ikke cacher siden. du kan hente informasjonen du skal vise med ajax og gjøre en ajax oppdatering når noe oppdateres og lagres. <?phpheader("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1 header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); // Date in the past ?> Endret 20. desember 2007 av grimjoey Lenke til kommentar
jeg_lyver_mye Skrevet 20. desember 2007 Del Skrevet 20. desember 2007 Du kan også slenge på en GET, med noe helt random bare! Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå