JSON_DECODE werkt anders lokaal t.o.v. online ? Wat kan er mis zijn ?
na heel veel tips op het PHP beginners forum, was ik zo fier dat mijn PHP tool er toch al een beetje meer professioneel begon uit te zien. Daarom besloot ik de hele code eens online te gooien op mijn testsite.
Het plezier was echter van korte duur... Ik merkte al snel op mijn berekening pagina dat een stuk code gewoon niet werkt.
Ik stelde me natuurlijk de vraag : "Wat is er aan de hand". Daarom probeerde ik wat met var_dumps en prints en alerts tot een reden te komen. En ik denk de reden gevonden te hebben, maar begrijp niet wat er mis kan zijn.
In een eerste pagina voeg ik wat producten toe aan een array die dan via JSON_DECODE in javascript wordt omgebouwd tot een JSON string. Als ik dan submit doe, dan wordt in de volgende pagina een berekening gestart die deze JSON string gaat evalueren;
Ik merk echter de de string in de berekening pagina er helemaal anders uit ziet op mijn lokale test server (WAMP) en de online test server.
Dit is de inhoud van het veld die door PHP wordt getoond via een $_POST :
LOKAAL
ONLINE
In de PHP code doe ik dan een JSON_DECODE en dit geeft bij de ONLINE versie problemen.
Heeft iemand ENIG idee wat ik mis doe ? Of iemand die weet of er een server instelling is die hiervoor verantwoordelijk is ?
Ik zou eeuwig dankbaar zijn, want ik zie geen oplossing.
Vriendelijke groeten en alvast bedankt,
Davy
Gewijzigd op 28/10/2013 09:58:22 door Davy Carmans
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<?php
$a = '[{\"lengte\":\"100\",\"hoogte\":\"10\",\"aantal\":\"1\"}]';
$b = stripslashes($a);
$c = json_decode($b);
var_dump($c);
?>
$a = '[{\"lengte\":\"100\",\"hoogte\":\"10\",\"aantal\":\"1\"}]';
$b = stripslashes($a);
$c = json_decode($b);
var_dump($c);
?>
stripslashes doet zo ongeveer het omgekeerde als de escape() functies.
Edit:
Ben niet wakker denk ik
Gewijzigd op 28/10/2013 10:20:24 door Michael -
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?php
if (function_exists('get_magic_quotes_gpc') && get_magic_quotes_gpc()) {
echo 'magic quotes staat aan';
} else {
echo 'magic quotes staat uit';
}
?>
if (function_exists('get_magic_quotes_gpc') && get_magic_quotes_gpc()) {
echo 'magic quotes staat aan';
} else {
echo 'magic quotes staat uit';
}
?>
Als magic quotes aanstaat heb je een probleem..... wat op zich niet is op te lossen, alleen weg te werken via de functie van Kris. Dat is namelijk een php instelling die alleen je hoster kan uitzetten (tenzij je je eigen vps beheert, dan kan je het zelf doen). Dit hele magic quotes is trouwens zo'n slecht idee dat de makers van php het er zelf alweer uit hebben gesloopt sinds php 5.4
Zal dus al maar beginnen te coderen; Bedankt Kris voor de code ...
Dat is dus inderdaad het verschil, en het probleem. Bedenk dan overigens dat ALLE input op je server automatisch die slashes erbij krijgt. GET, POST, COOKIE, SESSION, ingelezen bestanden, alles. Elke input zal je dus weer moeten ontdoen van de slashes (daar waar van toepassing).
Davy Carmans op 28/10/2013 10:49:12:
Volgens de code van Erwin staat deze optie op mijn lokale server idd uit en op de server van de hosting staat die aan !
Zal dus al maar beginnen te coderen; Bedankt Kris voor de code ...
Zal dus al maar beginnen te coderen; Bedankt Kris voor de code ...
Ik zal dit in htaccess uitschakelen ipv in de code te gaan aanpassen. Zoals al was gezegd is dit met PHP 5.4 sowieso er weer uit en dat zegt genoeg.
Kan je dat via htaccess uitzetten? Dat is ook weer nieuw voor mij, wel een stuk handiger inderdaad als dat het geval is.
Erwin H op 28/10/2013 11:12:30:
Kan je dat via htaccess uitzetten? Dat is ook weer nieuw voor mij, wel een stuk handiger inderdaad als dat het geval is.
Zelf niet geprobeerd, op mijn server staat het standaard al uit, maar op PHP.net staat een uitleg.
Michael, ik heb het zo gedaan en zal eens gaan testen seh ! :-) En zo leren we allemaal weer erg veel bij.
Ah, bij mijn weten kon het alleen via de php.ini file (welke op een shared host niet bereikbaar is), maar op php.net staat inderdaad ook een mogelijkheid via htaccess. Interessant, had ik dat maar eerder geweten :-)