• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

[FRAGE] JSON Array generieren mit PHP und JavaScript

petermeier

New member
Hallo JS-Weltler

Ich bin neu in diesem Forum da ich auf der Suche nach Hilfe bin.
Ich habe schon einige Beiträge gesehen, die ähnlich wie meine Frage(n) ist aber so richtig weiter gekommen bin ich durch die Beiträge nicht.

Ziel ist es aus einem HTML5 Formular ein externes JSON file auf dem FTP Server zu kreieren, dass folgende Array Struktur aufweist:
HTML:
{
	"daten":[
	{ "location": "Zurich", "date": "12.02.1963", "map": "img/zurich.jpg"},
	{ "location": "Zurich2", "date": "12.02.1963", "map": "img/zurich.jpg"}
],
	"daten2":[
	{ "location": "Weinfelden", "date": "12.02.1993", "map": "img/weinfelden.jpg"}
]
}
Im Formular gibt es zwei <section> "daten" und "daten2" und jedes soll ein Array mit Objekten darstellen.
Anschliessend lade ich die Daten mittels XMLHttpRequest wieder, was schon schön funktioniert.

In der PHP Datei möchte ich gerne JavaScript verwenden und nicht jQuery ($.fn.serializeObject).
Irgendwie muss ich jetzt das JSON file generieren (data.js) und dann die Arrays und die Objekte darin erstellen.
Wie mache ich das? Ich wäre um eine Erklärung und ein Beispiel froh...

Besten Dank
 
Zuletzt bearbeitet:
auf dem server kannst du nur js benutzen, wenn dir dort node.js zur verfügung steht. ansonsten nur php. js ist per se eine browser sprache.
 
Hi mikdoe

Danke für deinen Hinweis. Bin aber ein bisschen verwirrt. Ich hatte bereits eine Lösung ein PHP file mit jQuery und da konnte ich eine JSON Datei auf den FTP Server speichern aber leider nicht im oben beschriebenen Format.
Hier ist die ursprüngliche PHP Datei:
PHP:
<?php

$myFile = "data.json"; // Json Datei
$arr_data = array(); // Erstelle ein leeres Array

try {
    //Daten aus dem Formular beziehen
    $formdata = array(
        'location' => $_POST['location'],
        'date' => $_POST['date'],
        'map' => $_POST['map'],
    );

    //Daten vom existierenden json-file holen
    $jsondata = file_get_contents($myFile);

    // konvertiert Daten in Array
    $arr_data = json_decode($jsondata, true);

    // Pusht Formulardaten zum Array
    array_push($arr_data, $formdata);

       //Convert updated array to JSON
	   $jsondata = json_encode($arr_data, JSON_PRETTY_PRINT);

    //Json Daten in das entspr. data.json file schreiben
    if (file_put_contents($myFile, $jsondata)) {
        echo 'Daten wurden gespeichert';
    } else
        echo "Fehler";
} catch (Exception $e) {
    echo 'Caught exception: ', $e->getMessage(), "\n";
}
?>
Aber wie erwähnt generiert das nicht die Arrays mit Objekten...
 
Zuletzt bearbeitet:
@mikdoe / @miniA4kuser
Ok, alles klar neuer Tag neues Glück/frischer Kopf..
Jetzt sehe ich was ihr beiden gemeint habt.

Das heisst, ich brauche Hilfe mein PHP so zu verändern, damit ich die, in meinem Eröffnungspost beschriebene JSON Struktur erhalte...
 
Ja, richtig habe ich angepasst (war aus einem Test mit anderen Daten...)

Das Problem ist die Darstellung im JSON file resp. was muss ich im PHP file noch anpassen, damit diese Struktur geschrieben wird:
PHP:
{
	"daten":[
	{ "location": "Zurich", "date": "12.02.1963", "map": "img/zurich.jpg"},
	{ "location": "Zurich2", "date": "12.02.1963", "map": "img/zurich.jpg"}
],
	"daten2":[
	{ "location": "Weinfelden", "date": "12.02.1993", "map": "img/weinfelden.jpg"}
]
}

anstelle von dieser:
PHP:
 {
        "location": "Zurich",
        "date": "12.02.1963",
        "map": "img/zurich.jpg"
    }

Besten Dank
 
Zuletzt bearbeitet:
Statt
PHP:
// Pusht Formulardaten zum Array
array_push($arr_data, $formdata);
mal
PHP:
// Pusht Formulardaten zum Array
$arr_data['daten'][] = $formdata;
probieren?
 
Statt
PHP:
// Pusht Formulardaten zum Array
$arr_data['daten'][] = $formdata;
Das sieht schon mal viel versprechend aus. Vielen Dank
Wenn ich jetzt noch ein Array erstelle
PHP:
$arr_data['daten1'][] = $formdata;

Wie kann ich dann sagen welche Daten von meinem Formular in welches Array gespeichert werden?
Textfeld1 soll in "daten" gespeichert werden Textfeld2 soll in "daten1" gespeichert werden.
 
Indem du dir aussagekräftige Variablennamen festlegst und dann deine Formulardaten in mehrere Arrays aufteilst und diese dann hinzufügst, ungefähr so:
PHP:
// Daten aus dem Formular beziehen
// und Textfelder den entsprechenden Arrays zuweisen
$arrayFormData1 = array(
    'Textfeld1 ' => $_POST['Textfeld1']
);
$arrayFormData2 = array(
    'Textfeld2 ' => $_POST['Textfeld2']
);

// Daten vom existierenden JSON-file holen
$stringJsonData = file_get_contents($myFile);

// Konvertiert JSON-string in Daten-Array
$arrayJsonData = json_decode($stringJsonData, true);

// Pusht Formulardaten zum Daten-Array in den Bereich 'daten1'
$arrayJsonData['daten1'][] = $arrayFormData1;

// Pusht Formulardaten zum Daten-Array in den Bereich 'daten2'
$arrayJsonData['daten2'][] = $arrayFormData2;

// Konvertiert Daten-Array in  JSON-string
$stringJsonData = json_encode($arrayJsonData, JSON_PRETTY_PRINT);
 
Zurück
Oben