Daten aus MySQL via JSON übertragen

Spelvin

Mitglied
Hallo Leute,
ich möchte gerne Daten aus einer Mysql Datenbank via JSON an eine HTML-Datei übertragen. Meine Dateien sehen momentan wie folgt aus:

auslesen.php
Code:
 mysql_select_db($mysqldb, $connection) or die("Konnte die Datenbank nicht waehlen.");
    
        $sql = "SELECT * FROM datenbestand";
        $adressen_query = mysql_query($sql) or die("Anfrage nicht erfolgreich");
            $anzahl = mysql_num_rows($adressen_query);

    echo "Anzahl der Datensaetze: $anzahl";


$i=0;
$obj = new stdClass();
while ($adr = mysql_fetch_array($adressen_query)){
$obj->id = $adr['id'];
$obj->name = $adr['name'];
$obj->beschreibung = $adr['beschreibung'];
$obj_array[$i] = array("id".":".$adr['id'],"name".":".$adr['name'],"beschreibung".":".$adr['beschreibung']);
$i=$i+1;
}

$data = sprintf('var daten = %s', json_encode($obj_array));
$h = fopen('uebertragen.js', 'w');
fwrite($h, $data);
fclose($h);


uebertragen.js
Code:
var daten = {{"id":"0","name":"Testobjekt","beschreibung":"Test Test Test"}}

index.html
Code:
<html>
  <head>
	<script type="text/javascript" src="uebertragen.js"></script>
	<script type="text/javascript">
	var id=daten.id;
	var name=daten.name;
	var beschreibung=daten.beschreibung;

	
document.write("<h1>Daten</h1>");
	
document.write("ID: <b>" + id + "<\/b><br>");
document.write("Name: <b>" + name + "<\/b><br>");
document.write("Beschreibung: <b>" + beschreibung + "<\/b><br>");
	</script>

  </head>
</html>

Leider zeigt er mir anstatt dem Wert "undefined" an. Was mache ich falsch?
 
Das ist kein gültiges JSON bzw. JavaScript. Dein PHP Code ist auch etwas doppelt gemoppelt. In Zeile 16 erzeugst du das JSON praktisch selbst, obwohl du später json_encode benutzt.

Änder die Zeile mal

Javascript:
$obj_array[$i] = $obj;
 
Möglicherweise müssen die äußeren Klammern des JSON auch normale Klammern sein..
Code:
({...})

mfg chmee
 
Ich bezweifle dass das was hiernach:
Code:
$obj_array[$i] = array(
kommt etwas anderes erzeugt als einen Parser-Fehler.

Schau dir bitte mal im Handbuch an, wie man einen Array in PHP erzeugt.

Auch ist das, was da im JS steht sicher nicht das Ergebnis von json_encode() , denn es ist kein JSON
 
Danke für eure schnelle Hilfe. Wie übergebe ich den die Daten am besten an meine HTML Datei ? Hat jmd. vielleicht einen Beispielcode oder kann mir sagen wo ich am besten nachschauen kann?
 
Ich habe den Inhalt der PHP Datei jetzt wie folgt geändert:
Code:
 $sql = "SELECT * FROM datenbestandn";
        $adressen_query = mysql_query($sql) or die("Anfrage nicht erfolgreich");
            $anzahl = mysql_fetch_assoc($adressen_query);
			$output[]=$anzahl;
			
$data = sprintf('var daten = %s', json_encode($output));
$h = fopen('uebertragen.js', 'w');
fwrite($h, $data);
fclose($h);		 
mysql_close();
Jetzt wird die js Datei auch richtig erzeugt. Aber leider zeigt er mir die Daten in der HTML Datei immernoch nicht an.

Der Inhalt der HTML-Datei:
Code:
<script type="text/javascript" src="uebertragen.js"></script>
	<script type="text/javascript">


for(var i=0; i <=10; i++){
document.write(daten[i].id);
document.write(daten[i].name);
document.write(daten[i].beschreibung);
document.write("<br />");
}	

	</script>
 
Zuletzt bearbeitet:
Kommt denn irgendein Fehler?

Ansonsten könnte es auch noch am Cache des Browsers liegen!
Versuche mal den Cache zu leeren oder irgendeine Text als "Query-String" anzuhängen, z.B.:
HTML:
<script type="text/javascript" src="uebertragen.js?23423489"></script>

Danke für eure schnelle Hilfe. Wie übergebe ich den die Daten am besten an meine HTML Datei ?
Man könnte auch AJAX verwenden. Damit könntest du dynamisch die Daten nachladen.
 
Es hat wirkllich am Cache des Browsers gelegen. Aber leider zeigt er mir nur den ersten Datensatz an. Also es wird auch nur der erste Datensatz in die javascript Datei geschrieben. Vermutlich habe ich in der php Datei noch ein Fehler. Muss ich hier evtl. was anderes als mysql_fetch_assoc nehmen?

Wie würde das ganze mit Ajax funktionieren?
 
[phpf]mysql_fetch_assoc[/phpf] (und auch andere Funktionen) liefern nur den ersten Datensatz.
Also bau eine Schleife ein:
PHP:
$output = array();
while ( $row = mysql_fetch_assoc($adressen_query) )
{
  $output[] = $row;
}

Mit AJAX müsstest du erstmal die Daten abfragen:
Javascript:
var req = new XMLHttpRequest();
req.onreadystatechange = function()
{
  if (req.readyState==4 && req.status==200)
  {
     var data = JSON.parse(req.responseText);
     /* data weiterverarbeiten/anzeigen */
  }
}
req.open("GET", "auslesen.php");
req.send();
Außerdem müsstest du dein PHP-Skript umschreiben:
Statt
PHP:
$data = sprintf('var daten = %s', json_encode($output));
$h = fopen('uebertragen.js', 'w');
fwrite($h, $data);
fclose($h);
müsstest du nur folgendes schreiben:
PHP:
echo json_encode($output);
 
Danke für deine Hilfe es funktionert. Versuche dann gleich auch mal die Ajax Variante. Verstehe ich das richtig das ich den Ajax-Code in meine HTML datei mache und mir die uebertragen.js sparen kann?
 

Neue Beiträge

Zurück