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?
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!
<?

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>';

?>



<?

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.";
}
}

?>
Als die titel als string in je verwijderquery terechtkomt zal dat het probleem wel zijn. Enkele quotes moet je escapen voor MySQL.
Op regel 7 heb je:

$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.
als ik die ' ' ervoor zet krijg ik deze error :

Parse error: parse error, unexpected T_STRING on line 200
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(......
maw de gegevens moeten anders de database in? ik heb het gevoel dat de data prima de DB ingaat... alleen het verwijderen gaat niet?

Reageren