2016-12-23 2 views
0

Ich habe eine AJAX-Umfrage zu diesem Tutorial basiert: http://www.w3schools.com/php/php_ajax_poll.aspJSON Newbie - dauerhaft Werte zu JSON zwischen Browser Speichern nachlädt

Anstatt jedoch die Umfrage Einträge aus dem HTML-Optionsfeld auf ein Feld in einer Textdatei zu schreiben (wie im Tutorial beschrieben). Ich möchte in eine JSON-Datei schreiben. Momentan werden die Werte aus dem Optionsfeldeintrag an den JSON gesendet, aber die Datei behält den Wert zwischen den Browseraktualisierungen nicht bei. Ich denke, das ist wahrscheinlich ein Problem mit meiner Syntax oder Codierung - der Server sollte die richtigen Berechtigungen haben, um in die Datei zu schreiben. Irgendwelche Tipps werden sehr geschätzt.

<?php $vote = $_REQUEST['vote']; 
//get content of json 
$filename = "poll.json"; 
$poll = file_get_contents($filename); 
$json = json_decode($poll); 
//put content in array 
$array = explode("||", $content[0]); 
$yes = $array[0]; 
$no = $array[1]; 
if ($vote == 0) { 
$yes = $yes + 1; 
} 
if ($vote == 1) { 
$no = $no + 1; 
} 
//insert votes to json file 
$insertvote = $yes."||".$no; 
$fp = fopen($filename,"w"); 
fputs($fp,$insertvote); 
$poll = json_encode($json); 
fclose($fp);?> 

Im Moment ist das Ergebnis entweder: {1} || oder {|| 1} in der JSON-Datei, kann ich nicht herausfinden, wie sich die Werte den Weg zu speichern, dass sie auf die TXT-Datei Version gespeichert (wie hier beschrieben: http://www.w3schools.com/php/php_ajax_poll.asp)


aktualisieren

so basiert auf dem ausgezeichneten Rat, den ich erhielt ich bin viel näher. Ich fand, dass "w" die richtige Option für das PHP als "a +" angehängte Daten im JSON war, anstatt die vorhandenen Werte zu aktualisieren.

Ich habe jetzt eine JSON-Datei, die die Werte aktualisiert, die über die HTML-Optionsfelder hinzugefügt werden.

So sieht das Ergebnis wie: [3,4] AKA 3 Stimmen von Option 1 und 4 Stimmen für Option 2

+0

Erstellen Sie einfach eine gültige JSON-Format Sie verwenden möchten, und zu schreiben, dass in die Datei. Schreiben Sie dann die Art und Weise neu, wie Sie diese JSON-Zeichenfolge generieren. Von meinem begrenzten Verständnis verstehe ich, dass Sie die Werte von # # yes + || schreiben wollen + $ no', das ist kein gültiger json. Versuchen Sie etwas wie '{" pollname ":" mypollname "," value ":" + $ vote + '"} ''. Und dann ändern Sie $ Array, so dass es die 0 oder 1 von der "Wert" -Taste in der JSON-Datei verwendet. – Shilly

+0

Was ist $ Inhalt? Sie rufen Ihre Datei JSON auf, schreiben aber Werte wie '1 || 0', das ist absolut nicht JSON, und so wird 'json_decode' darauf sicherlich fehlschlagen. Warum speichern Sie am Ende etwas in "$ poll", wenn Sie es nicht benutzen? – trincot

+0

Vielen Dank für das Markieren der Probleme mit der Syntax hier. Ich verstehe jetzt, dass es fundamentale Probleme gibt, wie ich die Werte geschrieben habe - ich werde mehr über die Syntax lernen und es noch einmal versuchen. Vielen Dank – Macascot

Antwort

0

Mehrere Probleme:

  • Ihr JSON-Format ist nicht JSON. Werte wie 0||1 sind nicht JSON und so wird json_encode darauf fehlschlagen. Einer der Vorteile von True JSON ist, dass Sie nicht mit Delimitern wie || jonglieren müssen.
  • Die Variable $content wird nirgendwo initialisiert.
  • Sie kodieren etwas als JSON gegen Ende, aber machen Sie nichts damit.
  • Sie rufen eine Variable $json auf, wenn Sie beabsichtigen, decodierten JSON darin zu speichern. Das ist wirklich verwirrend. Rufen Sie eine solche Variable nicht $json. Hier

ist einige alternative Code:

$vote = $_REQUEST['vote']; 
//get content of json 
$filename = "poll.json"; 
if (!file_exists($filename)) { // First time ever 
    $poll = [0, 0]; 
} else { 
    $poll = json_decode(file_get_contents($filename)); 
    if (!$poll) $poll = [0, 0]; 
} 
// increment counter for vote 
$poll[$vote] += 1; 
//insert votes to json file 
file_put_contents($filename, json_encode($poll)); 
+0

Vielen, vielen Dank, @trincot Du hast mich viel näher gebracht und ich bin sehr dankbar dafür. Das einzige Problem, das weiterhin besteht, ist, wie die Daten aus dem Array abgerufen werden, damit sie im HTML angezeigt werden. – Macascot

+0

Gern geschehen. Dies ist jedoch eine Follow-up-Frage. Ich denke, die ursprüngliche Frage (* "JSON dauerhaft zwischen Browser-Neuladungen speichern" *) wurde behoben. Wenn Sie eine weitere Frage haben, sollten Sie das wirklich als neue Frage veröffentlichen. Ich hoffe, Sie verstehen. – trincot

+0

Ich habe Ihre Antwort als Antwort markiert, da sie mir viel näher gebracht hat. Der zweite Teil der Frage, den ich jetzt entfernt habe, hängt davon ab, mit den Werten im Poll-Array zu arbeiten. Ich werde nach einigen anderen diesbezüglichen Posts suchen - vielen Dank. – Macascot

0

Ihr Problem an dieser Linie ist:

$fp = fopen($filename,"w"); 

zum manual Nach , Betriebsart „w“:

Orte der Dateizeiger auf den Anfang der Datei und die Länge der Datei auf die Länge Null

Mit anderen Worten: Jede Anfrage überschreibt die gesamte Datei mit ihrem Inhalt.

Um dies zu beheben, verwenden Sie den Modus "a +".

$fp = fopen($filename,"w"); 
0

Wahrscheinlich ändern Sie Code und diese nicht definiert ist:

$content[0] 

In

$array = explode("||", $content[0]); 

Quelle:

<?php 
$vote = $_REQUEST['vote']; 

//get content of textfile 
$filename = "poll_result.txt"; 
$content = file($filename); 

//put content in array 
$array = explode("||", $content[0]); 
$yes = $array[0]; 
$no = $array[1]; 

if ($vote == 0) { 
    $yes = $yes + 1; 
} 
if ($vote == 1) { 
    $no = $no + 1; 
} 

//insert votes to txt file 
$insertvote = $yes."||".$no; 
$fp = fopen($filename,"w"); 
fputs($fp,$insertvote); 
fclose($fp); 
?>