Homepage » Tutorials » PHP & MySQL » magic_quotes, addslashes(), en stripslashes()
magic_quotes, addslashes(), en stripslashes()
| Info | ||||
| Door: | Franky Braem | Moeilijkheidsgraad: | ![]() |
|
| Geplaatst op: | 30-04-2004 | Reacties: | 3(Bekijken) | |
| Views: | 11271 (gem. 4.8498 per week) | Log in om zelf te reageren | ||
| Waardering: | ||||
Eén van de problemen bij PHP is dat wanneer je karakters wegschrijft naar een database, dat je moet opletten voor quotes. Dit artikel legt uit hoe je dit probleem kan oplossen.
Wanneer magic_quotes_gpc de waarde 'on' heeft, zal PHP automatisch slashes toevoegen in de $_GET, $_POST en $_COOKIE variabelen. Dit zorgt er voor dat je de functie addslashes() niet moet uitvoeren telkens je een waarde uit deze variabelen nodig hebt in MySQL commando's, ... (Bv. met magic_quotes_gpc = 'on' of addslashes(), wordt I'm veranderd in I'm). Op het eerste zicht zou je zeggen dat is handig. Spijtig genoeg is het tegendeel waar.
Omdat magic_quotes_gpc de waarde 'on' of 'off' kan hebben, weet je nooit op voorhand of je nu addslashes moet uitvoeren of niet. Wanneer magic_quotes_gpc = 'on' dan moet je addslashes niet gebruiken. Doe je dat toch, dan voeg je te veel slashes toe. (I'm wordt dan I\'m). Is magic_quotes_gpc = 'off', dan moet je addslashes wel gebruiken.
Met de functie get_magic_quotes_gpc() kan je te weten komen of magic_quotes_gpc geactiveerd is). Je zou dus de volgende code kunnen gebruiken:
| # | Code |
1 | if (!get_magic_quotes_gpc()) |
Het is dus beter om magic_quotes_gpc op 'off' te zetten. Je moet dan wel bij elke variabele uit $_GET, $_POST of $_COOKIE addslashes() gebruiken vooraleer je deze gegevens met MySQL in een tabel wil plaatsen. Op deze manier zal je nooit te veel slashes in de tabel plaatsen. Je kan magic_quotes_gpc wijzigen in php.ini:
| # | Code |
1 | magic_quotes_gpc = Off |
Het probleem is dat je niet altijd php.ini kan wijzigen. Als je jouw website niet zelf host, dan kan je dit meestal niet.
Je kan kan ook magic_quotes_gpc op 'off' plaatsen in een .htaccess file:
| # | Code |
1 | <IfModule mod_php4.c> |
Wanneer dit ook niet mogelijk is, dan kan je volgende code gebruiken. Deze code moet steeds éénmalig uitgevoerd worden. Doe dit door de code in een apart PHP bestand te plaatsen. Plaats dan in de bestanden die de bezoeker kan uitvoeren (dit is dus niet nodig in PHP bestanden die enkel
een class definiëren) overal een 'include' of 'require' van dit bestand.
| # | Code |
1 | function strip_magic_quotes($arr) |
Wanneer je addslashes gebruikt met magic_quotes_gpc 'on', en je voegt een rij toe in MySQL dan zal je I\'m in de database plaatsen. Als je nu deze gegevens terug uit MySQL haalt, dan krijg je I'm. Dit is niet de originele tekst. Je zou denken, dan gebruik ik toch stripslashes na het ophalen van de gegevens. Maar dit is een oplossing voor een probleem dat eigenlijk niet zou mogen bestaan. Als je stripslashes moet gebruiken op gegevens uit een databank, dan is dit omdat je teveel slashes hebt toegevoegd bij het bewaren van de gegevens. Gebruik dus stripslashes niet. Los het probleem op zoals hier boven beschreven is.
| 3 reacties | |||||
| ElBaknifico | |||||
![]() Moderator |
een alternatieve code die ik gebruik gaat als volgt:
komt in principe op hetzelfde neer, alleen werkwijze verschilt enigzins. de code kan je het best zetten in een bestand magic_quotes.php, wat je dan include in de bestanden waarin gebruikers gegevens kunnen toevoegen | ||||
| Franky Braem | |||||
![]() Regular |
Je kan addslashes gebruiken om slashen toe te voegen. Doe dit alleen wanneer magic_quotes_gpc of off staat. | ||||
| vamP | |||||
![]() Regular |
is het ook mogelijk om het omgekeerde te doen? Ik ben namelijk een php noob maar ik weet wel ongeveer waarover je praat. Kheb 3 websites runnen op magic_quotes_gpc off en kheb een kleiner website klaarstaan maar dat vereist magic_quotes_gpc on... dus de mogelijkheid om het in de php.ini te veranderen is al uitgesloten. Nu je script om de slashes te strippen hoe moet ik dat omvormen om het tegenovergestelde effect te krijgen... dus dat er slashes worden bijgevoegd op de juiste plaatsen. | ||||
Om te reageren moet je ingelogd zijn.
Nog niet geregistreerd? Doe dat dan nu!
Check je domein...
Websitemaken wordt gehost door Nucleus.be



