Ik heb een gastenboek gemaakt in php. Echter ondersteund mijn invoervak voor het bericht in te typen blijkbaar html codes, want ik heb al 3 keer aan de hand gehad dat iemand een loop in mijn gastenboek heeft geschreven. Nu zoek ik een manier om html te verbieden in php. Hoe kan ik dit doen?
<?php

nl2br(htmlspecialchars($row['veld']));

?>

zo worden enters wel naar new lines geparsed en alle overige HTML/JS wordt enkel weergegeven, niet uitgevoerd.
Het werkt nog altijd niet.
Hier mijn code:

<?php

nl2br(htmlspecialchars($row['bericht']));
$achtergrond=$_GET['achtergrond'];

if ($achtergrond == "") {$achtergrond='000000';}

echo "<body link='blue' alink='blue' vlink='blue' text='white' bgcolor='$achtergrond'>";
echo "<title>Gastenboek</title>";

echo "<table width=100% border='0'>";
echo "<tr>";
echo "<td align='center'><font size='6' face='Tempus sans ICT, Arial, Helvetica'>Gastenboek</font><br>";
echo "<a href='gastenboek.php?achtergrond=0000FF'><img src='kleuren/donkerblauw.png' width='20' height='20' border='0'></a>";
echo "&nbsp;";
echo "<a href='gastenboek.php?achtergrond=OOFFOO'><img src='kleuren/groen.png' width='20' height='20' border='0'></a>";
echo "&nbsp;";
echo "<a href='gastenboek.php?achtergrond=0EB2F0'><img src='kleuren/lichtblauw.png' width='20' height='20' border='0'></a>";
echo "&nbsp;";
echo "<a href='gastenboek.php?achtergrond=FF0000'><img src='kleuren/rood.png' width='20' height='20' border='0'></a>";
echo "&nbsp;";
echo "<a href='gastenboek.php?achtergrond=000000'><img src='kleuren/zwart.png' width='20' height='20' border='0'></a>";
echo "</td>";
echo "</tr>";
echo "</table>";

//lettertype instellen
echo "<font face='Verdana, Arial, Helvetica'>";

//-- einde formulier alles weergeven--------------------------------------------------------------------------------------------------
//verbinding maken met localhost en instellen waar hij van moet laden
mysql_connect("localhost","gebruikersnaam","wachtwoord");
mysql_select_db("handelss_cwvdb1");

//bericht toevoegen-------------------------------------------------------------------------------------------------------
IF ($_POST[verzenden])
{

$naam = $_POST[naam];
$email = $_POST[email];
$bericht = $_POST[bericht];

//tijd en datum
$datum = date("j F Y");
$tijd = date("H:i:s");

$maanden = array('januari', 'februari', 'maart', 'april', 'mei', 'juni', 'juli', 'augustus', 'september', 'oktober', 'november', 'december');
$maand_vh_jaar = date("n")-1;
$maand = $maanden[$maand_vh_jaar];
$dag = date('j');
$jaar = date("Y");
$datum = $dag." ".$maand." ".$jaar;

$insert = "INSERT INTO gastenboek (id, datum, tijd, naam, email, bericht) VALUES ('','$datum','$tijd','$naam','$email','$bericht')";
$query = mysql_query($insert) OR die(mysql_error());

echo "U bericht is toegevoegd<br><br>";
echo "<a href='gastenboek.php'>terug</a><br>";

echo "<br><br>Deze site is nog altijd onder constructie, hier zal nog veel aan veranderen. Dank u voor u bezoek.";
echo "<br>&copy; Thierry Scholberg 2007. Alle rechten voorbehouden.";
}

else
{
$commando="SELECT * FROM `gastenboek` ORDER BY `id` DESC ";
$resultaat=mysql_query($commando);

//loop voor alles weer te geven
while($array=mysql_fetch_array($resultaat)){

//mooi schematje :)
echo "<b>Datum: </b>" . $array['datum'] ." ". $array['tijd'] . "<br />";
echo "<b>Naam: </b>" . $array['naam'] . "<br />";
echo "<b>E-mail: </b>" . $array['email'] . "<br />";
echo "<b>Bericht: </b><br>";
echo $array['bericht']. "<br><br>";
}

echo "<hr>";

echo "<form method=\"post\" action=\"$PHP_SELF\" onSubmit=\"this.submit.disabled='true'\">";


echo "<table border='0'>";
echo "<tr>";
echo "<td colspan='2' align='center'><b><u>Bericht toevoegen</u></b><br><br></td>";
echo "</tr>";

echo "<tr>";
echo "<td><b>naam:</b></td>";
echo "<td><input type=\"text\" size=\"30\" name=\"naam\"><br></td>";
echo "</tr>";

echo "<tr>";
echo "<td><b>email:</b></td>";
echo "<td><input type=\"text\" size=\"30\" name=\"email\"><br></td>";
echo "</tr>";
// echo "bericht: <br><input type=\"text\" size=\"30\" name=\"ype\"><br>";

echo "<tr>";
echo "<td valign='top'><b>bericht: </b></td>";
echo "<td><textarea rows='8' name='bericht' cols='60'></textarea></td>";
echo "</tr>";

echo "<tr><td colspan='2' align='center'><input type=\"submit\" name=\"verzenden\" value=\"Verzenden\"></td></tr>";
echo "</table>";
echo "</form>";

echo "(typ '< br >' zonder aanhalingstekens en zonder spaties voor een enter weer te geven).";

echo "<br><br>Deze site is nog altijd onder constructie, hier zal nog veel aan veranderen. Dank u voor u bezoek.";

}


//ingang verwijderen-----------------------------------------------------------------------------------------------------------------------------------------------

//echo "ingang verwijderen";

//$commando="DELETE FROM gastenboek WHERE id = '$id'";
//mysql_query($commando);

//echo "<br><br>rij verwijderen \n \n";
//echo "<form name=invulformulier method='post' action='gastenboek.php'> \n";
//echo "<table border='0'> \n";
//echo "<tr> \n";
//echo "<td>Geef de ID van de rij die u wilt verwijderen:</td> \n";
//echo "<td><input type=text name='id'></td> \n";
//echo "</tr> \n \n";
//echo "<td colspan='2' align='center'><input type=submit name='verzenden' value='verzenden' href='gastenboek.php'></td> \n";
//echo "</tr> \n \n";
//echo "</font> \n";
//echo "<table> \n";

//lettertype afsluiting
echo "<font>";

?>
ik zie de aanpassing nergens
regel nummer 3
Regel 77:

<?php
echo nl2br($array['bericht']). "<br><br>";
?>

Toen ik de code veranderde op regel 77 gaf hij helemaal geen berichten meer weer.
Ik heb erna nog geprobeert ervoor te zorgen dat hij omzet voor dat hij post zodat hij geen html tags in de database zet. Hiervoor heb ik op regel 42 deze code bijgezet: $bericht=nl2br(htmlspecialchars($bericht));
Nu doet hij het wel maar van het moment dat je op de knop verzenden klikt om een bericht toe te voegen geeft hij een kadertje weer waar in staat dat er een runtime-fout is opgetreden en met de vraag of ik wil beginnen met de foutopsporing.
Hij zegt dat de fout staat op regel 36 (if regel) en als foutmelding geeft hij "deze eigenschap of methode wordt niet ondersteund door dit object".
Ten eerste, die datum vul je gewoon met een NOW(), daar is MySQL voor gemaakt... ten tweede, beetje onveilig script niet? Ik kan nu jou hele database wissen zegmaar...
Het kan heel goed zijn dat er fouten staan in mijn script, want ik ben nog een beginneling en geen php expert.
Kan je mij zeggen waar mijn fout staat voor html te blokkeren en waar ev. de andere fouten staan?
Met strip_tags() kan je eenvoudig html eruit filteren, dat is een eerste stap :).
Moet werken:

<?php
   
$achtergrond=$_GET['achtergrond'];

if ($achtergrond == "") {$achtergrond='000000';}

echo "<body link='blue' alink='blue' vlink='blue' text='white' bgcolor='$achtergrond'>";
echo "<title>Gastenboek</title>";

echo "<table width=100% border='0'>";
echo "<tr>";
echo "<td align='center'><font size='6' face='Tempus sans ICT, Arial, Helvetica'>Gastenboek</font><br>";
echo "<a href='gastenboek.php?achtergrond=0000FF'><img src='kleuren/donkerblauw.png' width='20' height='20' border='0'></a>";
echo "&nbsp;";
echo "<a href='gastenboek.php?achtergrond=OOFFOO'><img src='kleuren/groen.png' width='20' height='20' border='0'></a>";
echo "&nbsp;";
echo "<a href='gastenboek.php?achtergrond=0EB2F0'><img src='kleuren/lichtblauw.png' width='20' height='20' border='0'></a>";
echo "&nbsp;";
echo "<a href='gastenboek.php?achtergrond=FF0000'><img src='kleuren/rood.png' width='20' height='20' border='0'></a>";
echo "&nbsp;";
echo "<a href='gastenboek.php?achtergrond=000000'><img src='kleuren/zwart.png' width='20' height='20' border='0'></a>";
echo "</td>";
echo "</tr>";
echo "</table>";

//lettertype instellen
echo "<font face='Verdana, Arial, Helvetica'>";

//-- einde formulier alles weergeven--------------------------------------------------------------------------------------------------
//verbinding maken met localhost en instellen waar hij van moet laden
mysql_connect("localhost","gebruikersnaam","wachtwoord"); 
mysql_select_db("handelss_cwvdb1"); 

//bericht toevoegen-------------------------------------------------------------------------------------------------------
IF ($_POST[verzenden])
    {

    $naam = $_POST[naam];
    $email = $_POST[email];
    $bericht = $_POST[bericht];
    
    //tijd en datum
    $datum = date("j F Y"); 
    $tijd = date("H:i:s"); 

  $maanden = array('januari', 'februari', 'maart', 'april', 'mei', 'juni', 'juli', 'augustus', 'september', 'oktober', 'november', 'december');
  $maand_vh_jaar = date("n")-1;  
  $maand = $maanden[$maand_vh_jaar]; 
  $dag = date('j');
  $jaar = date("Y"); 
  $datum = $dag." ".$maand." ".$jaar; 
        
    $insert = "INSERT INTO gastenboek (id, datum, tijd, naam, email, bericht) VALUES ('','$datum','$tijd','$naam','$email','$bericht')";
    $query = mysql_query($insert) OR die(mysql_error());
    
    echo "U bericht is toegevoegd<br><br>";
    echo "<a href='gastenboek.php'>terug</a><br>";

echo "<br><br>Deze site is nog altijd onder constructie, hier zal nog veel aan veranderen. Dank u voor u bezoek.";
echo "<br>&copy; Thierry Scholberg 2007. Alle rechten voorbehouden.";
    }

else
    {    
   $commando="SELECT * FROM `gastenboek` ORDER BY `id` DESC ";
$resultaat=mysql_query($commando);

//loop voor alles weer te geven
while($array=mysql_fetch_array($resultaat)){

//mooi schematje :)
echo "<b>Datum: </b>" . $array['datum'] ." ". $array['tijd'] . "<br />";
echo "<b>Naam: </b>" . $array['naam'] . "<br />";
echo "<b>E-mail: </b>" . $array['email'] . "<br />";
echo "<b>Bericht: </b><br>";
echo nl2br(htmlspecialchars($array['bericht'])). "<br><br>";
}

echo "<hr>";

   echo "<form method=\"post\" action=\"$PHP_SELF\"   onSubmit=\"this.submit.disabled='true'\">";


   echo "<table border='0'>";
   echo "<tr>";
   echo "<td colspan='2' align='center'><b><u>Bericht toevoegen</u></b><br><br></td>";
   echo "</tr>";
   
   echo "<tr>";
   echo "<td><b>naam:</b></td>";
   echo "<td><input type=\"text\" size=\"30\" name=\"naam\"><br></td>";
   echo "</tr>";
   
   echo "<tr>";
   echo "<td><b>email:</b></td>";
   echo "<td><input type=\"text\" size=\"30\" name=\"email\"><br></td>";
   echo "</tr>";
//   echo "bericht: <br><input type=\"text\" size=\"30\" name=\"ype\"><br>";

   echo "<tr>";
   echo "<td valign='top'><b>bericht: </b></td>";
   echo "<td><textarea rows='8' name='bericht' cols='60'></textarea></td>";
   echo "</tr>";
   
   echo "<tr><td colspan='2' align='center'><input type=\"submit\" name=\"verzenden\" value=\"Verzenden\"></td></tr>";
   echo "</table>";
   echo "</form>";

   echo "(typ '< br >' zonder aanhalingstekens en zonder spaties voor een enter weer te geven).";
   
   echo "<br><br>Deze site is nog altijd onder constructie, hier zal nog veel aan veranderen. Dank u voor u bezoek.";
   
  }

  
//ingang verwijderen-----------------------------------------------------------------------------------------------------------------------------------------------

//echo "ingang verwijderen";

//$commando="DELETE FROM gastenboek WHERE id = '$id'";
//mysql_query($commando);

//echo "<br><br>rij verwijderen \n \n";
//echo "<form name=invulformulier method='post' action='gastenboek.php'> \n";
//echo "<table border='0'> \n";
//echo "<tr> \n";
//echo "<td>Geef de ID van de rij die u wilt verwijderen:</td> \n";
//echo "<td><input type=text name='id'></td> \n";
//echo "</tr> \n \n";
//echo "<td colspan='2' align='center'><input type=submit name='verzenden' value='verzenden' href='gastenboek.php'></td> \n";
//echo "</tr> \n \n";
//echo "</font> \n";
//echo "<table> \n";

//lettertype afsluiting
echo "<font>";

?> 

Reageren