Just nu i M3-nätverket
Jump to content

SQLfråga


Cattas

Recommended Posts

Ok nu vet jag att min databas har magic quotes på.

En petitess men det är alltså inte databasen som har några magic quotes, det är PHP som har inställningen och som därför försöker fixa till datat innan du får det när någon gör POST/GET eller skickar dig en Cookie.

 

 

och då gör jag så här:

 

if( get_magic_quotes_gpc() )

stripslashes(textString);

Vilket inte fungerar eftersom stripslashes() returnerar den strippade strängen och du struntar ju i returvärdet.

 

Gör som jag skrev tidigare (och nedan) överst på sidan och glöm sen allt vad magic quotes heter och använd mysqk_escape_string()/mysql_real_escape_string() som man ska göra.

<?[color="#0000ff"]php[/color]
[color="#0000ff"]if[/color] (([color="#ff0000"]strcasecmp[/color]([color="#0000ff"]$[/color]_SERVER['REQUEST_METHOD'], "POST")==0)
&& [color="#ff0000"]get_magic_quotes_gpc[/color]()) {
  [color="#0000ff"]foreach[/color]([color="#0000ff"]$[/color]_POST [color="#0000ff"]as[/color] $[color="#ff0000"]key[/color] => $value) {
    [color="#0000ff"]$[/color]_POST[$[color="#ff0000"]key[/color]]=[color="#ff0000"]stripslashes[/color]($value);
  }
}
?>

Snyggare här: http://c8b6a2202990cd52.paste.se/

 

har jag tänkt rätt då?

Nästan iaf :-)

 

Gör jag då en kontroll av det jar har hämtat upp från databasen och dyker det upp ett ' så byter jag ut det mot '?

 

Du måste byta ut alla reserverade tecken, här är en funktion som finns bland exemplen till htmlentities() i PHP-dokumentationen, använd den:

 

[color="#0000ff"]function[/color] xmlentities($[color="#0000ff"]string[/color]) {
   [color="#0000ff"]return[/color] [color="#ff0000"]str_replace[/color] ( [color="#0000ff"]array[/color] ( '&', '"', "'", '<', '>', '&[color="#006400"]#65533;' ), [/color]
       [color="#0000ff"]array[/color] ( '&' , '"', ''' , '<' , '>', ''' ), $[color="#0000ff"]string[/color] );
}

(från http://www.php.net/htmlentities)

 

Edit: Det sista kodexemplet verkar ha en tendens att gå sönder i eforum... Finns här också: http://5943fea8884b7a09.paste.se/

[inlägget ändrat 2005-12-23 11:16:33 av fhe]

Link to comment
Share on other sites

Ska kolla på magic quotes men nu så har jag fångats i xmldokumentet.

 

 

Såjag fick det här funka i xmldokumentet:

 

htmlspecialchars($text->textstring, ENT_QUOTES);

 

Kan jag använda det? Eller är det hellre att föredra:

 

function xmlentities($string) {
  return str_replace ( array ( '&', '"', "'", '<', '>', '&#65533;' ), 
      array ( '&' , '"', '&apos;' , '<' , '>', '&apos;' ), $string );
}

 

Tack för att jag får fråga ut dej!

 

Link to comment
Share on other sites

htmlspecialchars($text->textstring, ENT_QUOTES);

 

Kan jag använda det?

"Kan" är ett realtivt begrepp, varför skulle du använda den?

Den gör ju mycket mer och det mesta är helt onödigt för dig (vill du prompt använda den bör du nog speca charset som tredje argument, XML är utf-8 om du inte angett något annat, htmlspecialchars() defaultar till iso-8859-1).

 

 

Link to comment
Share on other sites

Men om jag i min input skriver så här:

 

value=\"" . $this->_text->textstring . "\">

 

Så är det någon användare som skriver in " i sin mening. Då kommer ju " avsluta input tagen.

 

Ska man ha en funktion som i xmlfilen?

 

Link to comment
Share on other sites

escape sats alltså? Då har jag något att läsa på. Nu måste jag sticka iväg.

 

Men ville bara tacka för hjälpen och önska en riktigt god jul!

 

God jul på er alla som läser detta!

 

/C

 

Link to comment
Share on other sites

escape sats alltså?

Nej, htmlentities() gör inget escapeande. Den gör om reserverade tecken så att de fungerar i html och returnerar en html-kompatibel sträng. Precis som den xmlentities() som jag klistrade in tidigare i tråden fast den gör om en massa andra tecken också...

 

Exakt vad som görs om (och till vad) kan du se om du kör följande:

<?[color="#0000ff"]php[/color]
<?[color="#0000ff"]php[/color]
[color="#0000ff"]echo[/color] "<pre>".[color="#ff0000"]htmlentities[/color](
    [color="#0000ff"]print[/color]_r([color="#ff0000"]get_html_translation_table[/color]([color="#ff8C00"]HTML_ENTITIES[/color]), [color="#ff8C00"]TRUE[/color]))
    ."</pre>";
?>

 

Edit: Korrigering av koden ovan

[inlägget ändrat 2005-12-23 14:42:40 av fhe]

Link to comment
Share on other sites

Petitesser kanske, men...

Nej, htmlentities() gör inget escapeande.
Jo.

 

Den gör om reserverade tecken så att de fungerar i html och returnerar en html-kompatibel sträng.
Vilket är precis vad "escape sequence" betyder.

 

Hur man skyddar specialtecken varierar från format till format. I HTML och XML kan man t ex använda teckenentitetsreferenser (http://en.wikipedia.org/wiki/Character_entity_reference , dvs &quot; mfl)

 

Link to comment
Share on other sites

Vilket är precis vad "escape sequence" betyder.

Nåja, själva ordet "escape sequence" kommer av de kontroll-sekvenser för framförallt terminalemulering som börjar med ett ESC, där alltså ESC är ett specialtecken som markerar att det som följer efter inte ska tolkas som om det stod för sig själv. I dagens lite mer vida tolkning har man låtit andra tecken än just ESC bli "escape-tecken" men det är absolut inte att escapea å när man byter ut det mot dess ekvivalenta å betydelsen av å och å är helt identisk.

 

Det htmlentities() gör är en ren översättning.

 

Fast det är som du säger en petitess och spelar egentligen ingen roll alls för användaren.

 

Edit: Tar jullov från eforum nu och avslutar mina bevakningar. God Jul

[inlägget ändrat 2005-12-23 17:26:18 av fhe]

Link to comment
Share on other sites

Hur man skyddar specialtecken varierar från format till format.

Men visst, jag ser din poäng och i någon mån kan väl kalla & för escape-tecken även om jag tycker själva entitetskonceptet lyfter entiteterna en nivå från att vara escape-sekvenser.

 

Link to comment
Share on other sites

Hej igen!

 

Nu tror jag att jag har fått allt att fungera! :)

 

Tack för all hjälp, det har varit en nyttig lektion!

 

Gott nytt år!

 

/C

 

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.



×
×
  • Create New...