Nederbasse wrote:
> "Johan Holst Nielsen" <spam@phpgeek.dk> skrev i en meddelelse
> news:49a6552b$0$90272$14726298@news.sunsite.dk...
>> Nederbasse wrote:
>>> Hej
>>>
>>>
>>> På trods af advarsler er der stadig nogle der vil skrive f.eks. GPS'er i
>>> en tekst der skal ind i en Mysql db hvilket giver en error.
>>>
>>> Hvordan sikre man at der kan indsættes ' og / i en Mysql database
>>> Databasens tegnsæt er UTF-8 Unicode (utf8)
>> mysql_real_escape_string();
>>
>> Det bedste er noget at lave en funktion ala
>>
>> function dbstr($str) {
>> if(get_magic_quotes_gpc()) {
>> $str = stripslashes($str);
>> }
>> return mysql_real_escape_string($str);
>> }
>>
>> Så når du indsætter laver du blot noget ala
>>
>> $str = "GPS'er";
>>
>> $sql = "INSERT INTO tabel (value) VALUES ('".dbstr($str)."')";
>> mysql_query($sql);
>>
>> ... og problemet er løst :)
>>
>>
> Det er desværre ikke så let
> Der er ca. 40 forskellige uddannelses institutioner der skal indsætte tekst
> så derfor ved ikke ikke på forhånd hvor funktionen skal bruges. GPS'er er
> bare et eksembel på hvad der kan komme i teksten.
Jamen det er jo ikke sådan du skal fikse det.
Dataene bliver f.eks. posted og du smider den ind i databaen via noget ala:
$sql = "INSERT INTO foo (val1, val2) VALUES
('".$_POST['val1']."','".$_POST['val2']."')";
I stedet skal det blot være:
$sql = "INSERT INTO foo (val1, val2) VALUES
('".dbstr($_POST['val1'])."','".dbstr($_POST['val2'])."')";
> Har jeg forstået det ret at problemet vil blive løst hvis magic_quotes
> bliver slået til?
Du skal IKKE slå den til. Det vil være det samme som hvis du ikke kunne
finde ud af at bruge ovnen, så du i stedet saver dit spisebord i små
stykker og tænder et bål i køkkenet, i stedet for at læse brugsanvisningen.
Som sagt - ovenstående metode er den mest "korrekte". magic_quotes_gpc
er noget fanden har skabt i php, og ført til et væld af sikkerhedsfejl
(som den du beskriver) i php applikationer. Derfor bliver den heldigvis
også skrottet nu.
--
Johan Holst Nielsen
Freelance PHP Developer -
http://phpgeek.dk