Gå til innhold

[Løst] Vise alle endringene som er gjort på en ekstern fil


Anbefalte innlegg

Hei

Jeg har fått en oppgave der man skal

 

 

Side 1 Denne siden skal vise alle endringene som er gjort på en ekstern fil. Det har jeg fått til.

 

Side 2 skal en enkelt linje i filen slettes. Linjenummeret må oppgis via en tekstboks. Når en knapp trykkes leses filen inn i f.eks et array (linje for linje). Deretter slettes riktig element i arrayet og arrayet skrives tilbake til filen hvor alt overskrives. Slettefunksjonaliteten på side 5 kan evt. gjøres på samme side som 4 dersom dere synes det er mer hensiktsmessig.

 

Hvordan skal jeg få til dette?

Endret av corsa91
Lenke til kommentar
Videoannonse
Annonse

Lenge siden jeg har holdt på med PHP, men uansett...Går det ikke ann å bare lese antall "\n" evt </br> (finnes kanskje funksjoner som finner dette ut for deg?) i filen for å finne ut hvor mange linjeskift det er i filen? Når du har funnet ut av det oppretter du et array som som er stor nok til å håndtere X antall linjer (eventuellt en list?). Når alle linjene er på plass kan du ikke da bare slette den opprinngelige filen som du har hentet linjene ifra, deretter slette linjenummeret som skal slettes og skrive array/liste-elemenetene tilbake linje for linje i en ny-opprettet fil med samme navn som den opprinnelige.

Lenke til kommentar

Først bruker du fopen() eller noe til å åpne filen, gå så igjennom alle linjene i en løkke, noe slikt:

while($line != null)

{

$din_array_her[] = $line;

}

Det som vil skje nå er at du får en array nummerert fra 0 og oppover.

 

Så er det bare å gjøre slik:

 

unset($din_array_her[NUMMERET+1]);

Lenke til kommentar

Fungerer dette?

 

$filref=fopen("side3fil.php","r");

fwrite($filref,"$meldinger");

fclose($filref);

$filref=fopen("side3fil.php","w");

$filstring=fgets($filref);

echo "Her er innholdet av filen : $meldinger <br/>".$filstring;

$filstring=fgets($filref);

echo $filstring;

fclose($filref);

 

Men hvordan skal jeg få slik at når du oppgir tallet så skal den arrayet slette den?

Lenke til kommentar

Fungerer dette?

 

$filref=fopen("side3fil.php","r");

fwrite($filref,"$meldinger");

fclose($filref);

$filref=fopen("side3fil.php","w");

$filstring=fgets($filref);

echo "Her er innholdet av filen : $meldinger <br/>".$filstring;

$filstring=fgets($filref);

echo $filstring;

fclose($filref);

Skal vi se...

$filref=fopen("side3fil.php","r");

Du begynner med å åpne side3fil.php ja... den er jo grei.

fwrite($filref,"$meldinger");

Okeeeeii....? Her velger du altså å skrive til filen, og hva skriver du til filen, jo en helt tom variabel! $meldinger er jo ikke definert noe sted, med andre ord så sletter du innholdet i hele filen her. Så nei, dette er ikke riktig.

 

For å lese en fil gjør du slik:

<?php
$file_handle = fopen("side3fil.php", "r");
while (!feof($file_handle)) 
{
$line_of_text = fgets($file_handle);
echo $line_of_text . "<br />";
}
fclose($file_handle);
?>

feof sjekker om du har kommet til enden av filen. Så lenge du ikke har gjort det (utropstegnet betyr NOT) så leser den linje etter linje...

 

Men hvordan skal jeg få slik at når du oppgir tallet så skal den arrayet slette den?

Vel, da må du jo først lage en html form så kommer variabelen med tallet inn... la oss si den blir lagret i variabelen $tall.

 

da gjør du slik:

unset($din_array_her[$tall+1]);

 

Etterpå må du gå igjennom arrayen og skrive hver linje til filen. Men før du kommer så langt kan du jo sjekke at alt fungerer ved å skrive:

echo '<pre>';

print_r($din_array_her);

echo '</pre>;

 

Den skriver ut alle verdier og ider i arrayen.

Lenke til kommentar

Du trenger bare å legge ut den delen som har med dette å gjøre da... kan jo ikke være så mange linjene med kode... eventuelt dump alt ned i en og samme pastebin url, null stress det....

 

edit: Ok ser den nå, men du har jo ikke endret noe enda?

edit2: Jeg ser fil nummer 2, men tror du har misforstått litt, det var bare et eksempel, psudokode, det første jeg skrev... men !feof skal fungere fint så du må bare gjøre noe slik...:

 

<?php
// Fjerner linje 4:
$tall = 4;
$file_handle = fopen("side3fil.php", "r");
while (!feof($file_handle)) 
{
   	$din_array_her[] = fgets($file_handle);
}
fclose($file_handle);

unset($din_array_her[$tall-1]);
echo '<pre>';
print_r($din_array_her);
echo '</pre>';
?>

 

Endret av Warz
Lenke til kommentar

Du trenger bare å legge ut den delen som har med dette å gjøre da... kan jo ikke være så mange linjene med kode... eventuelt dump alt ned i en og samme pastebin url, null stress det....

 

edit: Ok ser den nå, men du har jo ikke endret noe enda?

edit2: Jeg ser fil nummer 2, men tror du har misforstått litt, det var bare et eksempel, psudokode, det første jeg skrev... men !feof skal fungere fint så du må bare gjøre noe slik...:

 

// Fjerner linje 4:
$tall = 4;
$file_handle = fopen("side3fil.php", "r");
while (!feof($file_handle)) 
{
   	$din_array_her[] = fgets($file_handle);
}
fclose($file_handle);

unset($din_array_her[$tall+1]);
echo '<pre>';
print_r($din_array_her);
echo '</pre>';

 

 

 

 

Kan du ikke si hvordan ?

Lenke til kommentar

Surra litt tidligere, skal selvsagt være MINUS 1 og ikke pluss :p

 

Koden jeg har postet nå fungerer. Her er forklaringen:

$tall = 4;

Ok vi skal fjerne linje nummer 4, da setter vi denne variabelen, du vil kanskje heller sette $tall = $_POST['tall']; eller noe, for å hente ut det bruker skriver inn.

$file_handle = fopen("side3fil.php", "r");

Du åpner fil og lagrer denne koblingen*/pekeren til filen i variabelen $file_handle; $file_handle peker liksom på filen og hvilken linje du er på.

while (!feof($file_handle))

Nå sjekker vi om $file_handle er kommet til siste linje. Altså så lenge vi IKKE er på siste linje skal denne loopen kjøres...

$din_array_her[] = fgets($file_handle);

Her legger vi da linjen inn i arrayen. Siden vi skriver [] på slutten vil den øke med 1. Altså, først legger den inn i $din_array_her[0], neste legges inn i $din_array_her[1], osv...

fclose($file_handle);

stenger filen

unset($din_array_her[$tall-1]);

Her sletter vi variabelen med nummer $tall-1, altså 3... kunne likegjerne skrevet unset($din_array_her[3]); her...

echo '<pre>';

print_r($din_array_her);

echo '</pre>';

Skriver ut hele arrayen, og som du ser har vi nå fjernet linje nummer 4.

Da gjenstår det bare å skrive denne arrayen til filen.

Lenke til kommentar

<?php

session_start();

echo "<h3>Dette er side 5</h3>";

 

$tall = 4;

$file_handle = fopen("side3fil.php", "r");

while (!feof($file_handle))

{

$din_array_her[] = fgets($file_handle);

}

fclose($file_handle);

 

unset($$liste[$tall-1]);

echo '<pre>';

print_r($liste);

echo '</pre>';

 

 

$liste = array($1,$2,$3,$4,$5,$6,$7,);

 

$1 = "Navn : ".$_SESSION["Navn"]. "\r\n";

$2 .= "Adresse : ".$_SESSION["Adresse"]. "\r\n";

$3 .= "Epost : ".$_SESSION["Epost"]. "\r\n";

$4 .= "Telefonnummer : ".$_SESSION["Telefonnummer"]. "\r\n";

$5 .= "Du er : ".$_SESSION["kunde"]. "\r\n";

$6 .= "Du har valgt spørsmåltype : ".$_SESSION["type"]. "\r\n";

$7 .= "Din beskjed : ".$_SESSION["beskjed"]."\r\n";

 

?>

 

 

<input type="submit" name="Knapp" value=" Bekreft " />

<textarea name="beskjed" rows="1" cols="5">Nr</textarea>

 

 

 

 

Er det sånn ???

Lenke til kommentar

Nå har du de viktigste filene. Resten er jo det samme. Så du kan bare skrive inn.

 

Har stresset med den oppgaven i hele dag. Ikke lett for en nybegynner.

Bare skrive inn? hehe... Kan du ikke bare gå opp til læreren din og gi ham all koden å si "her har du koden lærer, så kan du bare skrive inn!". Tror han hadde blitt litt lang i maska da... :D

 

Du har jo allerede fått en fasit i dag... Jeg har selv vært nybegynner så jeg vet hvor greit det er å få fasit overlevert, men nå har jeg da begynt å lese fasiten nøye sånn at jeg skjønner alt som står der. Kan jo ikke akkurat kode alt for deg da lærer du jo ingen ting. Nå har du jo fått servert alt på fat her, så det burde vel ikke være en så big deal å fullføre den lille resten med å skrive til fil. Det finnes plenty av eksempler på nett om hvordan dette gjøres også...

 

$liste = array($1,$2,$3,$4,$5,$6,$7,);

 

$1 = "Navn : ".$_SESSION["Navn"]. "\r\n";

$2 .= "Adresse : ".$_SESSION["Adresse"]. "\r\n";

$3 .= "Epost : ".$_SESSION["Epost"]. "\r\n";

$4 .= "Telefonnummer : ".$_SESSION["Telefonnummer"]. "\r\n";

$5 .= "Du er : ".$_SESSION["kunde"]. "\r\n";

$6 .= "Du har valgt spørsmåltype : ".$_SESSION["type"]. "\r\n";

$7 .= "Din beskjed : ".$_SESSION["beskjed"]."\r\n";

 

?>

 

 

<input type="submit" name="Knapp" value=" Bekreft " />

<textarea name="beskjed" rows="1" cols="5">Nr</textarea>

 

 

 

 

Er det sånn ???

Kan du forklare hva du har tenkt her.. jeg skjønner ikke sammenhengeng... hva som er meningen med denne koden... ?

Lenke til kommentar

Problemet er at dette er min første oppgave som jeg skal få til å slette via en tekstboks. Og det har jeg ikke skjønt noe av. Har ikke gått igjennom noe av det. Har jo sett de eksemplene på nettet

 

 

Nå har du de viktigste filene. Resten er jo det samme. Så du kan bare skrive inn.

 

Har stresset med den oppgaven i hele dag. Ikke lett for en nybegynner.

Bare skrive inn? hehe... Kan du ikke bare gå opp til læreren din og gi ham all koden å si "her har du koden lærer, så kan du bare skrive inn!". Tror han hadde blitt litt lang i maska da... :D

 

Du har jo allerede fått en fasit i dag... Jeg har selv vært nybegynner så jeg vet hvor greit det er å få fasit overlevert, men nå har jeg da begynt å lese fasiten nøye sånn at jeg skjønner alt som står der. Kan jo ikke akkurat kode alt for deg da lærer du jo ingen ting. Nå har du jo fått servert alt på fat her, så det burde vel ikke være en så big deal å fullføre den lille resten med å skrive til fil. Det finnes plenty av eksempler på nett om hvordan dette gjøres også...

 

 

 

$liste = array($1,$2,$3,$4,$5,$6,$7,);

 

$1 = "Navn : ".$_SESSION["Navn"]. "\r\n";

$2 .= "Adresse : ".$_SESSION["Adresse"]. "\r\n";

$3 .= "Epost : ".$_SESSION["Epost"]. "\r\n";

$4 .= "Telefonnummer : ".$_SESSION["Telefonnummer"]. "\r\n";

$5 .= "Du er : ".$_SESSION["kunde"]. "\r\n";

$6 .= "Du har valgt spørsmåltype : ".$_SESSION["type"]. "\r\n";

$7 .= "Din beskjed : ".$_SESSION["beskjed"]."\r\n";

 

?>

 

 

<input type="submit" name="Knapp" value=" Bekreft " />

<textarea name="beskjed" rows="1" cols="5">Nr</textarea>

 

 

 

 

Er det sånn ???

Kan du forklare hva du har tenkt her.. jeg skjønner ikke sammenhengeng... hva som er meningen med denne koden... ?

 

 

Det er arrayet. Trenger en sånn knapp at når du skriver inn et tall og trykker bekreft så skal den gå inn slette også lagre

Endret av corsa91
Lenke til kommentar

Ok, her har du fasit:

<?php
session_start();
if($_POST)
{
$tall = $_POST['linjenr'];
$filnavn = "side3fil.php";
$file_handle = fopen($filnavn, "r");
while (!feof($file_handle))
{
$coarsy[] = fgets($file_handle);
}
fclose($file_handle);

unset($coarsy[$tall-1]); 

$file_handle = fopen($filnavn, "w");
foreach($coarsy as $coarsyboy)
{
   	fwrite($file_handle, $coarsyboy);
}
fclose($file_handle);   
echo 'Linje har blitt slettet. Nå kan du åpne '.$filnavn.' og  se forandringen! Den fryder '; 
}
else
{
echo 'Skriv inn tall og trykk "Slett linje!"<br/>';	
}
?>
<form action="" method="post">
Linje Nr: <input type="text" name="linjenr" value="" />
<input type="submit" name="submit" value="Slett linje!" />
</form>

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å
×
×
  • Opprett ny...