JSON Array wird nicht angezeigt

Hallo liebe Community,

also ich habe eine php Datei geschrieben, die mir eine komplette Tabelle aus meiner Datenbank auslesen und anzeigen soll.

Hier der Code der php-Datei:

<?php

$host = "abc123"; //Your database host server
$db = "abc123"; //Your database name
$user = "abc123"; //Your database user
$pass = "abc123"; //Your password
$connection = mysql_connect($host, $user, $pass);
//Check to see if we can connect to the server
if(!$connection)
{
die("Database server connection failed.");
}
else
{
//Attempt to select the database
$dbconnect = mysql_select_db($db, $connection);
//Check to see if we could select the database
if(!$dbconnect)
{
die("Unable to connect to the specified database!");
}
else
{
$query = "SELECT * FROM Locations";
$resultset = mysql_query($query, $connection);
$records = array();
//Loop through all our records and add them to our array
while($r = mysql_fetch_assoc($resultset))
{
$records[] = $r;

}
//Output the data as JSON
echo json_encode($records);
}
}
?>

Er kann eine Verbindung und alles herstellen, aber irgendwie funktioniert die letzte Zeile nicht, mit dem echo json_encode($records) nicht.

Hoffe mir kann jemand helfen oder mir zeigen wie es richtig geht, denn ich will eine App machen die das Ergebnis lesen kann und die hab ich schon mit json programmiert.

Versuch beim nächsten mal bitten den Code korrekt einzurücken, damit es lesbar ist.

[code]<?php

$host = “abc123”; //Your database host server
$db = “abc123”; //Your database name
$user = “abc123”; //Your database user
$pass = “abc123”; //Your password
$connection = mysql_connect($host, $user, $pass);
//Check to see if we can connect to the server
if(!$connection)
{
die(“Database server connection failed.”);
}
else
{
//Attempt to select the database
$dbconnect = mysql_select_db($db, $connection);
//Check to see if we could select the database
if(!$dbconnect)
{
die(“Unable to connect to the specified database!”);
}
else
{
$query = “SELECT * FROM Locations”;
$resultset = mysql_query($query, $connection);
if(!$resultset) {
die(mysql_error());
}
$records = array();
//Loop through all our records and add them to our array
while($r = mysql_fetch_assoc($resultset))
{
$records[] = $r;

    }
    //Output the data as JSON
    echo json_encode($records);
}

}
?>[/code]

Ich hab nach dem mysql_query noch eine zusätzliche Abfrage eingefügt. Probier das mal bitte aus.

Zusätzlich: Du solltest mindestens auf mysqli umsteigen. mysql ist veraltet und sollte nicht mehr genutzt werden.

Ok hab jetzt deinen Code verwendet und wenn ich die Datei aufrufe im Browser, bekomm ich ein weißes Fenster.
Hab auch probiert ein falsches Passwort einzugeben, dann erscheint eine Error Meldung, also muss mein Array, was ich am Schluss ausgebe leer sein, aber das kann theoretisch nicht richtig sein.

Also was sollte ich machen?

Mach sonst noch mal, statt echo:

wenn ich jetzt dein Code - Schnipsel verwende steht einfach nur “bool(false)” im Fenster.

Ja, denn laut Manual:

Dann mach vor dem json_encode auch noch mal:

Damit wir sehen können, was tatsächlich in dem array enthalten ist. Offensichtlich bekommt json_encode irgendwelche Daten, mit denen der nicht arbeiten kann.

ok jetzt bekomm ich mehr Daten heraus, ich kopier jetzt einen kleinen Teil davon:

array(19) { [0]=> array(3) { ["Name"]=> string(6) "Tivoli" ["Latitude"]=> string(8) "47,37810" ["Longitude"]=> string(8) "15,08674" } [1]=> array(3) { ["Name"]=> string(9) "Grünanger" ["Latitude"]=> string(8) "47,04551" ["Longitude"]=> string(8) "15,44385" } [2]=> array(3) { ["Name"]=> string(21) "Trofaiacher Skatepark" ["Latitude"]=> string(8) "47,42327" ["Longitude"]=> string(8) "15,00036" }..........

Die Daten stimmen und alles

Okay, spontan sehe ich keinen Fehler.

Ich könnte jetzt nur noch die Vermutung aufstellen, dass du dich irgendwo vertippt hast. möglicherweise die Variable $records, die du an json_encode() übergibst, ist nicht korrekt geschrieben (bzw. die anderen orte an denen $records auftaucht ist anders geschrieben)… wenn das auch nicht der Fall ist, weiß ich auch ned weiter.

du könntest sonst noch mal versuchen ganz an den anfang der Datei das error_reporting hoch zu stellen:

Dank dem error_reporting bekomm ich jetzt nur Error Meldungen!

Erste war das ich mysqli benutzen soll um auf die Datenbank zugriff zu haben, dass hab ich auch gemacht;
nun kommt diese Fehlermeldung.

Warning: mysql_select_db() expects parameter 2 to be resource, object given in

Du musst mysqli_* überall verwenden.
In der regel nutzt du auch mysql_select_db gar nicht mehr. da mysqli_connect bereits als viertes argument die Datenbank entgegen nimmt.
Die zweite Überprüfung sollte also auch wegfallen.

ok hab jetzt überall wo mysql_* gestanden ist, auf mysqli_* umgeschrieben; trotzdem erhalte ich eine Error - Meldung:

Warning: mysqli_select_db() expects parameter 1 to be mysqli,

[quote=“Balmung”]In der regel nutzt du auch mysql_select_db gar nicht mehr. da mysqli_connect bereits als viertes argument die Datenbank entgegen nimmt.
Die zweite Überprüfung sollte also auch wegfallen.[/quote]

php.net/manual/de/function.mysqli-connect.php

Die mysqli_select_db funktion fällt weg.

Und eigl. nutzt man mysqli nicht ohne OOP^^
Eigl. sollte es eher so aussehen (so verwendet ist es auch um einiges leichter)

also hab jetzt alles umgeändert und es kommen auch keine Error-Meldungen mehr.
Hier ist der Code:

<?php

error_reporting(E_ALL);

$host = "abs"; //Your database host server
$db = "abs"; //Your database name
$user = "abs"; //Your database user
$pass = "abs"; //Your password

$connection = mysqli_connect($host, $user, $pass, $db);
//Check to see if we can connect to the server
if(!$connection)
{
    die("Database server connection failed.");
}
else
{
        $query = "SELECT * FROM Locations";
        $resultset = mysqli_query($connection, $query);
        if(!$resultset) {
            die(mysqli_error());
        }
        $records = array();
        //Loop through all our records and add them to our array
        while($r = mysqli_fetch_assoc($resultset))
        {
            $records[] = $r;

        }
        //Output the data as JSON
        //var_dump($records);

        var_dump(json_encode($records));
    
}
?>

Und das Resultat ist bool(false). Also was mach ich falsch, oder kann das bplaced einfach nicht verarbeiten?

Ich hab keinen blassen schimmer. In den Daten muss irgendwas drinne sein, was der nicht verarbeiten kann.

PHP ist wirklich kacke :ps:

Ein Hinweis vielleicht noch aus dem Manual:

Es könnte sein, dass du Zeichenketten mit Umlaute in falscher Kodierung an json_encode übergibst.

Ok danke vielmals!

Hab jetzt herausgefunden, das ich meine Tabelle auf der Datenbank nicht auf utf-8 kodiert habe, aber jetzt funktioniert es noch immer nicht, also ich glaub PHP hast mich, oder ich fange an PHP zu hassen :slight_smile:

die Tabelle ist relativ unwichtig. Wenn dann muss du schon die Verbindung auf utf-8 stellen.

Nach dem Verbinden und vor dem ersten Query:

BALMUNG DANKE DANKE DANKE DANKE!!!

Es hat funktioniert! Ich hab jetzt meine Tabelle!!

Könntest du dein kompletten Code nochmal hochladen?
Ich habe gerade das gleich Problem.

Ich habe folgendem Code und json gibt nichts zurück:

[code]<?php

//Variable erstellen
$response = array();

// Überprüfe ob Felder vorhanden
if (isset($_POST[‘Position’])) {

$Position = $_POST['Position'];

//Füge db Daten ein
require_once __DIR__ . '/db_config.php';

$db = new mysqli(DB_SERVER, DB_USER, DB_PASSWORD, DB_DATABASE);
$db->set_charset("utf8"); 
if (mysqli_connect_errno()) {
     die ('Konnte keine Verbindung zur Datenbank aufbauen: '.mysqli_connect_error().'('.mysqli_connect_errno().')');
}

// Lösche Daten auf Position
$sql = "DELETE FROM " . DB_TABLE . "WHERE Position = $Position";
$result = $db->query($sql);  

//Wenn keine Position angeben dann nicht löschen
if($Position!= "")
{
    // Prüfe ob Eintrag gelöscht wurde
    if ($result) {
        //Eintrag erfolgreich gelöscht
        $response["success"] = 1;
        $response["message"] = "Eintrag gelöscht";
        // Rückgabe JSON Code
		header('Content-type: application/json');
        echo json_encode($response);

    } else {
        // Fehler beim löschen
        $response["success"] = 0;
        $response["message"] = "Nicht gelöscht";

        // Rückgabe JSON Code
		header('Content-type: application/json');
        echo json_encode($response);
    }

} else {
     // Fehler beim löschen
     $response["success"] = 0;
     $response["message"] = "Keine Position übergeben";

     // Rückgabe JSON Code
	 header('Content-type: application/json');
     echo json_encode($response);
}

} else {
// Fehler beim löschen
$response[“success”] = 0;
$response[“message”] = “Fehler bei der Übergabe der Variablen”;

     // Rückgabe JSON Code
	 header('Content-type: application/json');
	 //var_dump($response);
     echo json_encode($response);

}
?>[/code]

Gruß Thomas

Okay hat sich schon erledigt.

Mein Fehler war, dass ich in der message umlaute hatte und die konnten natürlich verarbeitet.

Gruß Thomas