KRIZx Skrevet 3. februar 2013 Del Skrevet 3. februar 2013 Hei! På min server så fungerer ikke json_encode i det hele tatt, heller ikke javascript.. Dette er ett script som kjører json_encode, den henter ikke ut noe informasjon i det hele tatt: <?php set_time_limit(1); session_start(); header('Content-type: application/json'); $menuads = array( 'time', 'brekk_timeleft', 'blackmail_timeleft', 'car_theft_timeleft', 'in_jail', 'new_logevents', 'new_pms', 'online' ); $result = array (); if (!isset($_SESSION['MZ_LoginData'])) { $result['error'] = 1; } if ($result['error']) die( json_encode($result) ); mysql_connect('localhost', 'KHA_mz', 'kr1st0fferxX') or die('ERROR #4'); mysql_select_db('KHA_mz_db') or die('ERROR #5'); $sql = mysql_query("SELECT id,userid,health,level,hospital_data FROM `[players]` WHERE `userid`='".$_SESSION['MZ_LoginData']['userid']."' ORDER BY id DESC LIMIT 0,1"); $player = mysql_fetch_array($sql); if ($player['health'] <= 0 || $player['level'] <= 0) { $result['error'] = 2; } if ($result['error']) die( json_encode($result) ); $sql = mysql_query("SELECT id,added,penalty FROM `jail` WHERE `playerid`='".$player['id']."' AND `added`+`penalty`>".time().""); $jail = mysql_fetch_array($sql); $jailTime = 0; if ($jail['id'] != '') { $jailTime = $jail['added'] + $jail['penalty'] - time(); if ($jailTime < 0) $jailTime = 0; } $hospital_data = unserialize($player['hospital_data']); $hospitalTime = $hospital_data['added'] + $hospital_data['time_length'] - time(); $waitTime = 0; if ($jailTime > 0 || $hospitalTime > 0) { $waitTime = $jailTime > $hospitalTime ? $jailTime : $hospitalTime; } foreach ($menuads as $ad_id) { if ($ad_id == 'time') { $data = time(); } elseif ($ad_id == 'brekk_timeleft') { $sql = mysql_query("SELECT last,latency FROM `brekk` WHERE `playerid`='".$player['id']."'"); $brekk = mysql_fetch_array($sql); $last_crime = explode(",", $brekk['last']); $last_time = $last_crime[0]; $latency = round($last_time+$brekk['latency'] - time(), 0); $latency = $latency <= 0 ? 0 : $latency; $data = $waitTime > $latency ? $waitTime : $latency; } elseif($ad_id == 'blackmail_timeleft') { $sql = mysql_query("SELECT last_time,latency FROM `blackmail` WHERE `playerid`='".$player['id']."'"); $blackmail = mysql_fetch_array($sql); $latency = $blackmail['last_time'] + $blackmail['latency'] - time(); $latency = $latency <= 0 ? 0 : $latency; $data = $waitTime > $latency ? $waitTime : $latency; } elseif($ad_id == 'car_theft_timeleft') { $sql = mysql_query("SELECT last_time,latency FROM `car_theft` WHERE `playerid`='".$player['id']."'"); $car_theft = mysql_fetch_array($sql); $latency = $car_theft['last_time'] + $car_theft['latency'] - time(); $latency = $latency <= 0 ? 0 : $latency; $data = $waitTime > $latency ? $waitTime : $latency; } elseif($ad_id == 'in_jail') { $num = mysql_num_rows(mysql_query("SELECT id FROM `jail` WHERE `active`='1'")); $data = $num; } elseif($ad_id == 'new_logevents') { $num = mysql_num_rows(mysql_query("SELECT id FROM `KHA_mz_db`.`logevents` WHERE `userid`='".$player['userid']."' AND `viewed`='0'")); $data = $num; } elseif($ad_id == 'new_pms') { $num = mysql_num_rows(mysql_query("SELECT id FROM `messages` WHERE `to_user`='".$player['userid']."' AND `read`='0' AND `deleted`='0'")); $data = $num; } elseif($ad_id == 'online') { $num = mysql_num_rows(mysql_query("SELECT id FROM `[users]` WHERE `online`+'3600' > '".time()."' AND `hasPlayer`='1'")); $data = $num; $sql = mysql_query("SELECT online_stats FROM `game_stats` ORDER BY last_updated DESC LIMIT 1"); $stats = mysql_fetch_array($sql); $online_stats = unserialize($stats['online_stats']); if ($num > $online_stats['highest_online'][0]) { $online_stats['highest_online'] = array($num, time()); mysql_query("UPDATE `game_stats` SET `online_stats`='".serialize($online_stats)."'"); } } $result['menuads'][] = array( 'class' => $ad_id, 'data' => $data ); } die( json_encode($result) ); ?> Om noen kunne hjulpet meg med å finne ut hvorfor det ikke fungerer så hadde det vært konge! - KRIZx Lenke til kommentar
Crowly Skrevet 3. februar 2013 Del Skrevet 3. februar 2013 Data du sender med json_encode() må være utf-8. Så du kan prøve å endre til $result['menuads'][] = array( 'class' => utf8_encode($ad_id), 'data' => utf8_encode($data) ); Lenke til kommentar
KRIZx Skrevet 4. februar 2013 Forfatter Del Skrevet 4. februar 2013 Data du sender med json_encode() må være utf-8. Så du kan prøve å endre til $result['menuads'][] = array( 'class' => utf8_encode($ad_id), 'data' => utf8_encode($data) ); Det fungerte ikke.. er det en annen løsning på det her? - KRIZx Lenke til kommentar
Crowly Skrevet 4. februar 2013 Del Skrevet 4. februar 2013 Åpne Firebug, Operas Dragonfly eller andre utviklingsverktøy og se hva som blir sent fra klienten og hva serveren svarer. Du finner dette (stort sett?) under Network, og filtrer på XHR. Kan være at du har en feil i scriptet som gir en warning e.l., da blir det sent html/tekst i tillegg til en json streng, og det vil ikke fungere. I tillegg kan du ha en feil i javascriptet. Strip ned scriptene til det alle mest nødvendige, eller lag kun ett test script, slik at du er sikker på at du sender korrekt data frem og tilbake. Lenke til kommentar
Capitalist Hippie Skrevet 4. februar 2013 Del Skrevet 4. februar 2013 "fungerer ikke" er en ganske dårlig feilbeskrivelse.. 1 Lenke til kommentar
KRIZx Skrevet 4. februar 2013 Forfatter Del Skrevet 4. februar 2013 Prøvd inspiser element med google chrome i den ene javascript filen, får opp: Uncaught TypeError: Cannot read property 'menuAdds' of null. Får ikke opp flere feilmeldinger enn det, ingen JavaScript vil kjøre på nettsiden.. Om dere vil teste, så send meg en PM så får dere nettsiden. Lenke til kommentar
xatic Skrevet 4. februar 2013 Del Skrevet 4. februar 2013 Hvis du virkelig ønsker hjelp, poster du lenken her. Påstå at "javascript ikke fungerer på nettsiden" er som å si at eggene ikke blir hardkokt. 1 Lenke til kommentar
KRIZx Skrevet 4. februar 2013 Forfatter Del Skrevet 4. februar 2013 www.mafiazone.no Bruker: Test Passord: demo123 Nettsiden er ikke ferdig, så kan oppstå noen feil sikkert. Lenke til kommentar
Crowly Skrevet 4. februar 2013 Del Skrevet 4. februar 2013 Hva skal i så fall testes? Ser at auto_Updates_get.php blir kjørt regelmessig, men det blir ikke sendt noen parameter til den siden. Lenke til kommentar
KRIZx Skrevet 4. februar 2013 Forfatter Del Skrevet 4. februar 2013 menuAdds , forum og meldinger. Autoupdates er ikke så farlig med, viktigste er å finne feil i de funksjonene som skal bli brukt. Lenke til kommentar
molty Skrevet 4. februar 2013 Del Skrevet 4. februar 2013 hvis det er autoupdate som er samme fil som du la ut her, så lurer jeg på følgende: Hvor er get variablene i filen? Eller request variabler for den skyld? For ellers kan du jo ikke lese data sendt fra serveren via javascript Og har du feilkjørt hele filen din? Kan det hende det er feil i filen som du ikke ser? Et tips er å alltid bruke feilmeldinger på mysql spørringer. // F.eks mysql_query("spørring her") or die(mysql_error()); Det er det jeg har å komme med sålangt Lenke til kommentar
Crowly Skrevet 4. februar 2013 Del Skrevet 4. februar 2013 (endret) Hva skjer hvis du prøver å kalle opp denne filen direkte i nettleseren? Hvis alt er riktig skal du få en json kodet streng, da kan du sjekke at den er som forventet. Har du noen feil i skriptet så skal de vises (skru på error reporting om nødvendig). Å bruke die() er neppe lurt i denne sammenhengen, det vil resultere i ren tekst som output i stedet for json, og da vil ting feile. try catch er nok bedre. Og i stedet for die(json_encode($result)); så bruk echo json_encode($result); ser mye bedre ut. try { // kode mysql_query("spørring her") or throw new exception(mysql_error()); // mer kode } catch (Exception $e) { $result['errmsg']=utf8_encode($e->getMessage()); } echo json_encode($result); jQuery $.post('ajax.php',{test: 'test', alt: 1}, function(data) { // debugging console.log(data); // behandle hvert felt i data $.each(data, function (key, value) { switch (key) { case 'errmsg': alert(value); break; case 'data': // utfør ting for data; break; case 'class': // utfør ting for class; break; } } // alternativt til each med switch if (typeof data.errmsg!='undefined') { // utfør feilmeldings håndtering } },'json'); Du kan også legge inn kommandoen console.log(variabel_navn_med_retur_php); for å hjelpe til med debuggingen, en grei måte å se innholdet i en variabel, spesielt arrays og objekter, i konsollen i nettleserens utviklerverktøy (firebug/dragonfly o.l.) Endret 5. februar 2013 av Crowly Lenke til kommentar
KRIZx Skrevet 4. februar 2013 Forfatter Del Skrevet 4. februar 2013 Hva skjer hvis du prøver å kalle opp denne filen direkte i nettleseren? Hvis alt er riktig skal du få en json kodet streng, da kan du sjekke at den er som forventet. Har du noen feil i skriptet så skal de vises (skru på error reporting om nødvendig). Å bruke die() er neppe lurt i denne sammenhengen, det vil resultere i ren tekst som output i stedet for json, og da vil ting feile. try catch er nok bedre. Og i stedet for die(json_encode($result)); så bruk echo json_encode($result); ser mye bedre ut. try { // kode mysql_query("spørring her") or throw new exception(mysql_error()); // mer kode } catch (Exception $e) { $result['errmsg']=utf8_encode($e->getMessage()); } echo json_encode($result); jQuery $.post('ajax.php',{test: 'test', alt: 1}, function(data) { // debugging console.log(data); // behandle hvert felt i data $.each(data, function (key, value) { switch (key) { case 'errmsg': alert(value); break; case 'data': // utfør ting for data; break; case 'class': // utfør ting for class; break; } } // alternativt til each med switch if (typeof data.errmsg!='undefined') { // utfør feilmeldings håndtering } },'json'); Du kan også legge inn kommandoen console.log(variabel_navn_med_retur_php); for å hjelpe til med debuggingen, en grei måte å se innholdet i en variabel, spesielt arrays og objekter, i konsollen i nettleserens utviklerverktøy (firebug/dragonfly o.l.) Hei, Skal prøve på det, også lager jeg ett innlegg her hvis det ikke fungerer. Lenke til kommentar
Crowly Skrevet 5. februar 2013 Del Skrevet 5. februar 2013 Hvis du ikke får det til å fungere, så bør du lage deg noe enkel test kode som er helt uavhengig av hoved prosjektet. Slik at du får kontroll på hva som må gjøres i forhold til evt. rammeverk og syntaks både på klient (javascript) og server (php) siden. Når det fungerer, så overfører du metoden til hoved prosjektet. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå