leestekens wegschrijven

Status
Niet open voor verdere reacties.

thapriest

Gebruiker
Lid geworden
28 okt 2009
Berichten
559
Goedemorgen,

Ik heb een aantal formulieren gemaakt die naar de databse kunnen schrijven, en deze weer op kunnen halen e.d.
Echter als ik met leestekens werk, bijv een hoge komma o.i.d. dan krijg ik een fout in de syntax.

Nu had ik gelezen dat je dat kon ondervangen met htmlentities($var), maar dat haalt bij mij niets uit..

ik doe bijv. iets als dit:
PHP:
   <td><textarea name="aanbiedingen" id="aanbiedingen"  cols="45" rows="5"><?php echo htmlentities($offer);?></textarea></td>

Wie weet er n oplossing?
 
Wat voor syntax fout krijg je? Het klinkt eerder alsof je query niet veilig is voor ' tekens (oftewel; je escapet ze niet goed)

Gebruik je mysql_real_escape_string() om string in je query te plaatsen?
 
deze fout krijg ik (bijv.) te zien :
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 'se leiding en ligt op het voormalige landgoed en plantage Zorgendal bij Julianad' at line 1

(noot: ik heb die komma zomaar geplaatst.)

ik gebruik geen mysql_real_escape_string() , is dit ipv htmlentities()?
 
Nee mysql_real_escape_string() zorgt dat de syntax van een query correct blijft. Je moet die samen met andere functies gebruiken.

Wat er nu gebeurd is dit:

[sql]
SELECT *
FROM table
WHERE veld = 'een tekst met een ' erin.'
[/sql]

Waarschijnlijk begrijp je zelf ook dat er nu dus 3 aanhalingstekens zijn en het dus niet meer duidelijk is wat de query precies moet zijn. De oplossing is om dit aan te geven met het speciale teken \ zodat de query weer goed loopt.

[sql]

SELECT *
FROM table
WHERE veld = 'een tekst met een \' erin.'
[/sql]

Nu weet SQL dat de ' in het midden een letterlijk teken is en geen onderdeel van de query.

Je kunt dit dus automatisch laten doen voor een string door die string aan mysql_real_escape_string te voeren:

PHP:
$query = "SELECT * FROM table WHERE veld = '" . mysql_real_escape_string( $zoek_veld ) . "' AND ander_veld = 1";

Zoiets. Je moet altijd over een tekst invoer die functie halen, anders laat je een heel groot beveiligingslek achter (naast het feit dat dus sommige queries niet werken)
 
Ok, dat is een heldere uitleg:)...
weer wat bijgeleerd vandaag..

Echter, hoe pas ik dit toe in een while? ik neem niet dat asl ik een 10 tal records ophaal, het elke keer weer moet specificeren?

bijv. in deze while:

PHP:
$query="SELECT * FROM accomodations WHERE id = '".mysql_real_escape_string($_GET['nid'])"'    ";
 $result = mysql_query($query) or die(mysql_error());
    while ($record = mysql_fetch_array($result)) {
        $land_id = $record['land_id'];
        $code = $record['code'];
        $alias = $record['alias'];
        $naam = $record['naam'];
        $plaats = $record['plaats'];
        $intro = $record['intro'];
        $vanafPrijs = $record['vanafPrijs'];
        $infoAlgemeen = $record['infoAlgemeen'];
        $infoFaciliteiten = $record['infoFaciliteiten'];
        $klasse = $record['klasse'];
		$plaats=$record['plaats'];
		$offer=$record['details'];
		$published=$record['published'];
		
			}
 
Je moet het doen bij het opbouwen van de query, dus iedere keer als je van plan bent mysql_query() aan te roepen moet je zorgen dat alle string onderdelen daarvan door mysql_real_escape_string() gehaald zijn.

Het kan ook zeker geen kwaad om daar gewoon een functie voor te schrijven, dan ben je er gelijk vanaf.
 
maar als ik dan de query aanroep, moet ik dan elk veld apart aanroepen d.m.v bijv. WHERE veld1= mysql_real_escape_string AND veld 2 =mysql_real_escape_string AND veld 3= mysql_real_escape_string etc???
 
Had ik goed gelezen was ik er gister al achter geweest:o

Bij de post door de mysql_escape string halen, is natuurlijk de oplossing..

Frats, bedankt voor een heldere uitleg!:thumb:
 
Qua veiligheid zit je nog niet goed met de manier waarop je werkt, zelfs met mysql_real_escape_string. Het is beter om prepared statements te gebruiken.
 
Hoe wil je langs een real_escape string komen dan? Dat heb ik nog eerder gehoord, dat dat kan.
 
JP Romijn
Qua veiligheid zit je nog niet goed met de manier waarop je werkt, zelfs met mysql_real_escape_string. Het is beter om prepared statements te gebruiken.

Zou je dat iets uitgebreider willen uitleggen(ik kom net kijken op dit gebied:P)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan