hallo,

Ik heb zelf een CMS in elkaar geklopt. Het draait nu als een tiet, echter er is nog 1 probleem. Het probleem is het volgende:

nieuwsberichten die worden toegevoegd en die speciale tekens al " of ' bevatten (ook in woorden, zoals collega's) kunnen niet worden toegevoegd.

op dit forum (en ook op andere) heb ik gezocht. Ik ben wat tegen gekomen over htmlentities. Echter echt duidelijk wordt het niet uitgelegd. Heeft iemand een richting / tip waarin ik het moet zoeken?

Ik hoop het vanmiddag nog te fixen, dan kan ik teninste met mijn vriendinnen naar Oranje kijken.

fem
ga ik checken...
Hoi Femke,

bekend probleem. Ik neem aan dat je de gegevens in een MySQL database stopt? Haal er dan addslashes () overheen voordat je dat doet. MySQL zal de slashes herkennen als escape-teken en de gegevens zonder slashes opslaan.

Wanneer magic quotes aanstaat worden er door PHP automatisch slashes toegevoegd wanneer je de gegevens weer uit je db haalt. Om dit te voorkomen maak je een bestandje aan met de naam
.htaccess

plaats daarin:
php_flag magic_quotes_gpc off

en zet het in de map waarin je script uitgevoerd wordt.

Voor meer info, lees dit artikel op yapf.net
Ik neem aan dat je bedoelt dat je query dan niet werkt?

Kijk dan eens naar:
[php]mysql_real_escape_string[/php]()

En wat ik ook nog wel eens handig vind:
[php]htmlentities[/php]()
hier bij gebruik ik dan altijd ENT_QUOTES
@BOAZ, inderdaad werkt de query niet als ik, in het beheer gedeelte van het CMS, de speciale tekens (" of ') in berichten heb staan die ik wil posten.

De door Bert en Jan Koehoorn genoemde oplossing van AddSlashes lijkt me de juiste. Ik heb met succes het .htaccess file aangemaakt. Echter, het lukt me niet om met succes het commando addslashes op de juiste manier in de code te voegen. Via google heb ik verschillende voorbeelden gevonden. Zonder resultaat. Kan iemand een voorzet geven?

Wederom veel dank...

<?

//-- toevoegen
if ($_GET[show] == "add" || $_POST["show"] == "add")
{
if ($_POST["titel"] && $_POST["msg"] && $_POST["mydate"] && $_POST["kop"])
{



$sql = "INSERT INTO nieuws (id, titel, msg, datum, kop) VALUES ('', '$_POST[titel]', '$_POST[msg]', '$_POST[mydate]', '$_POST[kop]')";

$res = mysql_query($sql);

if ($res)
{
echo "Het bericht is toegevoegd aan de site.";
}
else
{
echo "Het bericht is niet toegevoegd aan de site";
}

?>
$sql = "INSERT INTO nieuws (id, titel, msg, datum, kop) VALUES ('', '".mysql_real_escape_string($_POST['titel'])."', '".mysql_real_escape_string($_POST['msg'])."', '".mysql_real_escape_string($_POST['mydate'])."', '".mysql_real_escape_string($_POST['kop'])."')";
@eris,

dankjewel... het werkt.
En misschien handiger:
<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$values = array ();
foreach ($_POST as $key =>$value) {
$values[$key] = addslashes ($value);
// of gebruik mysql_real_escape_string
}
}
?>
Hierna kun je gewoon de array $values gebruiken in je query.
Dit script doet het volgende:
'&' (ampersand) wordt '&amp;'
'"' (dubbele quote) wordt '&quot;'.
''' (enkele quote) wordt '&#039;'.
'<' (kleiner dan) wordt '&lt;'
'>' (groter dan) wordt '&gt;'
'\n' (nieuwe regel) wordt '<br />' of '<br>'.
'\' (backslahs) wordt ''.
'\\' (dubbele backslash) wordt '\'.

<?php
function htmlcode ($var){
  $var = htmlspecialchars ($var, ENT_QUOTES);
  $var = stripslashes ($var);
  $var = nl2br ($var);
  return $var;
}
?>

Je roept de functie zo aan:

<?php
$bericht = htmlcode (hier het bericht);
?>

Reageren