pagina bewerken met variable

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

D V

D V

09/02/2015 12:05:01
Quote Anchor link
Hallo iedereen,

Ik heb de volgende pagina, waar je pagina's kunt bewerken:
Afbeelding
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<html>
    <head>
        <?php
        $url
= './choosepage.php';
        $file = $_GET['variable'];
        // checks if form has been submitted
        if (isset($_POST['text']))
        {
   // saves the text contents
            file_put_contents($file, $_POST['text']);
            // reloads page
            header(sprintf('Location: %s', $url));
            printf('<a href="%s">Moved</a>.', htmlspecialchars($url));
            exit();}
        // reads the textfile
        $text = file_get_contents($file); ?>

        <title>Bewerk pagina</title>
    </head>
    <body>
            <a href="./choosepage.php?variable=../pages/page1.php">page1</a>
            <a href="./choosepage.php?variable=../pages/page2.php">page2</a>
            <div id="container">
                <form action="" method="post">
                <textarea name="text" style="width:100%;" rows="20"><?php echo htmlspecialchars($text) ?></textarea>
                <input type="submit" value="Opslaan" /></form>
            </div>
    </body>
</html>

Als ik nu de eerste pagina (page1.php) bewerk en op opslaan klikt werkt alles perfect, maar als ik de 2e pagina (page2.php) bewerk en op opslaan klik worden de wijzigingen niet opgeslagen.

Weet iemand waar dit aan ligt of hoe ik dit op een andere manier kan doen?
Alvast bedankt,

David
- Aar -:
Gelieve in het vervolg bij code de [code][/code]-tags gebruiken.
Hier kan je meer lezen over de mogelijke opmaakcodes.
Alvast bedankt!
Gewijzigd op 09/02/2015 12:20:27 door - Ariën -
 
PHP hulp

PHP hulp

22/12/2024 17:35:38
 
- Ariën  -
Beheerder

- Ariën -

09/02/2015 12:25:11
Quote Anchor link
Om meteen met de deur in huis te vallen zie ik meteen een groot veiligheidslek waarbij iemand elke pagina van je website kan aanpassen, omdat er geen filtering van de pagina's plaatsvindt (met een array bijvoorbeeld).

Verder raad ik aan om te controleren of je formulier is verstuurd via deze constructie:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
if($_SERVER['REQUEST_METHOD']=="POST") {
    // het formulier is verstuurd via POST.
} else {
    // het formulier is niet verstuurd, toon hier bijv. je formulier
}
?>
 
Frank Nietbelangrijk

Frank Nietbelangrijk

09/02/2015 12:34:26
Quote Anchor link
Verder mag een header() functie niet gebruikt worden wanneer er reeds output gegenereerd is.

De oplossing voor dit probleem is heel simpel:

a) Hak je PHP pagina's in twee delen.
b) Het eerste deel bevat je PHP programma maar niet je output
c) Het tweede deel bevat je output

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<?php

$url
= './choosepage.php';
$file = $_GET['variable'];
        
// checks if form has been submitted
if($_SERVER['REQUEST_METHOD']=="POST")
{
   // saves the text contents
    file_put_contents($file, $_POST['text']);
    // reloads page
    header('Location: ' . $url);
     /* printf('<a href="%s">Moved</a>.', htmlspecialchars($url)); NIET MEER NODIG */
    exit();
}


// reads the textfile
$text = htmlspecialchars(file_get_contents($file));

?>

<DOCTYPE!>
<html>
    <head>
        <title>Bewerk pagina</title>
    </head>
    <body>
            <a href="./choosepage.php?variable=../pages/page1.php">page1</a>
            <a href="./choosepage.php?variable=../pages/page2.php">page2</a>
            <div id="container">
                <form action="" method="post">
                <textarea name="text" style="width:100%;" rows="20"><?php echo $text; ?></textarea>
                <input type="submit" value="Opslaan" /></form>
            </div>
    </body>
</html>
Gewijzigd op 09/02/2015 12:41:29 door Frank Nietbelangrijk
 
D V

D V

09/02/2015 13:25:56
Quote Anchor link
- Aar - op 09/02/2015 12:25:11:
Om meteen met de deur in huis te vallen zie ik meteen een groot veiligheidslek waarbij iemand elke pagina van je website kan aanpassen, omdat er geen filtering van de pagina's plaatsvindt (met een array bijvoorbeeld).


Op de rest van mijn site doe ik het zo:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
    // checks if login-cookie is set, if not it redirects to the login page
    if (!isset($_COOKIE['loggedin']))
    {

        header('location:index.php');
        $nottificationtime = 3 + time();
        setcookie(redirected, date("F jS - g:i a"), $nottificationtime);
    }

?>


Frank Nietbelangrijk op 09/02/2015 12:34:26:
Verder mag een header() functie niet gebruikt worden wanneer er reeds output gegenereerd is.

De oplossing voor dit probleem is heel simpel:

a) Hak je PHP pagina's in twee delen.
b) Het eerste deel bevat je PHP programma maar niet je output
c) Het tweede deel bevat je output
[..]

Werkt ook niet...

David
 
- Ariën  -
Beheerder

- Ariën -

09/02/2015 13:28:00
Quote Anchor link
Leuk die cookie beveiliging, maar het heeft niks met misbruik tegen te gaan te maken.

Wat heb je nu al aan code geprobeerd?
 
Thomas van den Heuvel

Thomas van den Heuvel

09/02/2015 13:47:36
Quote Anchor link
Waar ik benieuwd naar ben is wat precies de reden is dat je voor dit soort zaken geen database gebruikt?
 
D V

D V

13/02/2015 15:48:39
Quote Anchor link
Hallo iedereen,

Ik kwam erachter dat de rechten van het bestand op alleen-lezen stonden...
Mijn fout..
Iedereen bedankt voor de hulp!

David

PS is er nog een optie om dit topic op opgelost te zetten?
Gewijzigd op 13/02/2015 15:49:21 door D V
 
- Ariën  -
Beheerder

- Ariën -

13/02/2015 18:30:13
Quote Anchor link
Met is_writable() kan je dit eenvoudig checken. Verder kan je een [opgelost]-tag VOOR in je titel zetten met behoud men je berichten.
Gewijzigd op 13/02/2015 18:30:27 door - Ariën -
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.