PHP/Json - Amatör får det inte att fungera

Trädvy Permalänk
Medlem
Registrerad
Feb 2012

PHP/Json - Amatör får det inte att fungera

Nu är jag tillbaka med ännu en fråga efter att suttit fast i en hel dag då jag fick sådan utmärkt hjälp senast
Det är den sista biten för att mitt lilla sidoprojekt ska vara klart sedan återgår jag till grafisk design xD

$test = array('apple', 'orange', 'banana', 'strawberry');

Om jag kör detta och sedan försöker ladda in det i json filen så funkar det utmärkt.

var testing = <?php echo json_encode($test) ?>;

och jag laddar då upp en lista i min html fil med apple, orange osv där varje får sin egna rad

Men jag blir inte klokare av det jag läst, kan vara jag som söker efter fel exempel.

Hur gör jag för att istället med hjälp av php få ut allt ur en databas kolumn? Jag får den bara att ladda 1 sak ur kolumnen, om en user heter tex "Test" så får jag ut T - E - S - T uppdelat över fyra rader

$q = "SELECT * FROM users"; $result = mysql_query($q); $num_rows = mysql_num_rows($result); if ( $num_rows <= 1 ) { echo "no results returned"; } else { while( $row = mysql_fetch_array($result) ) { echo json_encode ($row['username']) ; } } ?>

Om jag kör dessa rader så visar jag det jag vill att json filen ska ladda, men hur ska jag assigna det till $test? Så att det fungerar som i exemplet ovan? Jag vill alltså ladda in innehållet från en databas kolumn precis som jag gjorde i den första koden

- Följ gärna via Twitch.tv/gribblurk -
Välkomna framtiden!
Eth: 0x7ba9ab64c77724c12e1273eaa8eb22035e295925

Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Jan 2004

@Cudage:

Kanske fungerar?

$q = "SELECT * FROM users"; $result = mysql_query($q); $num_rows = mysql_num_rows($result); if ( $num_rows == 0 ) { echo "no results returned"; } else { $data = array(); while( $row = mysql_fetch_array($result) ) $data[] = $row; echo json_encode($data) ; } ?>

Trädvy Permalänk
Medlem
Registrerad
Nov 2005

Ladda ned json direkt i javascript med t.ex jquery http://api.jquery.com/jquery.getjson/

Trädvy Permalänk
Medlem
Plats
Landskrona
Registrerad
Nov 2008

Vad händer om du kör

$return_arr = array(); $q = "SELECT * FROM users"; $result = mysql_query($q); $num_rows = mysql_num_rows($result); if ( $num_rows <= 1 ) { echo "No results returned."; } else { while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) { $row_array['id'] = $row['id']; $row_array['username'] = $row['username']; array_push($return_arr, $row_array); } echo json_encode($return_arr); }

Trädvy Permalänk
Medlem
Registrerad
Feb 2012
Skrivet av iXam:

@Cudage:

Kanske fungerar?

$q = "SELECT * FROM users"; $result = mysql_query($q); $num_rows = mysql_num_rows($result); if ( $num_rows == 0 ) { echo "no results returned"; } else { $data = array(); while( $row = mysql_fetch_array($result) ) $data[] = $row; echo json_encode($data) ; } ?>

Konungen av programmeringen är tillbaka för att hjälpa amatören

När jag kör denna kodrad (justerade så det står username istället för * för att den ska ladda från username ur table users) så printar det ut i detta format:

[{"0":"Admin","username":"Admin"},[{"0":"test","username":"test"}

Men jag behöver få det till detta format för att json koden ska ladda korrekt tillsammans med api:t.

["admin","test"]

Jag har säkert utryckt mig på ett förrvirrande sätt men detta kanske klargör lite Men du har kommit närmare än vad jag lyckats på 48h

- Följ gärna via Twitch.tv/gribblurk -
Välkomna framtiden!
Eth: 0x7ba9ab64c77724c12e1273eaa8eb22035e295925

Trädvy Permalänk
Medlem
Registrerad
Feb 2012
Skrivet av kevvs:

Vad händer om du kör

$return_arr = array(); $q = "SELECT * FROM users"; $result = mysql_query($q); $num_rows = mysql_num_rows($result); if ( $num_rows <= 1 ) { echo "No results returned."; } else { while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) { $row_array['id'] = $row['id']; $row_array['username'] = $row['username']; array_push($return_arr, $row_array); } echo json_encode($return_arr); }

Jag får då ut följande

[[{"username":"Admin"},{"username":"test2"},{"username":"test"}]]

- Följ gärna via Twitch.tv/gribblurk -
Välkomna framtiden!
Eth: 0x7ba9ab64c77724c12e1273eaa8eb22035e295925

Trädvy Permalänk
Medlem
Plats
Landskrona
Registrerad
Nov 2008

Det är väl korrekt JSON? @Cudage

[ { "username":"Admin", }, { "username":"test2", }, { "username":"test", } ]

Prova följande

$data = array(); $q = "SELECT * FROM users"; $result = mysql_query($q); $num_rows = mysql_num_rows($result); if ( $num_rows <= 1 ) { echo "No results returned."; } else { foreach ($result as $row) { $data[] = array_values($row); } echo json_encode($data); }

Trädvy Permalänk
Medlem
Plats
Järfälla
Registrerad
Jan 2004

Kan börja med att rekommendera att inte använda de gamla mysql_ funktionerna. Använd PDO istället. Följande borde ge ett ett bra output:

// Anslut till databas try { $dbh = new PDO('mysql:dbname='.DBNAME.';host='.DBHOST, DBUSER, DBPASS); $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } catch (PDOException $e) { die($this->response('Database error: '.$e->getMessage())); } // Hämta diverse dynga $sql = "SELECT id, username FROM users"; $stmt = $dbh->prepare($sql); $stmt->execute(); echo json_encode($stmt->fetchAll(PDO::FETCH_ASSOC));

Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Jul 2013
Skrivet av iXam:

@Cudage:

Kanske fungerar?

$q = "SELECT * FROM users"; $result = mysql_query($q); $num_rows = mysql_num_rows($result); if ( $num_rows == 0 ) { echo "no results returned"; } else { $data = array(); while( $row = mysql_fetch_array($result) ) $data[] = $row['username']; echo json_encode($data) ; } ?>

@cudage Funkar detta? (Se fet text)

Trädvy Permalänk
Medlem
Registrerad
Feb 2012
Skrivet av sickhouse:

@cudage Funkar detta? (Se fet text)

JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA!!!!!! ÄNTLIGEN
Bugar och tackar alla som hjälpt till! Ibland kör man fast helt

Skrivet av trexake:

Kan börja med att rekommendera att inte använda de gamla mysql_ funktionerna. Använd PDO istället. Följande borde ge ett ett bra output:

// Anslut till databas try { $dbh = new PDO('mysql:dbname='.DBNAME.';host='.DBHOST, DBUSER, DBPASS); $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } catch (PDOException $e) { die($this->response('Database error: '.$e->getMessage())); } // Hämta diverse dynga $sql = "SELECT id, username FROM users"; $stmt = $dbh->prepare($sql); $stmt->execute(); echo json_encode($stmt->fetchAll(PDO::FETCH_ASSOC));

Ska testa att justera mina koder mot PDO eller msqli nu när jag fått denna bit avklarad Ville bara slutföra detta miniprojekt då jag stirrat mig blind på samma kodrader i en evighet innan jag gav mig på det

- Följ gärna via Twitch.tv/gribblurk -
Välkomna framtiden!
Eth: 0x7ba9ab64c77724c12e1273eaa8eb22035e295925