Avatar billede zarathustra Nybegynder
25. september 2001 - 16:07 Der er 8 kommentarer og
2 løsninger

Tæller ved brug af .txt fil

Hello
Jeg skal lave en tællefunktion, hvor brugeren i et formfelt kan indtaste et tal. Dette tal skal lægges til et eksisterende tal, som findes i en .txt-fil (donations.txt), og som bagefter overskriver dette. Dvs. tallet i txt-filen vokser, som denne handling begås flere gange af flere brugere.

Jeg har dog det problem med den nedenstående funktion, at $fp blot returnerer 1 (for true). Dermed får jeg altid $money + 1. Problemet består altså i, at jeg ikke får programmet til at læse indholdet af txt-filen, som er et tal. Hvordan går jeg det?

function add($money) {
$fp = fopen(\"donations.txt\", \"w+\");
$int = fread($fp, 100);
$total = $fp + $money;
fwrite($fp, $total);
return $total;
fclose($fp);
}

$money er det beløb, som brugeren har indtastet.
/zarathustra
Avatar billede coderdk Praktikant
25. september 2001 - 16:20 #1
function add($money) {
$total = join(\"\",file(\"donations.txt\"));
$fp = fopen(\"donations.txt\", \"w\");
$total + = $money;
flock($fp,LOCK_EX);
fwrite($fp, $total);
fclose($fp);
return $total;
}
Avatar billede coderdk Praktikant
25. september 2001 - 16:21 #2
$fp er et file-handle, derfor var den 1...
Avatar billede myplacedk Nybegynder
25. september 2001 - 16:25 #3
$fp er en resource-id. Den har så lige nummer 1 fordi det er scriptets første resource.
$int = fread($fp, 100);
Denne linje henter de først 100 bytes fra filen. Jeg vil tro, at det tal du leder efter, står i $int, og ikke i $fp.

I øvrigt: Et meget bedre emne til dit spørgmål ville være: \"Læsning af fil\". Det er jo det, der er problemet. Hvad du skal bruge det til, er ret ligegyldigt, ligesom det er ligegyldigt at du vælger at kalde din fil for noget med \".txt\" til sidst. :)

/Niels Andersen
Avatar billede zarathustra Nybegynder
25. september 2001 - 19:21 #4
Ok, jeg har kvajet mig lidt.
Linien: $total = $fp + $money; er selvfølgelig $total = $int + $money;  Og det havde jeg også prøvet, men uden held! Det returnerer nemlig ingen værdi fra donations.txt overhovedet!!

coderdk,
hvad angår dit forsøg, så fungerer det heller ikke. Det giver parsefejl på linien: $total = join(\"\",file(\"donations.txt\"));

Niels Andersen,
Hvad angår din kommentar om emneoverskriftet, så overvej engang hvor bred formuleringen \"Læsning af fil\" er. Den kunne dække over flere tusinder forskellige problemer, og gør derfor ikke søgningsmuligheden særlig god. 
Derimod giver ordet \"tæller\" et prej om, hvilken funktionalitet jeg efterlyser, og \".txt-fil\" uddyber yderligere, hvordan denne funktionalitet skal implementeres.
also spracht zarathustra

Avatar billede myplacedk Nybegynder
25. september 2001 - 20:05 #5
Jeg kan godt se at du skal bruge det til en tæller, men det er da ligegyldigt. Men det var nu også bare en kommentar. Det er åbenbart noget der kan diskuteres.
Avatar billede coderdk Praktikant
25. september 2001 - 20:14 #6
zarathustra> hmm jeg har heller ikke testet det, men jeg kan ikke forstå at det ikke virker... hvis du ser på tælleren jeg har lavet her:

  http://ekspert.coder.dk/

Så er det faktisk nogenlunde det samme... Den virker da =)
Avatar billede myplacedk Nybegynder
25. september 2001 - 20:15 #7
Kiggede lige ordentligt efter, og opdage umiddelbart to ting:

return $total;
fclose($fp);

fclose bliver aldrig udført. Byt om på de to.

fopen(\"donations.txt\", \"w+\");
Prøv lige at se hvad der står i manualen om w+:
\"Open for reading and writing; place the file pointer at the beginning of the file and truncate the file to zero length. If the file does not exist, attempt to create it.\"

Dvs. du sletter indholdet før du læser filen.

Prøv at kigge på coderdk\'s kode igen. Det er linjen med \"$total + = $money;\" den melder fejl på, ik\'?
Det gjorde den hos mig, og den fejl forsvandt da jeg rettede \"+ =\" til \"+=\", altså fjernede mellemrummet.

/Niels Andersen
Avatar billede zarathustra Nybegynder
25. september 2001 - 22:51 #8
Så virker det!! Begge jeres svar har været til god gavn.
Avatar billede zarathustra Nybegynder
25. september 2001 - 22:53 #9
Hov, hvad gik der galt?? I skulle begge have haft flere point!! myplacedk, sorry, der blev åbenbart kun fordelt 5 til dig.
Avatar billede myplacedk Nybegynder
26. september 2001 - 11:57 #10
Heh, det er da helt OK. :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester