Avatar billede horizon Nybegynder
24. september 2008 - 22:38 Der er 9 kommentarer og
1 løsning

Slet linje fra fil

Jeg har lavet en fil der gemmer fejlbeskeder fra min mysql database for at holde styr på hvad folk laver, og for evt. at opdage evt. forsøg på at omgå sikkerheden.

Hver fejl bliver smidt i en linje i en .txt fil

Jeg kunne godt tænke mig at finde ud af hvordan jeg sletter en linje fra denne fil. hvis jeg nu skulle få lyst til at slette en logbesked og så gemme resten.

Det er vel noget med at søge efter linjeskift nr. X og så slette det derefter til og med linjeskift X+1

eller er der en lettere måde?
Avatar billede coderdk Praktikant
24. september 2008 - 23:14 #1
http://dk2.php.net/file - indlæs
http://dk2.php.net/unset - fjern en eller flere linjer
http://dk2.php.net/implode - lav til én linje
http://dk2.php.net/file_put_contents - skriv fil
Avatar billede coderdk Praktikant
24. september 2008 - 23:15 #2
(indlæs = indlæs som array)
Avatar billede showsource Seniormester
25. september 2008 - 08:10 #3
Du kunne jo også evt. overveje at gemme i DB nu du har gang i den alligevel :O)
ALtså lave en "fejltabel"
Avatar billede horizon Nybegynder
25. september 2008 - 21:31 #4
Overvejede også at lave en tabel i DBen når der kom forbindelse igen.

Aah ja, selvfølgelig. unset!

så hvad? Jeg loader hele filen og så unset'ter de variabler som jeg ikke skal bruge mere og så gemmer filen igen? Er det sådan?
Avatar billede coderdk Praktikant
25. september 2008 - 21:52 #5
Yeps, i f.eks.

$var = file( "fil.txt" ); // Læs fil til array
unset( $var[15] ); // Slet linje 16
$txt = implode( "\n", $var ); // Saml alle linjer i én tekst
file_put_contents( "fil.txt" ); // Skriv fil
Avatar billede horizon Nybegynder
25. september 2008 - 23:00 #6
Problem!

mine fejllogs ligger nu således i logs_Databasefejl.txt

$fejl[] '"query" => "noget", "tidspunkt" => "blah", "ID_BRUGER" => "hest"';
$fejl[] '"query" => "noget andet", "tidspunkt" => "blih", "ID_BRUGER" => "ged"';
$fejl[] '"query" => "noget helt tredje", "tidspunkt" => "bluh", "ID_BRUGER" => "ko"';

Når jeg henter det via file() så tæller den alle linjerne i filen som en del af logsene

så f.eks. tomme linjer også kommer med i min visning af beskederne.

og når jeg endelig kalder f.eks.

$indhold = file('logs_Databasefejl.txt');

echo $indhold[0] så skriver den hele den linje ud. som éen lang string. Jeg kan ikke kalde "query" eller "tidspunkt" eller noget

så først:
Hvordan får jeg den til kun at vælge fejlbeskederne? er det bare ved at filen KUN indeholder fejlmeddelelserne og ikke andet?

og:
Hvordan laver jeg så det valgte om til noget brugbart jeg kan kalde?
er det via settype($variabel, "object")?
Avatar billede coderdk Praktikant
26. september 2008 - 00:23 #7
Det lyder som om at det ville være MEGET smartere at bruge databasen ;)
Avatar billede horizon Nybegynder
28. september 2008 - 00:31 #8
Enig! :-P men synes nu det ville være lidt god øvelse i flatfile

men fik det til alligevelled.

gik væk fra at gemme dataerne som $fejl[] ting og skrev hellere det hele og delte det op med seperatorer.

min kode til at hente og slette data ser således ud:

// Slet de(n) valgte logs.
    if(isset($_POST[sletValgteOK])){
       
        // Skal vi slette alle, jamen så slet hele filen.
        if($_POST[sletAlle])
            unlink('logs_Databasefejl.txt');
       
        // Ellers så slet de enkelte linjer.
        else{
           
            // Hent hele loggen.
            $fil = file('logs_Databasefejl.txt');
           
            // Slet de markerede.
            for($i = 0; count($_POST[slet]) > $i; $i++)
                unset($fil[$_POST[slet][$i]]);
       
            // Gem resterne.
            file_put_contents('logs_Databasefejl.txt', $fil);
        }
   
   
    }
   
    if(!file_exists('logs_Databasefejl.txt'))
            echo '<h3>Ingen databasefejl indtil videre.</h3>';
       
    else{
       
        $indhold = file('logs_Databasefejl.txt');

        for($i = 0; count($indhold) > $i; $i++){
            $fejl[$i] = explode('||', $indhold[$i]);

og så hentes hver del frem vha. $fejl[$i][0...1...2 osv.]

Smid lige et svar som tak for hjælpen :-)
Avatar billede horizon Nybegynder
28. september 2008 - 00:33 #9
hov... lille kommentar

beskederne i loggen ligger således:

query her||tidspunkt her|| brugerid her||osv.
query2 her||et andet tidspunkt|| et andet bruger id||osv.
Avatar billede coderdk Praktikant
28. september 2008 - 12:29 #10
:)
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