Just nu i M3-nätverket
Gå till innehåll

SQLfråga


Cattas

Rekommendera Poster

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]

Länk till kommentar
Dela på andra webbplatser

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!

 

Länk till kommentar
Dela på andra webbplatser

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).

 

 

Länk till kommentar
Dela på andra webbplatser

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?

 

Länk till kommentar
Dela på andra webbplatser

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

 

Länk till kommentar
Dela på andra webbplatser

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]

Länk till kommentar
Dela på andra webbplatser

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)

 

Länk till kommentar
Dela på andra webbplatser

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]

Länk till kommentar
Dela på andra webbplatser

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.

 

Länk till kommentar
Dela på andra webbplatser

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

 

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...