Komma in string verprutst mijn query
Ik heb de volgende query:
Code (php)
1
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
Gewijzigd op 19/10/2013 12:46:42 door Eddy E
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
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.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
<?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 . "'
"
?>
$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 . "'
"
?>
Gewijzigd op 19/10/2013 13:15:24 door Reshad F
Dat gaat toch niet werken? Regel 10... haal die eerste $ eens weg.
Voor de rest lijkt het mij wel goed nu.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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;
}
$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.
Geen foutmelding, wel een lege string
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
<?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']);
?>
$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:
mysqli_real_escape_string gaat toch nooit werken als je mysql gebruikt?
Moet natuurlijk wel voor alle mysql/mysqli handelingen staan. Dus ook voor de real_escapes.
Mysqi_real_escape_string() over elke variabele heen.