19 berichten aan het bekijken - 1 tot 19 (van in totaal 19)
  • Q:
    Bijdrager
    TabHii

    PHP beveiliging fomulier

    Ik ben op zoek naar dingen, ik weet alleen niet hoe ze heten.
    Ik wil een beveiliging bouwen dat je maar 1x in de 5 minuten een bericht kan plaatsen en dat je hem niet leeg kan plaatsen…

    — index.php —
    [code:1:12237d8514]<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

    <html xmlns="http://www.w3.org/1999/xhtml" lang="nl">

    <head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8" />
    <meta name="keywords" content="spam"/>
    <meta name="description" content="Hoi, welkom in Spamparadijs, hier mag je zoveel spammen als je maar wilt!"/>
    <meta name="language" content="nl"/>
    <meta name="robots" content="index, no-follow" />
    <link rel="icon" href="favicon.ico" type="image/x-icon" />
    <link rel="shortcut icon" href="favicon.ico" type="image/x-icon" />
    <link rel="stylesheet" type="text/css" media="screen" href="style.css" />
    <title>Spamparadijs!</title>

    </head>

    <body>

    <div id="container">

    <div id="header"></div>

    <div id="plaatsbericht">
    <form action="plaats.php" method="post" accept-charset="utf-8">
    <p>Naam:</p>
    <p><input name="naam" type="text" size="20"/></p>
    <p>&nbsp;</p>
    <p>Uw bericht:</p>
    <p><textarea name="bericht" rows="8" cols="30"></textarea> </p>
    <p>&nbsp;</p>
    <p><input type="submit" name="submit" value="Verstuur" title="Verstuur"/> </p>
    </form>
    </div>

    <div id="content">
    <?
    require("berichten.php");
    ?>
    </div>

    <div id="footer"></div>

    </div>

    </body>
    </html>
    [/code:1:12237d8514]

    — plaats.php —
    [code:1:12237d8514]<?php

    $naam = $_POST[’naam’];
    $bericht = $_POST[’bericht’];
    $bericht = htmlentities($bericht);
    $bericht = nl2br($bericht);
    $bericht = stripslashes($bericht);

    // defineer het bestand met berichten
    $file = "berichten.php";

    // open het bestand
    $fopenr = fopen ($file, "r");

    // sla de inhoud op om de eerder toegevoegde berichten
    // te onthouden en te herschrijven onder het nieuwe bericht
    $msgs = fread ($fopenr, filesize ($file));

    // open de file nogmaals maar dan nu om er in te schrijven
    $fopenw = fopen($file, "w+");

    // schrijf nieuwe bericht + alle oude in $file
    fwrite($fopenw, "
    nn<!– bericht –>n
    <p><strong>$naam</strong> schreef:</p>n
    <blockquote><p>$bericht</p></blockquote>n
    <p>&nbsp;</p>$msgs
    ");

    // sluit het bestand
    fclose($fopenw);

    // sluis bezoeker door naar index.php
    echo "<SCRIPT LANGUAGE="javascript" TYPE="text/javascript">window.location=’index.php'</SCRIPT>n";

    ?>

    <META HTTP-EQUIV="Refresh" CONTENT="0;URL=index.php">[/code:1:12237d8514]

    — berichten.php — <– zo word het uitgespuugd door de plaats.php

    [code:1:12237d8514]
    <!– bericht –>
    <p><strong>blaba</strong> schreef:</p>
    <blockquote><p>hoe vezin je het</p></blockquote>
    <p>&nbsp;</p>
    [/code:1:12237d8514]

    Naar wat moet ik gaan zoeken, ik zie nu niet meer de bomen door het bos, ik hoop dat iemand mij kan helpen

    Bijdrager
    WouterReyntjens

    Waarom werk je eigenlijk met een bestand waar je je berichten in schrijft ipv met een database?

    Bijdrager
    DarkRaverNL

    Inderdaad, beter ga je dit met een database doen.

    Gebruik if(Empty($str)) om te checken of het empty is, je kan ook gewoon if($str) doen want als string 0 of leeg is dan is het ook false.

    Met een database kan je onthouden wanneer diegene voor het laatst gepost heeft, anders met een cookie of sessie bijv.

    Bijdrager
    vikking

    En
    [code:1:9f6c929d79]$bericht = $_POST[’bericht’];
    $bericht = htmlentities($bericht);
    $bericht = nl2br($bericht);
    $bericht = stripslashes($bericht);[/code:1:9f6c929d79]
    kan je vervangen door:
    [code:1:9f6c929d79]$bericht = stripslashes(nl2br(htmlentities($_POST[’bericht’])));[/code:1:9f6c929d79]
    of nog beter, je maakt gewoon een functie die het in een keer doet:
    [code:1:9f6c929d79]function clean($string){
    return stripslashes(nl2br(htmlentities($string)));
    }[/code:1:9f6c929d79]
    en het zou inderdaad handiger zijn dat je een database hiervoor gebruikt.

    Bijdrager
    TabHii

    toevallig beschik ik niet over een database anders had ik het wel gedaan!!

    Ik ben al een stukje verder

    index.php
    [code:1:20c42c88bc]<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

    <html xmlns="http://www.w3.org/1999/xhtml" lang="nl">

    <head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8" />
    <title>Spamparadijs!</title>

    </head>

    <body>

    <div id="container">

    <div id="header"></div>

    <div id="plaatsbericht">

    <?php

    // form
    echo ‘<form method="POST" ACTION="plaats.php" />’;

    // naam
    echo ‘<p>Naam:</p>’;
    echo ‘<p><input type="text" name="naam" value="" . $_POST["naam"] . "/></p>’;

    // space
    echo ‘<p>&nbsp;</p>’;

    // mail
    echo ‘<p>Bericht:</p>’;
    echo ‘<p><TEXTAREA name="bericht" ROWS="6" COLS="30" " . htmlentities($_POST["bericht"]) . "></TEXTAREA></p>’;

    // space
    echo ‘<p>&nbsp;</p>’;

    // verzenden
    echo ‘<p><input type="submit" name="submit" value="Versturen" /></p>’;

    // sluit form
    echo ‘</form>’;

    ?>

    </div>

    <div id="content">
    <?php
    require("berichten.php");
    ?>
    </div>

    <div id="footer"></div>

    </div>
    </body>
    </html>[/code:1:20c42c88bc]

    plaats.php
    [code:1:20c42c88bc]<?php

    // als er niet op submit is gedrukt, of als er wel op is gedrukt maar niet alles ingevoerd is
    if (!$_POST[’submit’] || $_POST[’submit’] && (!$_POST[’naam’] || !$_POST[’bericht’]))
    {
    if ($_POST[’submit’] && (!$_POST[’naam’] || !$_POST[’bericht’]))
    {
    echo "Je bent je naam en/of bericht vergeten in te vullen!";
    }
    }

    $naam = stripslashes(nl2br(htmlentities($_POST[’naam’])));
    $bericht = stripslashes(nl2br(htmlentities($_POST[’bericht’])));

    // defineer het bestand met berichten
    $file = "berichten.php";

    // open het bestand
    $fopenr = fopen ($file, "r");

    // sla de inhoud op om de eerder toegevoegde berichten
    // te onthouden en te herschrijven onder het nieuwe bericht
    $msgs = fread ($fopenr, filesize ($file));

    // open de file nogmaals maar dan nu om er in te schrijven
    $fopenw = fopen($file, "w+");

    // schrijf nieuwe bericht + alle oude in $file
    fwrite($fopenw, "
    nn<!– bericht –>n
    <p><strong>$naam</strong> schreef:</p>n
    <blockquote><p>$bericht</p></blockquote>n
    <p>&nbsp;</p>$msgs
    ");

    // sluit het bestand
    fclose($fopenw);

    // sluis bezoeker door naar index.php
    echo "<SCRIPT LANGUAGE="javascript" TYPE="text/javascript">window.location=’index.php'</SCRIPT>n";
    ?>[/code:1:20c42c88bc]

    berichten.php
    [code:1:20c42c88bc]<!– bericht –>

    <p><strong>test</strong> schreef:</p>

    <blockquote><p>jaja</p></blockquote>

    <p>&nbsp;</p> [/code:1:20c42c88bc]

    Nu kan hij nog steeds worden gepost, ook al is 1 veld leeg, wat doe ik verkeerd???

    Bijdrager
    DarkRaverNL

    Dan raad ik je zeer aan om een host te zoeken die wel een database heeft.

    Bijdrager
    WouterReyntjens

    Waarom gebruik je dit [code:1:2773e5cca1]if ($_POST[’submit’] && (!$_POST[’naam’] || !$_POST[’bericht’]))
    { [/code:1:2773e5cca1]

    en niet dit : [code:1:2773e5cca1]if ($_POST[’submit’] && (empty(*_POST[’naam’]) || empty(*_POST[’bericht’])))
    { [/code:1:2773e5cca1]

    Das logischer denk ik

    Bijdrager
    TabHii

    krijg alleen wel een foutmelding

    Parse error: parse error, expecting `T_VARIABLE’ or `’$” in plaats.php on line 5

    en dat is jouw eerste regel… :oops:

    Bijdrager
    J.C.
    ”TabHii”

    krijg alleen wel een foutmelding

    Parse error: parse error, expecting `T_VARIABLE’ or `’$” in plaats.php on line 5

    en dat is jouw eerste regel… :oops:

    [code:1:86ac89bb85]if ($_POST[’submit’] && (empty($_POST[’naam’]) || empty($_POST[’bericht’])))
    {[/code:1:86ac89bb85]

    Ik denk dat het met $ moet ipv *, kleine typo.

    Bijdrager
    WouterReyntjens

    Bedankt J.C. had het niet gezien dat er een foutje in stond

    Bijdrager
    J.C.

    :) geen probleem.


    @TabHii
    doet hij het nu?

    Bijdrager
    DarkRaverNL
    ”WouterReyntjens”

    Waarom gebruik je dit [code:1:08a1dc83be]if ($_POST[’submit’] && (!$_POST[’naam’] || !$_POST[’bericht’]))
    { [/code:1:08a1dc83be]

    en niet dit : [code:1:08a1dc83be]if ($_POST[’submit’] && (empty(*_POST[’naam’]) || empty(*_POST[’bericht’])))
    { [/code:1:08a1dc83be]

    Das logischer denk ik

    Ik gebruik ook Empty hiervoor, vaak gebruik ik !$var alleen voor bepaalde values zoals met MySQL enzo.

    Je wil hier kijken of de geposte naam/bericht leeg zijn toch ?
    If ( IsSet( $_POST[‘submit’] ) && ( Empty( $_POST[‘naam’] ) || Empty( $_POST[‘bericht’] ) ) )

    Bijdrager
    TabHii

    Bedankt :kiss: Ik zal me gaan verdiepen in cookies

    Bijdrager
    WouterReyntjens

    Waarom zou je je gaan verdiepen in cookies? Je zou beter kiezen voor sessies ofzo maar geen cookies

    Bijdrager
    TabHii

    waarom sessies???

    Bijdrager
    oegemeister

    cookies zijn client-side….. je bent dan dus afhankelijk van de bezoeker….. sessies zijn server-side en dus ben je niet afhankelijk van de instellingen van de bezoeker.

    gr Sjoerd

    Bijdrager
    DarkRaverNL

    Iiemand kan zijn browser quitten en weer openen dan dan kan hij alsnog posten binnen de minimum tijd, dus ik zou toch voor een database gaan zoeken.

    Bijdrager
    TabHii

    mijn provider mailde gister dat database er aan zit te komen… :lol:

    Bijdrager
    DarkRaverNL
    ”TabHii”

    mijn provider mailde gister dat database er aan zit te komen… :lol:

    Beter, nou nog een boekje “MySQL voor Dummies” erbij pakken als je het nog niet kent xD

19 berichten aan het bekijken - 1 tot 19 (van in totaal 19)

Je moet ingelogd zijn om een reactie op dit onderwerp te kunnen geven.