' teken zorgt voor onverwijderbaar topic
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?
Kun je even een gevulde query laten zijn om een nieuws bericht met single-quote toe te voegen en te verwijderen. Ben benieuwd...
Henb je een link of een voorbeeld?
komt er aan!
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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
<?
if ($_GET['show'] == 'add' || $_POST['show'] == 'add')
{
if ($_POST['titel'] && $_POST['msg'] && $_POST['mydate'] && $_POST['titel'])
{
if($_FILES['myfile']['tmp_name']!=''){
$pdf = 'ja';
}
else{
$pdf = 'nee';
}
$sql = 'INSERT INTO nieuws (id, titel, msg, datum, intro, informail, pdf, files) VALUES (\'\', \'' . mysql_real_escape_string($_POST['titel']) . '\', \'' . mysql_real_escape_string($_POST['msg']) . '\', \'' . mysql_real_escape_string($_POST['mydate']) . '\', \'' . mysql_real_escape_string($_POST['intro']) . '\', \'' . mysql_real_escape_string($_POST['informail']) . '\', \'' . $pdf. '\',\''. mysql_real_escape_string($_FILES['myfile']['name']).'\')';
$res = mysql_query($sql);
if ($res) {
$melding = 'Het bericht is toegevoegd aan de site.';
/* now we try to store the posted pdf's
* let's filter maxsize in the form, instead of server side
*/
$parentId=mysql_insert_id();
foreach ( $_FILES as $file ){
if ( $file['size'] > 0 ){
/* we have a file with none zero size */
if ( is_uploaded_file($file['tmp_name']) ){
$fp=fopen($file['tmp_name'], 'r+');
$data=addslashes(fread($fp, $file['size']));
$type=mysql_real_escape_string($file['type']);
$name=mysql_real_escape_string($file['name']);
$size=mysql_real_escape_string((int)$file['size']);
$query=sprintf("INSERT INTO %s (filename, mime_type, size, data, type, pid)
VALUES ('%s', '%s', '%d', '%s', '%s', '%d')",
$db_table_files, $name, $type, $size,
$data, 'nieuws', $parentId);
mysql_query($query);
}
}
}
/* now look for current docs selected */
for ( $i=0; $i < 5; $i++ ){
$label='doc'.$i;
if ( array_key_exists($label, $_REQUEST) && $_REQUEST[$label] > 0 ){
/* fetch data */
$query=sprintf('SELECT * FROM %s WHERE file_id=%d',
$db_table_files, $_REQUEST[$label]);
$result=mysql_query($query);
$row=mysql_fetch_array($result);
$query=sprintf("INSERT INTO %s (filename, mime_type, size, data, type, pid)
VALUES('%s', '%s', '%d', '%s', '%s', '%d')",
$db_table_files, $row['filename'], $row['mime_type'], $row['size'],
addslashes($row['data']), 'nieuws', $parentId);
mysql_query($query);
print mysql_error();
}
}
}
else
{
$melding = 'Het bericht is niet toegevoegd aan de site.<br>'.$melding2;
}
echo $melding;
}
else
{
if ($_POST['submit']){
$err = 'Enkele velden vergeten.';
}
if ($_POST['mydate']){
$cdate = $_POST['mydate'];
}
else
{
$cdate = date('Y-m-d');
}
$row['msg'] = nl2br($row['msg']);
echo '<br><b>Plaats hier uw nieuwsbericht:</b><br><br>';
?>
if ($_GET['show'] == 'add' || $_POST['show'] == 'add')
{
if ($_POST['titel'] && $_POST['msg'] && $_POST['mydate'] && $_POST['titel'])
{
if($_FILES['myfile']['tmp_name']!=''){
$pdf = 'ja';
}
else{
$pdf = 'nee';
}
$sql = 'INSERT INTO nieuws (id, titel, msg, datum, intro, informail, pdf, files) VALUES (\'\', \'' . mysql_real_escape_string($_POST['titel']) . '\', \'' . mysql_real_escape_string($_POST['msg']) . '\', \'' . mysql_real_escape_string($_POST['mydate']) . '\', \'' . mysql_real_escape_string($_POST['intro']) . '\', \'' . mysql_real_escape_string($_POST['informail']) . '\', \'' . $pdf. '\',\''. mysql_real_escape_string($_FILES['myfile']['name']).'\')';
$res = mysql_query($sql);
if ($res) {
$melding = 'Het bericht is toegevoegd aan de site.';
/* now we try to store the posted pdf's
* let's filter maxsize in the form, instead of server side
*/
$parentId=mysql_insert_id();
foreach ( $_FILES as $file ){
if ( $file['size'] > 0 ){
/* we have a file with none zero size */
if ( is_uploaded_file($file['tmp_name']) ){
$fp=fopen($file['tmp_name'], 'r+');
$data=addslashes(fread($fp, $file['size']));
$type=mysql_real_escape_string($file['type']);
$name=mysql_real_escape_string($file['name']);
$size=mysql_real_escape_string((int)$file['size']);
$query=sprintf("INSERT INTO %s (filename, mime_type, size, data, type, pid)
VALUES ('%s', '%s', '%d', '%s', '%s', '%d')",
$db_table_files, $name, $type, $size,
$data, 'nieuws', $parentId);
mysql_query($query);
}
}
}
/* now look for current docs selected */
for ( $i=0; $i < 5; $i++ ){
$label='doc'.$i;
if ( array_key_exists($label, $_REQUEST) && $_REQUEST[$label] > 0 ){
/* fetch data */
$query=sprintf('SELECT * FROM %s WHERE file_id=%d',
$db_table_files, $_REQUEST[$label]);
$result=mysql_query($query);
$row=mysql_fetch_array($result);
$query=sprintf("INSERT INTO %s (filename, mime_type, size, data, type, pid)
VALUES('%s', '%s', '%d', '%s', '%s', '%d')",
$db_table_files, $row['filename'], $row['mime_type'], $row['size'],
addslashes($row['data']), 'nieuws', $parentId);
mysql_query($query);
print mysql_error();
}
}
}
else
{
$melding = 'Het bericht is niet toegevoegd aan de site.<br>'.$melding2;
}
echo $melding;
}
else
{
if ($_POST['submit']){
$err = 'Enkele velden vergeten.';
}
if ($_POST['mydate']){
$cdate = $_POST['mydate'];
}
else
{
$cdate = date('Y-m-d');
}
$row['msg'] = nl2br($row['msg']);
echo '<br><b>Plaats hier uw nieuwsbericht:</b><br><br>';
?>
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
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
<?
elseif ($_GET["show"] == "del")
{
if (is_numeric($_GET["id"]))
{
$sql = "DELETE FROM nieuws WHERE id = $_GET[id]";
$res = mysql_query($sql);
if ($res)
{
/* get rid of associated files */
$query=sprintf('DELETE FROM %s WHERE type=\'nieuws\' AND pid=%d',
$db_table_files, $_REQUEST['id']);
mysql_query($query);
echo "Bericht verwijderd.";
header("Location: ../pages/00nieuws.php");
}
else
{
echo "Bericht is niet verwijderd.";
}
}
else
{
echo "Geen geldig id.";
}
}
?>
elseif ($_GET["show"] == "del")
{
if (is_numeric($_GET["id"]))
{
$sql = "DELETE FROM nieuws WHERE id = $_GET[id]";
$res = mysql_query($sql);
if ($res)
{
/* get rid of associated files */
$query=sprintf('DELETE FROM %s WHERE type=\'nieuws\' AND pid=%d',
$db_table_files, $_REQUEST['id']);
mysql_query($query);
echo "Bericht verwijderd.";
header("Location: ../pages/00nieuws.php");
}
else
{
echo "Bericht is niet verwijderd.";
}
}
else
{
echo "Geen geldig id.";
}
}
?>
Gewijzigd op 01/01/1970 01:00:00 door Marije
Als die titel als string in je verwijderquery terechtkomt zal dat het probleem wel zijn. Enkele quotes moet je escapen voor MySQL.
$sql = "DELETE FROM nieuws WHERE id = $_GET[id]";
$_GET[id] moet sowieso $_GET['id'] zijn.
Verder heb je geen foutafhandeling in regel 8, waar je de query uitvoert.
ik zal het eens proberen :) Bedankt Jan.
Parse error: parse error, unexpected T_STRING on line 200
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(......
maw de gegevens moeten anders de database in? ik heb het gevoel dat de data prima de DB ingaat... alleen het verwijderen gaat niet?
Geprobeerd, ligt het niet aan. De code werkt prima maar het probleem is niet verholpen. Voor mijn gevoel gaat het echt mis bij het verwijderen uit de db
SanThe:
Tussen enkele quotes heeft escapen geen effect.
Niet altijd! Dit gaat bijvoorbeeld fout:
Een enkele quote moet je wel degelijk escapen binnen enkele quotes.
Marije:
@sanThe:
Geprobeerd, ligt het niet aan. De code werkt prima maar het probleem is niet verholpen. Voor mijn gevoel gaat het echt mis bij het verwijderen uit de db
Geprobeerd, ligt het niet aan. De code werkt prima maar het probleem is niet verholpen. Voor mijn gevoel gaat het echt mis bij het verwijderen uit de db
Ja, dus echo je query naar het scherm en doe aan foutafhandeling:
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<?php
if (!mysql_query ($sql)) {
trigger_error (mysql_error ());
echo '<pre>';
echo htmlentities ($sql);
echo '</pre>';
}
?>
if (!mysql_query ($sql)) {
trigger_error (mysql_error ());
echo '<pre>';
echo htmlentities ($sql);
echo '</pre>';
}
?>
Gewijzigd op 01/01/1970 01:00:00 door Jan Koehoorn
ok ik had het iets beter uit moeten leggen... hoe komt niet eens bij de query. Als ik op de knop verwijderen druk (en er zit een ' oid in de titel) dan gebeurd er helemaal niets. Geen melding (zit een JS askconfirm tussen) niets.... wellicht dat het stukje js er mee te maken heeft?
misschien gaat het fout in de HTML, geef eens een stukje van de geparste html.. (of eventueel een link naar de site)
ik vermoed dat het daar of hier:
<script language="JavaScript">
function askConfirm(txt,url) {
if (confirm(txt) == true) {
document.location=url
return true
}
}
</script>
verkeerd gaat....
Code (php)
1
2
3
2
3
<?php
echo '<a href="'.$_SERVER['PHP_SELF'].'?show=del&id='.$row['id'].'" onClick="window.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="window.confirm(\'Wilt u '.$row['titel'].' verwijderen?\');"><img src="../img/icon_delete.jpg" width="32" height="30" border="0" align="center" /></a>';
?>
edit: typo
edit: ik denk dat er nu geen stripslashes over dat $row['titel'] heen moet bij het confirm, omdat dat ook in een javascript stukje staat ;)
Gewijzigd op 01/01/1970 01:00:00 door Terence Hersbach
dan krijg ik allemaal parse errors :)
oh edit :) ik tjek ff
het bericht wordt iig verwijderd! haha alleen geen melding meer maar dat is misschien wel logisch aangezien je href="" direct de file verwijderd en daarna vraagt of je hem wilt verwijderen? (al krijg ik ook die melding niet ;))