' teken zorgt voor onverwijderbaar topic
Code (php)
1
2
3
2
3
<?php
echo '<a href="'.$_SERVER['PHP_SELF'].'?show=del&id='.$row['id'].'" onClick="return confirm(\'Wilt u '.$row['titel'].' verwijderen?\');"><img src="../img/icon_delete.jpg" width="32" height="30" border="0" align="center" /></a>';
?>
echo '<a href="'.$_SERVER['PHP_SELF'].'?show=del&id='.$row['id'].'" onClick="return confirm(\'Wilt u '.$row['titel'].' verwijderen?\');"><img src="../img/icon_delete.jpg" width="32" height="30" border="0" align="center" /></a>';
?>
zo zou die het moeten doen..
het wordt steeds vreemder. titels verwijderen zonder ' geeft hij wel een melding.. titels met dus niet... maar heb ook een javascript error on page ")" expected...
als er geen ' in staat verwijderd hij hem direct.
ik probeer zelf ook nog even wat :)
Die JavaScript error heeft te maken met die enkele quote in je topictitel. In JavaScript moet je binnen strings altijd escapen, of het nu enkele of dubbele quotes zijn. Haal maar eens addslashes over je topictitel heen voordat je hem naar je JavaScript stuurt.
maw, wat bedoel je precies? ikke = noob he :o)
ooh dat :)
Terence:
@jan, hij heeft die slashes er als het goed is al in staan, want voordat hij het naar de db stuurt, doet hij al mysql_real_escape_string();
(is het zelfde als addslashes();)
(is het zelfde als addslashes();)
En die slashes haalt MySQL er keurig uit tijdens het opslaan. Zodra het uit de DB rolt is het weer zonder slashes.
volgens mij is het echt het stukje JS hoor. want als ik dat weghaal kan ik gewoon verwijderen
Welk stukje javascript bedoel je? dat in de link dat ik jou gegeven heb of je eigen stukje?
Het was het gebrek aan addslashes. Het werk! Bedankt allen!
zo heb ik het nu werkend :
Code (php)
1
2
3
4
5
2
3
4
5
<?
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>";
?>
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:
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(......
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
Gewijzigd op 01/01/1970 01:00:00 door Martijn B
Martijn!:
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 heb snel even een voorbeeldje
gemaakt en dit op:
- Apache2
- PHP 4.4.4
- MySQL - 5.0.24a
Code (php)
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
<?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);
?>
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);
?>
Gewijzigd op 01/01/1970 01:00:00 door Martijn B