Hoi,

Ik heb een nieuwsscriptje en als ik de drie velden van mijn nieuwsbericht intyp ( titel, intro, tekst ) dan gaat die informatie prima naar de database mbv ".mysql_real_escape_string($_POST['titel'])." . Daar zit alles snor dus (denk ik).

Als ik dan een CMS overzichtje laat zien (lijst) van mijn nieuwsitems, alleen titel en datum, dan haalt hij de gegevens prima uit de DB.
Rechts van alle titels heb ik het knopjes verwijderen. Ik kan alle berichten verwijderen, behalve als er een ' in de titel staat. Zonder ' tekens kan ik alles prima verwijderen.

Iemand een idee hoe ik dit op kan lossen?
idd, Jan je had helemaal gelijk.

Het was het gebrek aan addslashes. Het werk! Bedankt allen!


zo heb ik het nu werkend :

<?

echo "<a href=\"javascript:askConfirm('Wilt u ".str_replace("'", "\'", $row['titel'])." verwijderen?','$PHP_SELF?show=del&id=$row[id]');\"><center><img src=\"../img/icon_delete.jpg\" width=\"32\" height=\"30\" border=\"0\"></center></a>";

?>
@SanThe:
SanThe schreef op 26.09.2006 09:50
Tussen enkele quotes heeft escapen geen effect.
Maak je query met dubbele quotes met daarin enkele quotes om de 'strings'.

Dus:
$sql = 'INSERT INTO nieuws (id, ..... files) VALUES (\'\', \'' . mysql_real_escape_string(......
wordt:
$sql = "INSERT INTO nieuws (id, ..... files) VALUES ('', '" . mysql_real_escape_string(......


Dit moet je mij eens even uitleggen.

Naar mijn idee is een single-quoted string prima geschikt om een query mee op te bouwen.
Deze string neemt immers alle karakters/tekens letterlijk. (o.a. speciale tekens zoals \n worden niet als enter gezien), dit maakt het interpreteren door PHP ook weer eens iets sneller.

De functies mysql_escape_string en mysql_real_escape_string escapen zowel een enkele als een dubbele quote.

Dus ik zie het probleem hierin niet...

Uiteraard snap ik dan wel dat je waardes tussen single-quotes moet gaan escapen maar dat maakt mij niet zoveel uit. In een goede query zitten alle waardes (van variabelen) zowel integer als string tussen single-quotes.

Ik ben benieuwd naar je argumenten ;D
Martijn! schreef op 26.09.2006 13:00
Deze string neemt immers alle karakters/tekens letterlijk. (o.a. speciale tekens zoals \n worden niet als enter gezien)

Dus \' wordt ook niet als ' gezien in bijvoorbeeld '... SET bla = \'tekst\' ... '
Ik zie het nog steeds niet sorry.

Ik heb snel even een voorbeeldje
gemaakt en dit op:

- Apache2
- PHP 4.4.4
- MySQL - 5.0.24a


<?php
error_reporting(E_ALL);

/*
CREATE TABLE `tabel` (
`kolom1` VARCHAR( 255 ) NOT NULL ,
`kolom2` VARCHAR( 255 ) NOT NULL
) ENGINE = MYISAM ;
*/

$rLinkID = mysql_connect('localhost', 'root');
mysql_select_db('test');

if( $rLinkID === false )
{
die('HooHoo: dat ging mis!');
}

$sWaarde1 = 'waa"rde1';
$sWaarde2 = "waa'rde2";

$sQry = 'INSERT INTO tabel' .
' VALUES( ' .
'\'' . mysql_real_escape_string($sWaarde1) . '\',' .
'\'' . mysql_real_escape_string($sWaarde2) . '\' )';

echo $sQry;

$rQuery = mysql_query($sQry);

if( $rQuery === false )
{
die('HooHoo: dat ging mis!');
}

$sQry = 'SELECT * FROM tabel';

$rQuery = mysql_query($sQry);

if( $rQuery === false )
{
die('HooHoo: dat ging mis!');
}

while( $mRow = mysql_fetch_assoc($rQuery) )
{
print_r($mRow);
}

mysql_close($rLinkID);
?>

Reageren