[PHP & MySQL] Leestekens

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • ViNyL
  • Registratie: Augustus 2001
  • Niet online
Ik ben bezig een CMS te maken in PHP. Nu gebruik ik een rich text editor om te content toe te voegen in de database.

het veld in de database waar de content in komt heet "inhoud" en is van het type "text".

Nu wil ik net een pagina toevoegen met dit " Het aantal pagina's " krijg ik opeens deze melding:

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')' at line 1

Betekent dit dat hij wat ik wil invoeren in de database stiekem als query ziet ?

Acties:
  • 0 Henk 'm!

  • Thijsmans
  • Registratie: Juli 2001
  • Laatst online: 21-09 21:35

Thijsmans

⭐⭐⭐⭐⭐ (5/5)

Nee, waarschijnlijk struikelt hij dus over die '. Probeer daarom eens addslashes($var);

[ Voor 5% gewijzigd door Thijsmans op 08-01-2004 14:47 . Reden: slahes bestaan niet 8)7 ]

Privacy-adepten vinden op AVGtekst.nl de Nederlandse AVG-tekst voorzien van uitspraken en besluiten.


Acties:
  • 0 Henk 'm!

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
Je moet de tekens in je string escapen met de functie mysql_escape_string()

http://php.net/mysql_escape_string

Dan moet het werken.

Dus:

PHP:
1
2
3
$query = "SELECT * FROM table WHERE field='" . mysql_escape_string("dit ' gaat ' goed") . "'";

mysql_query($query);

[ Voor 36% gewijzigd door Michali op 08-01-2004 14:49 ]

Noushka's Magnificent Dream | Unity


Acties:
  • 0 Henk 'm!

  • ViNyL
  • Registratie: Augustus 2001
  • Niet online
Ik wilde net dit posten of dat zou werken:
PHP:
1
$inhoud = str_replace(array("&gt;", "&lt;", "&quot;", "&", "javascript" etc etc), array(">", "<", "\"", "&", "java script" etc etc), $inhoudchecked);

Acties:
  • 0 Henk 'm!

  • Thijsmans
  • Registratie: Juli 2001
  • Laatst online: 21-09 21:35

Thijsmans

⭐⭐⭐⭐⭐ (5/5)

Als je dat wilt doen, gebruik dan gewoon htmlspecialchars() :)

Privacy-adepten vinden op AVGtekst.nl de Nederlandse AVG-tekst voorzien van uitspraken en besluiten.


Acties:
  • 0 Henk 'm!

  • ViNyL
  • Registratie: Augustus 2001
  • Niet online
ipv mysql_escape_string?

want als ik nu een titel maak met bv: :":":":|\\::::

dan krijg ik alsnog de zelfde melding bij het tonen van de pagina

Acties:
  • 0 Henk 'm!

  • mjax
  • Registratie: September 2000
  • Laatst online: 05:56
Voordat je dit CMS "live" gaat inzetten: verdiep je ook eens in XSS en andere vulnerabilities van dit soort sites, want als ik het zo hoor, is je CMS zo lek als een mandje...

Acties:
  • 0 Henk 'm!

  • Thijsmans
  • Registratie: Juli 2001
  • Laatst online: 21-09 21:35

Thijsmans

⭐⭐⭐⭐⭐ (5/5)

ViNyL schreef op 08 januari 2004 @ 15:03:
ipv mysql_escape_string?

want als ik nu een titel maak met bv: :":":":|\\::::

dan krijg ik alsnog de zelfde melding bij het tonen van de pagina
Als je een foutmelding krijgt in de volgende query:

PHP:
1
mysql_query("INSERT INTO tabel SET tekst='" . addslashes($var) . "'");


Dan ligt het niet aan de waarde die je erin propt, maar aan de rest van de query.

Privacy-adepten vinden op AVGtekst.nl de Nederlandse AVG-tekst voorzien van uitspraken en besluiten.


Acties:
  • 0 Henk 'm!

  • ViNyL
  • Registratie: Augustus 2001
  • Niet online
hmm "lek als een mandje" valt wel mee. Ik ga het niet inzetten voorlopig omdat het meer een leer project is. Voor dit soort dingen dus. Verder moet je altijd nog ingelogd zijn, en mensen die deze site onderhouden gaan hem niet testen op "vulnerabilities" om de boel stuk te maken.

Wat wel gebeurt met fora en bv gastenboeken

Acties:
  • 0 Henk 'm!

  • xtra
  • Registratie: November 2001
  • Laatst online: 21-09 13:44
ViNyL schreef op 08 januari 2004 @ 15:10:
hmm "lek als een mandje" valt wel mee. Ik ga het niet inzetten voorlopig omdat het meer een leer project is. Voor dit soort dingen dus. Verder moet je altijd nog ingelogd zijn, en mensen die deze site onderhouden gaan hem niet testen op "vulnerabilities" om de boel stuk te maken.

Wat wel gebeurt met fora en bv gastenboeken
Dat ingelogd zijn is ook betrekkelijk als het systeem zo lek als een mandje is. Dat betekent dat je doelgroep om de boel te verstieren een stuk groter wordt :)
Voor een leerproject maakt het niet zoveel uit natuurlijk. Maar neem dit soort dingen zeker mee bij het leren.

Acties:
  • 0 Henk 'm!

  • ViNyL
  • Registratie: Augustus 2001
  • Niet online
Hmm moet ik dat "addslashes($var)" nu ook gebruiken bij het aanroepen van de pagina's vanuit de database ? bv voor het tonen of aanpassen ?

ik met addslashes($var) bv nog geen \ gebruiken in pagina's

Acties:
  • 0 Henk 'm!

  • Thijsmans
  • Registratie: Juli 2001
  • Laatst online: 21-09 21:35

Thijsmans

⭐⭐⭐⭐⭐ (5/5)

als je iets _in_ de database propt addslashes(), als je er iets uithaalt, stripslashes() :)

hoop dat het de lading dekt, ik begreep de zin "ik met addslashes..." niet 8)7

[ Voor 4% gewijzigd door Thijsmans op 08-01-2004 15:43 ]

Privacy-adepten vinden op AVGtekst.nl de Nederlandse AVG-tekst voorzien van uitspraken en besluiten.


Acties:
  • 0 Henk 'm!

  • ViNyL
  • Registratie: Augustus 2001
  • Niet online
ja sorry mist een woordje :D

Hmm ik doe nu dit:

PHP:
1
2
3
4
5
6
$result = mysql_query("SELECT pagtitel, inhoud FROM pages WHERE menu = '$menu'");

while($r=mysql_fetch_array($result))
{    
$pagtitel=stripslashes(($r["pagtitel"]));
$inhoud=($r["inhoud"]);


maar zo gauw als ik die aanroep krijg ik:

Undefined variable: pagtitel

bv een paginatitel die "///\\\ slash test" heet


---------
Denk dat ik toch maar gewoon de characters vervang met dit:
PHP:
1
2
3
<?
$inhoud = str_replace(array("&gt;", "&lt;", "&quot;", "&", "javascript" etc etc), array(">", "<", "\"", "&", "java script" etc etc), $inhoudchecked);
?> 


want met addslashes kan je geen "\" gebruiken en zo zijn er voor allemaal wel tekens die niet werken....

[ Voor 135% gewijzigd door ViNyL op 08-01-2004 16:03 ]


Acties:
  • 0 Henk 'm!

Verwijderd

ViNyL schreef op 08 januari 2004 @ 15:44:
ja sorry mist een woordje :D

Hmm ik doe nu dit:

PHP:
1
2
3
4
5
6
$result = mysql_query("SELECT pagtitel, inhoud FROM pages WHERE menu = '$menu'");

while($r=mysql_fetch_array($result))
{    
$pagtitel=stripslashes(($r["pagtitel"]));
$inhoud=($r["inhoud"]);


maar zo gauw als ik die aanroep krijg ik:

Undefined variable: pagtitel

bv een paginatitel die "///\\\ slash test" heet


---------
Denk dat ik toch maar gewoon de characters vervang met dit:
....

want met addslashes kan je geen "\" gebruiken en zo zijn er voor allemaal wel tekens die niet werken....
Undefined variable: pagtitel heeft volgens mij niets te maken met wat er in de database voor tekst staat of het gebruik van addslashes, maar met de code die je hebt geschreven.

addslashes gebruik ik altijd en geeft 1 probleem in samenwerking met stripslashes. als ik \\ in mijn tekst zet dan krijg ik \ terug in mijn HTML maar dit is ook wel op te vangen door stripslashes niet te gebruiken bij het uitlezen.
Voor de rest, altijd addslashes en htmlspecialchars

probeer eens:
PHP:
1
2
3
4
5
6
$result = mysql_query("SELECT pagtitel, inhoud FROM pages WHERE menu = '$menu'");

while($r=mysql_fetch_array($result)) {    
  $pagtitel=stripslashes($r['pagtitel']);
  $inhoud=($r['inhoud']);
}


en anders ff je variabelen checken en kijken wat deze query in mysql zelf doet (met phpmyadmin bijv.)

[ Voor 35% gewijzigd door Verwijderd op 08-01-2004 17:16 ]


Acties:
  • 0 Henk 'm!

  • ViNyL
  • Registratie: Augustus 2001
  • Niet online
Ik zal het even uitproberen, maar ik ben er bijna zeker van dat het door tekens als "\" en "#" vooroorzaakt wordt. Gebruik ik deze namelijk om het te testen in een titel dan krijg ik de genoemde foutmelding.

Oh ja en hoe gebruik ik EN htmlspecialchars() EN stripslashes bij een insert query dan ?

[ Voor 23% gewijzigd door ViNyL op 08-01-2004 17:33 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Ik heb het voor de zekerheid op mijn eigen dbase los gelaten (die tekens dus) en geen probleem te bekennen. Slaat het gewoon netjes op en tovert het weer netjes op het scherm zonder enige foutmelding.

Misschien heb je meer code voor ons (en evt tabel structuur) want ik heb het gevoel dat het bij jou ergens anders fout gaat.

[ Voor 25% gewijzigd door Verwijderd op 08-01-2004 17:33 ]


Acties:
  • 0 Henk 'm!

Verwijderd

ViNyL schreef op 08 januari 2004 @ 17:29:
Oh ja en hoe gebruik ik EN htmlspecialchars() EN stripslashes bij een insert query dan ?
bijv. addslashes(htmlspecialchars($var))
maar addslashes moet al voldoende zijn. Is niet beide nodig ;-)

Acties:
  • 0 Henk 'm!

  • ViNyL
  • Registratie: Augustus 2001
  • Niet online
Ik wordt niet goed :|

Als ik deze query draai:
PHP:
1
2
$query = "INSERT INTO pages (pagdatum, menu, pagtitel, inhoud) VALUES (NOW(),'". addslashes($menutitel) . "', '". addslashes($pagtitel) . "', '". addslashes($inhoud) . "')";
$result = mysql_query($query) or die(mysql_error());


Met als veld inhoud:
menutitel: #test
pagtitel: #test
inhoud: #test

Dan werkt de menu navigatie niet (blijkbaar vangt hij door het # niet af naar welke pagina je wilt.
Terwijl ik dus keurig addslashes doe

Acties:
  • 0 Henk 'm!

Verwijderd

ViNyL schreef op 08 januari 2004 @ 17:40:
Ik wordt niet goed :|

Als ik deze query draai:
[php]

Dan werkt de menu navigatie niet (blijkbaar vangt hij door het # niet af naar welke pagina je wilt.
Terwijl ik dus keurig addslashes doe
dus....... de query werkt wel en je krijgt de juiste data uit je dbase?
Menu navigatie? Welk menu, welke navigatie??? :?

[ Voor 9% gewijzigd door Verwijderd op 08-01-2004 17:45 ]


Acties:
  • 0 Henk 'm!

  • ViNyL
  • Registratie: Augustus 2001
  • Niet online
haha ik denk dat dat te ver gaat voor het topic :) Ik gebruik menutitel om een menu mee op te bouwen. Vervolgens kijk ik naar de url (bv index.php?menu=#test)
met:
PHP:
1
$menu = isset($_GET['menu']) ? $_GET['menu'] : '';



normaal zou het dan verwerkt worden en de data opgeroepen worden met where menu ="$menu" (de url die ik afvang).

PHP:
1
2
3
4
5
6
7
8
9
//MENU PAGINA OPHALEN
if (!empty($menu)) { 

$result = mysql_query("SELECT pagtitel, inhoud FROM pages WHERE menu = '$menu'"); 

while($r=mysql_fetch_array($result)) {     
  $pagtitel=stripslashes($r['pagtitel']); 
  $inhoud=stripslashes($r['inhoud']); 
}


Dat werkt dus niet. De data komt idd wel goed uit de database.

[ Voor 45% gewijzigd door ViNyL op 08-01-2004 18:02 ]


Acties:
  • 0 Henk 'm!

  • ViNyL
  • Registratie: Augustus 2001
  • Niet online
Hmm ik heb nog ff wat rond zitten neuzen en het schijnt dus dat je geen # ergens voor kunt zetten in een query. Ook al zit dit dus in je text, die ik bv als menu item gebruik...

Acties:
  • 0 Henk 'm!

  • BrZ
  • Registratie: Maart 2000
  • Laatst online: 10:56

BrZ

ViNyL schreef op 08 januari 2004 @ 20:07:
Hmm ik heb nog ff wat rond zitten neuzen en het schijnt dus dat je geen # ergens voor kunt zetten in een query. Ook al zit dit dus in je text, die ik bv als menu item gebruik...
Kijk eens of $menu wel een waarde heeft ;)

#iets in een URL is nl. alleen client side, het wordt niet meegestuurd naar je server :)

Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

Prammenhanger:
als je iets _in_ de database propt addslashes(), als je er iets uithaalt, stripslashes() :)
Dubbelcheck dat zelf nog eens een keertje, als je tijd hebt, voordat je het rond gaat strooien ajb ;)

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Acties:
  • 0 Henk 'm!

  • ViNyL
  • Registratie: Augustus 2001
  • Niet online
@BrZ: Het heeft zeker een waarde alleen in de URL zie ik het # niet meer. Daar wordt dus duidelijk iets mee gedaan waardoor hij verdwijnt. Vervolgens krijg ik dus de foutmelding omdat bv "?menu=test" niet bekend is maar wel "?menu=#test"

Acties:
  • 0 Henk 'm!

  • BrZ
  • Registratie: Maart 2000
  • Laatst online: 10:56

BrZ

ehm, nee :P
Zie ook dit topic:
[rml][ php] waarde achter de # uitlezen[/rml]

Hier een leuke testje:
http://brz.nu/hekjetest.php?bla=abcd#efgh
http://brz.nu/hekjetest.php?bla=#abcd

(in die php file staat echt alleen echo $_GET['bla'] )

Je moet gewoon niet met een # werken in de URL voor zoiets :)

[ Voor 3% gewijzigd door BrZ op 09-01-2004 20:46 ]

Pagina: 1