Jag får ett felmeddelande när jag via ett formulär försöker skicka data som innehåller '-tecknet. Detta beror ju på att det tecknet är ett så kallat escape-tecken i databasen. Om magic_quotes nu är påslaget, ska inte den ta hand om dessa tecken?! Så verkar inte fallet vara just nu på min server eftersom jag får felmeddelanden.
An example use of addslashes() is when you're entering data into a database. For example, to insert the name O'reilly into a database, you will need to escape it. Most databases do this with a \ which would mean O\'reilly. This would only be to get the data into the database, the extra \ will not be inserted. Having the PHP directive magic_quotes_sybase set to on will mean ' is instead escaped with another '.
...
The PHP directive magic_quotes_gpc is on by default, and it essentially runs addslashes() on all GET, POST, and COOKIE data. Do not use addslashes() on strings that have already been escaped with magic_quotes_gpc as you'll then do double escaping. The function get_magic_quotes_gpc() may come in handy for checking this.
Se verkligen till att du inte använder magic_quotes_gpc(), kan göras genom att köra en if-sats, såhär:
Nu fick jag det att fungera med addslashes. Av någon outgrundlig anledning har jag använt mig at stripslashes när jag tagit emot informationen tidigare. Inte konstigt att det har blivit fel. Behöver jag använda stripsslashes när jag presenterar resultatet?
Se verkligen till att du inte använder magic_quotes_gpc()
När jag skulle modda koden som presenterar artiklar fick jag följande felmeddelande:
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 åäö "test".' WHERE sessionID = 'dbd25630a29f65ec36618847c93efb0f'' at line 1
Detta felmeddelande får jag enbart då jag öppnar en testartikel som innehåller följande information:
Jag har inte möjlighet att ändra de inställningarna på servern där jag har sidan.
Melea skrev:
och byt ut stripslashes mot addslashes, vad händer då?
När jag lägger in informationen om artikeln i databasen låter jag magic_quotes_gpc() (utgår jag ifrån) göra jobbet. SQL-motorn klagar inte överhuvudtaget.
När jag gjorde samma procedur i några av forum-filerna så var det inga problem med alla dessa escape-tecken.
OK. Nu är det många varianter här :) Blir lite snurrig i huvudet!
Kan vi resonera oss fram till det mest "smakfulla" sättet att göra detta på för att minimera risken för SQL-injections och för att kunna tillåta ' " -tecken i inputen?
Kan bara säga hur jag sparar och skriver ut min information.
När jag sparar informationen kör jag alla variablar som innehåller någon information som kommer från ett formulär genom en loop:
foreach($data as $key => $value) {
$data[$key] = $this->func->eString($value);
}
Vilket i sin tur kör all data genom en funktion:
function eString($string) {
return (!get_magic_quotes_gpc() ? mysql_safe_escape_string(trim($string)) : trim($string));
}
Vilket helt enkelt kollar om magic_quotes_gpc() är påslaget, och om så inte är fallet körs mysql_safe_escape_string() och trim(), annars endast trim().
Eftersom du har magic_quotes_gpc() påslaget i php.ini får du nog experimentera lite med hur outputen blir från if-satsen i funktionen "eString".
När jag sedan ska skriva ut all information kör jag informationen genom en annan funktion som ser ut såhär.
function parser($string) {
...en massa andra funktioner här som inte är relevanta
return nl2br(htmlspecialchars(stripslashes($string), ENT_QUOTES));
}
Förlåt om jag gjort allting lite "messy" innan. Skyller på min feber. :)
270 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849