Från en html webform låta användare fylla i ett antal urls sen spara det till en data.txt dom skrivs över när det är en ny användare-hur gör man det???
Ok, jag vet inte vilken av delarna du vill ha hjälp med men;
use CGI;
$urls = CGI::param('fält1') . "\t" . CGI::param('fält2') . "\t" . CGI::param('fält3'); # Osv så många fält du vill ha.
$urls =~ s/\t\t+/\t/g; # rensa bort angränsare mellan icke ifyllda fält
# Skriv till fil.
open(OUTDATA,">datafil.tab") | | die('Kan inte skriva till datafil.tab');
print OUTDATA $urls;
close(OUTDATA);
Det som nu står i filen är tab-separerade url'er (får man hoppas), och filen skrivs över varje gång.
Japp, datafil.tab skulle kunna heta vad_du_vill.ada om du så ville det :e
För att låsa filen så att bara en användare i taget kan skriva till den gör så här..
use CGI;
$urls = CGI::param('fält1') . "\t" . CGI::param('fält2') . "\t" . CGI::param('fält3'); # Osv så många fält du vill ha.
$urls =~ s/\t\t+/\t/g; # rensa bort angränsare mellan icke ifyllda fält
# Skriv till fil.
open(OUTDATA,">datafil.tab") | | die('Kan inte skriva till datafil.tab');
flock (OUTDATA,2);
print OUTDATA $urls;
close(OUTDATA);
För att låsa filen så att bara en användare i taget kan skriva till den gör så här ...
Mja, skall vi titta lite på den koden. :)
open(OUTDATA,">datafil.tab") | | die('Kan inte skriva till datafil.tab');
Här öppnar du filen för skrivning, och raderar samtidigt innehållet i den.
flock (OUTDATA,2);
Här kör du flock. Problemet är bara att innehållet i filen raderas redan vid öppningen, innan du kör flock. Du riskerar alltså att radera innehållet i en fil som någon annan redan håller på med, och det kanske inte är så lyckat alla gånger.
Det här problemet tas upp i dokumentationen, och där finns också förslag på lösningar.
Dessutom bör du även kolla så att fillåsningen lyckades:
flock (OUTDATA,2) | | die ('Kunde inte låsa datafil.tab');