Hallo allemaal,

Ik heb de volgende query:


UPDATE sys__paginateksten SET headerregel = '$cHeader', artikel = '$cTekst', headerfont = '$cFont', headersize = '$cCorps', headertype = '$cType' , headercolor = '$cKleur' WHERE id = '$nRecord'


Als in een van de woorden in de variabele $cHeaderregel een quote bevat, aat mijn hele query aan de haal. Met andere woorden, ik krijg een foutmelding vanuit phpMyAdmin.

Hoe krijg ik deze query zodanig ingericht dat bijzondere leestekens geen obstakel meer vormen?


George
Mysqli_real_escape_string() over elke variabele heen.
Helaas, dit geeft alleen maar lege variabelen.

De foutmelding vanuit phpMyAdmin bij oorspronkelijke query:

Fout
SQL-query:

UPDATE sys__paginateksten SET headerregel = 'xxxxxxxxStem op onze CD's voor de Zilveren Duif Awards ', artikel = 'Van9 t / m16 november2013 staat christelijke muziek van eigen bodem IN de schijnwerpers.De week begint met de uitreiking van de Zilveren Duif Awards tijdens een galadiner op vrijdag8 november IN Hart van Holland IN Nijkerk.Twee producties van ons zijn genomineerd : Redeemer of my heart van CRK Adonai en Er IS een God die hoort van Het Holland - Koor.Breng uw stem uit via www.zilverenduif.nl ', headerfont = 'Trebuchet MS;


MySQL meldt: Documentatie

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 's voor de Zilveren Duif Awards', artikel = '
Van 9 t/m 16 november 2013 staat c' at line 1
Het is dus niet de komma in de string die het probleem oplevert, maar een quote (of in Nederlands: een aanhalingsteken).

En verder:
George van Baasbank op 19/10/2013 12:58:35

Helaas, dit geeft alleen maar lege variabelen.

Dan doe je het dus verkeerd, het is namelijk wel de oplossing. En aangezien glazen bollen niet bestaan kunnen we je zonder code niet verder helpen.
sowieso even je variabelen buiten quotes!

<?php
$query =
" UPDATE sys__paginateksten
SET
headerregel = '" . mysql_real_escape_string($cHeader) . "',
artikel = '" . mysql_real_escape_string($cTekst) ."',
headerfont = '" . mysql_real_escape_string($cFont) . "',
headersize = '" . mysql_real_escape_string($cCorps) . "',
headertype = '" . mysql_real_escape_string($cType) . "' ,
headercolor = '" . $mysql_real_escape_string($cKleur) . "'
WHERE id = '" . (int) $nRecord . "'
"
?>
Wat staat er in $mysql_real_escape_string()?
Dat gaat toch niet werken? Regel 10... haal die eerste $ eens weg.

Voor de rest lijkt het mij wel goed nu.
Deze code:

if($_SERVER['REQUEST_METHOD'] === 'POST') {
    $cHeader = Mysqli_real_escape_string($_POST['header']);
    $cTekst = Mysqli_real_escape_string($_POST['editor1']);
    $cFont = Mysqli_real_escape_string($_POST['font']);
    $cCorps = Mysqli_real_escape_string($_POST['corps']);
    $cType = Mysqli_real_escape_string($_POST['fonttype']);
    $cKleur = Mysqli_real_escape_string($_POST['kleur']);
    $nRecord = Mysqli_real_escape_string($_SESSION['recordid']);    
    include "include/connectie.inc.php";
    $sql = "UPDATE sys__paginateksten SET headerregel = $cHeader, artikel = $cTekst, headerfont = $cFont, headersize = $cCorps, headertype = $cType , headercolor = $cKleur WHERE id = $nRecord ";
    $cResultWijziging = mysql_query($sql);
    echo $sql;
    $sql = "SELECT * FROM sys__paginateksten WHERE website = 'webshop' ORDER BY headerregel ASC";
    $cResultPagina = mysql_query($sql);

    mysql_close($verbinding);
    $nRecord = 0;    
}


geeft de volgende uitkomst:

UPDATE sys__paginateksten SET headerregel = , artikel = , headerfont = , headersize = , headertype = , headercolor = WHERE id =
mysqli_real_escape_string() verwacht 2 parameters. Jij geeft er een. Dat moet een foutmelding genereren. Doet dat het niet? Zet je error_reporting() op E_ALL.
Hmm je weet dat je

<?php

$cHeader = Mysqli_real_escape_string($_POST['header']);
$cTekst = Mysqli_real_escape_string($_POST['editor1']);
$cFont = Mysqli_real_escape_string($_POST['font']);
$cCorps = Mysqli_real_escape_string($_POST['corps']);
$cType = Mysqli_real_escape_string($_POST['fonttype']);
$cKleur = Mysqli_real_escape_string($_POST['kleur']);
$nRecord = Mysqli_real_escape_string($_SESSION['recordid']);

?>
Allemaal overbodig is?

Verder zou ik een Integer niet met mysqli_real_escape_string maar typecasten (int) om er zeker van te zijn dat het ook een integer is.

Zie mijn vorige post ( verander deze wel naar mysqli ) en verander de variabelen in

mysqli_real_escape_string($_POST['header'])

zoiets als dit:

<?php
$query =
" UPDATE sys__paginateksten
SET
headerregel = '" . mysqli_real_escape_string($_POST['header']) . "',
..
..
..
..
WHERE id = '" . (int) $_SESSION['recordid'] . "'
"
?>
mysqli_real_escape_string gaat toch nooit werken als je mysql gebruikt?

Reageren