Gå til innhold

Oppdatering av tekstfil vha javascript (ajax)


Anbefalte innlegg

Helo ppl!

 

Prøver å lage meg et kommentarsystem slik at hver av innleggene jeg legger ut i min blogg, får kommentarer knyttet til seg. Jeg har et par problemer med dette som jeg håpet noen kunne hjelpe meg med.

 

Har før implementert det bare vha av PHP (og tekstfil). Nå tenkte jeg å kunne bruke javascript i tillegg for å kunne legge til kommentar uten at hele siden oppdateres. Jeg har lagd php-funksjoner som legger til og leser ut kommentarer fra tekstfila.

 

Jeg har lagd slik at en metode i javascript-fila blir kalt, on submit:

 

// JavaScript Document
var xmlHttp

function makeComment(newsid,navn,kommentar,epost)
{ 
xmlHttp=GetXmlHttpObject()
if (xmlHttp==null)
{
alert ("Browser does not support HTTP Request")
return
}
var url="index.php"
url=url+"?newsid="+newsid+"&navn="+navn+"&kommentar="+kommentar+"&epost="+epost
xmlHttp.onreadystatechange=stateChanged 
xmlHttp.open("GET",url,true)
xmlHttp.send(null)
}

function stateChanged() 
{ 
if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete")
{ 
document.getElementById("txtHint").innerHTML=xmlHttp.responseText 
} 
}

function GetXmlHttpObject()
{
var xmlHttp=null;
try
{
// Firefox, Opera 8.0+, Safari
xmlHttp=new XMLHttpRequest();
}
catch (e)
{
//Internet Explorer
try
 {
 xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
 }
catch (e)
 {
 xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
 }
}
return xmlHttp;

 

Denne fila kaller som dere ser index.php som inneholder en del funksjoner. Tekstfilen er separert med en string, la oss si *|*.

Så hver kommentar lagres ca sånn:

innlegg-id *|* navn *|* kommentar *|* epost

 

Når jeg skal lese ut kommentarene leser jeg da inn hver linje.

 

Når jeg første gang går inne på kommentarsiden, fyller ut og sender av gårde, så kommer det fram, og blir skrevet. Men dersom jeg rett etter fyller ut og skriver igjen og submit, så legger hele linja rett etter den gamle, på samme linje. Dette gjør at jeg får problemer når jeg skal lese ut f.eks alle kommentarene som hører til innlegg med id 5. Dette skjedde ikke når jeg brukte bare php. Da kom hver kommentar på ny linje. Noen forslag til hva som gjøres?

 

her er funksjonen som skriver en kommentar til tekstfila dersom dere skal se litt på den:

 

function skrivKommentar($brukernavn,$kommentar,$epost,$nid){

if(get_magic_quotes_gpc) {
   $brukernavn = stripslashes($brukernavn);
   $kommentar = stripslashes($kommentar);

 }
 $replace = array("\r\n" => '', "\t" => '');
 $brukernavn = strtr($brukernavn, $replace);
 $kommentar = strtr($kommentar, $replace);
 $dato = "".date("d/m.Y - H:i ");
 

$altsammen = $nid.'*|*'.$dato.'*|*'.$brukernavn.'*|*'.$kommentar.'*|*'.$epost;

$myFile = "entries.comments.php";
$fh = fopen($myFile, 'a') or die("can't open file");
 fwrite($fh, $altsammen);
fclose($fh);  
}

 

Håper noen kan hjelpe. Er så nær en løsning, men likevel så fjernt.. :no:

Endret av LBoN
Lenke til kommentar
Videoannonse
Annonse

Okei folkens, beklager at jeg var så dum! Det løste seg ved at jeg bare la inn en linjeskift helt på slutten av linja før jeg skrev det til tekstfila. Men det kommer et annet spørsmål. Hvordan kan man sørge for at hvis noen trykker på oppdater knappen så blir ikke kommentaren lagt inn på nytt?

Lenke til kommentar
Hvordan kan man sørge for at hvis noen trykker på oppdater knappen så blir ikke kommentaren lagt inn på nytt?

9101248[/snapback]

Tror du har to muligheter:

 

1. I php kan du sørge for at om to helt like innlegg kommer, så blir det siste ignorert.

 

2. Du kan disable metoden eller knappen i javascriptet som kaller ajaxfunksjonen din, det enkleste her er vel å endre verdiene til knappen som trykkes første gang den trykkes slik at den ikke responderer på klikk, det andre er å erstatte function makeComment med en annen funksjon som ikke gjør noe som helst.

Lenke til kommentar

Høres ut som ålreite forslag, selv om punkt nr 1 virker enklest. Men jeg syns å ha lest et eller annet sted om at man liksom kan tømme eller fjerne dataen som blir sendt fra formen, slik at man ikke kommer så langt som til php-filen i det hele tatt. (Sparer vel tid og ressurser). Man får bare beskjed om at dataen har blitt gammel e.l. Er jeg bærtur eller finnes dette? :hmm: Noen som vet om hva jeg snakker om :p ?

Lenke til kommentar
Høres ut som ålreite forslag, selv om punkt nr 1 virker enklest. Men jeg syns å ha lest et eller annet sted om at man liksom kan tømme eller fjerne dataen som blir sendt fra formen, slik at man ikke kommer så langt som til php-filen i det hele tatt. (Sparer vel tid og ressurser). Man får bare beskjed om at dataen har blitt gammel e.l. Er jeg bærtur eller finnes dette? :hmm:  Noen som vet om hva jeg snakker om :p ?

9106950[/snapback]

Det finnes helt sikkert, er kanskje bare å sette formName.value = ''; i javascriptet? Da vil vel innholdet forsvinne?

Lenke til kommentar
  • 3 uker senere...

Er bare å bruke:

document.getElementById("[inputformID]").value='';

Såklart erstatt verdien med id'en på formen folk skriver inn i... sleng dette på etter response funksjonen din.. det finnes sikkert en måte å dissable knapper på, men det holder sikker å mulle ut verdien i texarea feltet ditt.. er ikke sikker på om det er "value" i texarea, men det finner du vel ut på google...

Lenke til kommentar

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...