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

Permalänk
Medlem

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

Permalänk
Medlem

@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) ; } ?>

Permalänk
Medlem

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

Permalänk
Medlem

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); }

Permalänk
Medlem
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

Permalänk
Medlem
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"}]]

Permalänk
Medlem

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); }

Permalänk
Medlem

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));

Permalänk
Medlem
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)

Permalänk
Medlem
Skrivet av hultron:

@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