Komma in string verprutst mijn query

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

George van Baasbank

George van Baasbank

19/10/2013 12:43:47
Quote Anchor link
Hallo allemaal,

Ik heb de volgende query:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
 
PHP hulp

PHP hulp

17/11/2024 09:24:18
 
Eddy E

Eddy E

19/10/2013 12:45:59
Quote Anchor link
Mysqli_real_escape_string() over elke variabele heen.
Gewijzigd op 19/10/2013 12:46:42 door Eddy E
 
George van Baasbank

George van Baasbank

19/10/2013 12:58:35
Quote Anchor link
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
 
Erwin H

Erwin H

19/10/2013 13:04:50
Quote Anchor link
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.
 
Reshad F

Reshad F

19/10/2013 13:09:54
Quote Anchor link
sowieso even je variabelen buiten quotes!

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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 . "'
  "

?>
Gewijzigd op 19/10/2013 13:15:24 door Reshad F
 
Eddy E

Eddy E

19/10/2013 13:17:15
Quote Anchor link
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.
 
George van Baasbank

George van Baasbank

19/10/2013 13:17:15
Quote Anchor link
Deze code:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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;    
}


geeft de volgende uitkomst:

UPDATE sys__paginateksten SET headerregel = , artikel = , headerfont = , headersize = , headertype = , headercolor = WHERE id =
 
Eddy E

Eddy E

19/10/2013 13:18:24
Quote Anchor link
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.
 
George van Baasbank

George van Baasbank

19/10/2013 13:25:35
Quote Anchor link
Geen foutmelding, wel een lege string
 
Reshad F

Reshad F

19/10/2013 13:32:11
Quote Anchor link
Hmm je weet dat je

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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']);

?>

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:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
<?php
$query
=
" UPDATE sys__paginateksten
  SET
      headerregel = '"
. mysqli_real_escape_string($_POST['header']) . "',
    ..
    ..
    ..
    ..
  WHERE id = '"
. (int) $_SESSION['recordid'] . "'
  "

?>
 
Lord Gaga

Lord Gaga

19/10/2013 13:38:51
Quote Anchor link
mysqli_real_escape_string gaat toch nooit werken als je mysql gebruikt?
 
- SanThe -

- SanThe -

19/10/2013 14:04:47
Quote Anchor link
Dit: include "include/connectie.inc.php";

Moet natuurlijk wel voor alle mysql/mysqli handelingen staan. Dus ook voor de real_escapes.
 
Eddy E

Eddy E

19/10/2013 18:51:52
Quote Anchor link
Mysqi_real_escape_string() over elke variabele heen.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.