Avatar billede rasmus_a Nybegynder
29. november 2003 - 14:14 Der er 19 kommentarer og
1 løsning

Fejl i gemme script

Hej, jeg er ved at lave dette simple og meget newbee agtige script men det virker ikke. Hvorfor ikke?


<?php
  if ($load_arc) {

$lines = file($filnavn);

$output = "";

for($i=0;$i<sizeof($lines);$i++){
    $output.= $lines[$i] . "";
}


}
?>


<FORM ACTION="" METHOD="post" NAME="form">
<select name="filnavn">
    <option value="1.txt">nummer1</option>
    <option value="2.txt">nummer2</option>
</select>
<BR>
<TEXTAREA COLS="40" ROWS="9" NAME="loadarea"><?php echo $output; ?></TEXTAREA>
<BR>
<INPUT TYPE="submit" NAME="load_arc" VALUE="Load">

</FORM>



<?
  if ($gem_arc) {
  $writefilename = $filnavn;
  $writefile = fopen($writefilename, "w");
  fwrite ($writefile, $loadarea);
  fclose ($writefile);
  print("<b>saved!</b><br>");

  }
?>

<FORM ACTION="" METHOD="post" NAME="form">
<INPUT TYPE="submit" NAME="gem_arc" VALUE="Save">
</FORM>
Avatar billede rrm Nybegynder
29. november 2003 - 14:20 #1
Hvad er det der ikke virker??? Hvis det er if ($load_arc) { ... }, så prøv med  if ($_POST["load_arc"]) { istedet....
Avatar billede rasmus_a Nybegynder
29. november 2003 - 14:23 #2
Jeg får denne besked:

Warning: fopen("", "w") - Inappropriate ioctl for device in /home/sites/sitexxx/edit.php on line 40

Warning: Supplied argument is not a valid File-Handle resource in /home/sites/sitexxx/edit.php on line 41

Warning: Supplied argument is not a valid File-Handle resource in /home/sites/sitexxx/edit.php on line 42
saved!
Avatar billede Slettet bruger
29. november 2003 - 14:25 #3
Jeg vil gætte på at register_globals er sat til off, så du skal bruge $__POST['load_arc'] i stedet for $load_arc og ligeledes for $filnavn

Derudover er det meget farligt at bruge et filnavn direkte, når det kommer fra brugeren.
Avatar billede Slettet bruger
29. november 2003 - 14:26 #4
Derudover er din Save knap en formular for sig selv, så når du klikker på den, glemmer den lystigt den anden formular.
Avatar billede rasmus_a Nybegynder
29. november 2003 - 14:54 #5
Hvordan skal koden så se ud?
Avatar billede Slettet bruger
29. november 2003 - 20:54 #6
For at det skal virker, skal du have din Save-knap op i den anden formular. Bare placer det to <input type="submit"...> lige efter hinanden.

Derudover kan du øge sikkerheden, ved at have et array i starten, som er defineret som:

$filer[1]="1.txt";
$filer[2]="2.txt";

og ændre din selects optionværdier til bare at være det passende nummer i dit array.

Når du så skal bruge filnavnet, bruger du $filer[$filnavn] istedet for bare $filnavn.
Avatar billede rasmus_a Nybegynder
30. november 2003 - 11:21 #7
hmm, jeg kan ikke rigtig få det til at virke.. kan du lave koden hvis jeg hæver pointene til 30?
Avatar billede Slettet bruger
30. november 2003 - 11:25 #8
Vis lige din kode som den ser ud nu, og så skal jeg se på det.
Avatar billede rasmus_a Nybegynder
30. november 2003 - 14:59 #9
jeg har ingen kode der virker.. har faktisk slettet det hele. det eneste der er tilbage er den i dette indlæg.. håber du kan brige det?
Avatar billede Slettet bruger
30. november 2003 - 18:33 #10
<?php

$filer['1.txt']="1.txt";
$filer['2.txt']="2.txt";

  if ($load_arc) {

$lines = file($filer[$filnavn]);

$output = "";

for($i=0;$i<sizeof($lines);$i++){
    $output.= $lines[$i] . "";
}


}
?>


<FORM ACTION="" METHOD="post" NAME="form">
<select name="filnavn">
    <option value="1.txt">nummer1</option>
    <option value="2.txt">nummer2</option>
</select>
<BR>
<TEXTAREA COLS="40" ROWS="9" NAME="loadarea"><?php echo $output; ?></TEXTAREA>
<BR>
<INPUT TYPE="submit" NAME="load_arc" VALUE="Load">
<INPUT TYPE="submit" NAME="gem_arc" VALUE="Save">
</FORM>



<?
  if ($gem_arc) {
  $writefilename = $filer[$filnavn];
  $writefile = fopen($writefilename, "w");
  fwrite ($writefile, $loadarea);
  fclose ($writefile);
  print("<b>saved!</b><br>");

  }
?>
Avatar billede rasmus_a Nybegynder
30. november 2003 - 23:03 #11
den gemmer det men ikke i den rigtige fil.. nogle gange gemmer den ændringerne i begge filer..?
Avatar billede Slettet bruger
01. december 2003 - 01:07 #12
Husk, at før du klikker save, skal du sikre dig, at det er det rette filnavn, der er valgt. Også selv om du lige har loadet den.
Avatar billede rasmus_a Nybegynder
01. december 2003 - 10:18 #13
Prøv scriptet selv - Det virker ikke helt. Men næsten! :)
Avatar billede rasmus_a Nybegynder
01. december 2003 - 10:28 #14
Nu virker scriptet - Har lavet lidt om på det:


<?php

  if ($load_arc) {

$lines = file($filnavn);


$output = "";

for($i=0;$i<sizeof($lines);$i++){
    $output.= $lines[$i] . "";
}

}
?>


<FORM ACTION="" METHOD="post" NAME="form">
<select name="filnavn">
    <option value="ram.txt">RAM</option>
    <option value="outh.txt">Outh</option>
</select>
<BR>
<TEXTAREA COLS="40" ROWS="9" NAME="loadarea"><?php echo $output; ?></TEXTAREA>
<BR>
<INPUT TYPE="submit" NAME="load_arc" VALUE="Load">
<INPUT TYPE="submit" NAME="gem_arc" VALUE="Save">
</FORM>






<?php
  if ($gem_arc) {
  $writefilename = $filnavn;
  $writefile = fopen($writefilename, "w");
  fwrite ($writefile, $loadarea);
  fclose ($writefile);
  print("<b>saved!</b><br>");

  }
?>


Nu mangler jeg bare at få "stripslashes" arbejdet ind i det? Hvor er det jeg gør det? ved fclose?
Avatar billede rasmus_a Nybegynder
01. december 2003 - 10:28 #15
ps: hvordan hæver jeg pointsene til 30?
Avatar billede Slettet bruger
01. december 2003 - 10:46 #16
Nu bruger du igen et filnavn direkte fra browseren. Havd gør du, hvis brugeren laver en kopi af din side, og retter et filnavn til f.eks. "/etc/passwd"?

stripslashes skal gøres f.eks ved starten af scriptet på de variable, der har brug for det.

Jeg tror nok man kan væle at tildele ekstra point, når man accepterer svar, men jeg ved det ikke. Har ikke selv stillet spørgsmål endnu.
Avatar billede rasmus_a Nybegynder
01. december 2003 - 11:15 #17
jamen hvis man ændrer filnavnet til nopget andet krvæer det vel at den falgte fil er chmod'ed så den kan skrives i.. ?

ja, man kunne engang klikke en knap der hed 'avanceret' men den er her ikke nu ?... :(
Avatar billede Slettet bruger
01. december 2003 - 11:27 #18
Nogle gange er det farligt nok, at fremmede kan få filen at se.

Tænk f.eks. på filen med passwords til en database. For at dit phpscript skal kunne bruge dem, skal den kunne læse filen. Dermed ville denne lille editor også være i stand til at læse den.

Bagefter lægger man bare en ny fil, med efternavnet .php, og så kan man gøre næsten hvadsomhelst.
Avatar billede Slettet bruger
01. december 2003 - 11:29 #19
Tak for points forresten
Avatar billede rasmus_a Nybegynder
01. december 2003 - 11:33 #20
det har du ret i.. dette skal heldigvis bruges til en lille side. men jeg vil da have den bedre sikret næste gang. tak for hjælpen!! :D
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