• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

$_SESSION und innerHTML

Tronjer

Senior HTML'ler
Ich habe hier eine undankbare Aufgabe. :(

Und zwar muss ich eine Landingpage erstellen, auf der sich ein DIV #counter befindet, dessen Inhalt (264.015) mit einer PHP-Variablen initialisiert wird. Auf dieses DIV wird mit Hilfe eines kleinen JavaScript Counters-zugegriffen, der in unregelmäßigen Abständen nach oben zählt und dabei ständig das innerHTML updatet. Das funktioniert soweit auch und ist erledigt.

Nun hat die Landingpage weitere Unterseiten, die sich per Klick auf einen Button erreichen lassen. Wenn der User durch diese Unterseiten navigiert, soll der Counter nicht wieder mit dem ursprünglichen Initialierungswert beginnen, sondern den aktualisierten Wert übernehmen und von dort aus weiterzählen. Es findet zwangsläufig jedes Mal ein Seitenrefresh statt, und ich darf auch keine PHP-Module (dom-extension, etc.) installieren.

Was ich bisher versucht habe ist, den Wert per GET an die URL weiterzureichen und von dort aus in eine Session zu schreiben, bzw. per if-Abfrage zu prüfen, ob $_SESSION oder $_GET gesetzt sind und anderenfalls den $init_value zu übernehmen. Das klappt aber nicht, bei jedem Refresh startet der Counter immer wieder mit dem Initialisierungswert (264.015).

Das nachfolgende Script ist leicht gekürzt, aber von der Programmlogik nachvollziehbar, und ich denke mal, dass mein Ansatz hier ohnehin noch nicht richtig ist.
PHP:
<?php
    $init_value = 264.015;

    if (isset($_SESSION['counter'])) {
        $counter = $_SESSION['counter'];
    } elseif (isset($_GET['counter'])) {
        $counter = $_GET['counter'];
    } else {
        $counter = $init_value;
    }
?>
<!DOCTYPE html>
<html>
<head>
   <meta charset="utf-8" />
    <title>Foobar</title>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
</head>
<body>
    <p id="counter"><?php echo $counter; ?></p>
    <p>
        <a href="http://irgendeinLink?counter=<?php echo $counter; ?>"></a>
    </p>
    
    <script type="text/javascript">
    $(document).ready(function() {
        // Counter mit random interval
        function count() {
              var number = document.getElementById('counter').innerHTML;
                number = parseFloat(number);
                var add = number + 0.001;
                add = add.toFixed(3);
                document.getElementById('counter').innerHTML = add;
            }

            function init() {
                var timeOut = function() {
                    count();
                    var rand = Math.round(Math.random() * (5000 - 2000)) + 2000;
                    setTimeout(timeOut, rand);
                };
                timeOut();
            }

            $(function() {
                init();
            });
    });
    </script>
</body>
</html>
 
Werbung:
Also ich hab mir das mal angesehen und denke, dass es daran liegt, dass die php-variable gar nicht weiter hochgezählt wird.
Du beschreibst $counter ein Mal beim Seitenaufruf.
Das Javascript verändert das aussehen deines <p>-Tags, zählt allerdings die php-variable nicht hoch.
Die $counter Variable bleibt die ganze Zeit gleich, wird demnach auch mit dem Standardwert weitergegeben, die Übergabe funktioniert also schon.
Du musst dafür sorgen, dass bei einem Klick auf einen Link die PHP-Variable mit dem aktuellen neuen Wert gefüllt wird.
Und selbst dann musst du die Links alle nochmal aktualisieren.
Beim erzeugen des HTML Dokumentes wird per PHP der Standardwert reingeschrieben, der is von Beginn an in den Links drin, den musst du noch ändern.
 
Zuletzt bearbeitet:
Das Javascript verändert das aussehen deines <p>-Tags, zählt allerdings die php-variable nicht hoch.
Die $counter Variable bleibt die ganze Zeit gleich, wird demnach auch mit dem Standardwert weitergegeben, die Übergabe funktioniert also schon.
Du musst dafür sorgen, dass bei einem Klick auf einen Link die PHP-Variable mit dem aktuellen neuen Wert gefüllt wird.

Ja, ich weiß, genau da liegt mein Problem. Die Variable $counter wird serverseitig erzeugt und der Inhalt des DIVs nach dem Laden der Seite clientseitig upgedatet, ohne dass sich der Wert in der Variablen dabei verändert. Genaugenommen müsste ich document.getElementById('counter').innerHTML durchreichen.

Nun könnte ich die Weiterleitung zu den Unterseiten sowohl per JavaScript als auch PHP durchführen, allerdings ist es nicht möglich, in PHP JS-Variablen zu speichern, während umgekehrt JavaScript keine $_Session kennt. Ein Ansatz wäre sicherlich, den Umweg über AJAX zu nehmen. Aber ich dachte, dass es eventuell noch eine andere Lösung gibt, auf die ich bisher nicht gekommen bin.
 
Werbung:
Ein session_start() wäre hilfreich um eine Session fortzuführen, sonst wird dein gesetzter Wert nicht übergeben.
 
Eine möglichkeit wäre das du die JavaScript Variable in ein Formular schreibst und sie mit POST an php übergibst.
Greez Stryke
 
Ich habe heute ein AJAX-Script geschrieben, um anschließend festzustellen, dass unser Backend AJAX-Requests von Landingpages nicht zulässt. Aber immerhin konnte ich dabei was lernen. ;)

Morgen werde ich versuchen, den aktualisierten Wert per Cookie durchzureichen, und wenn das auch nicht funktionieren sollte, dann schaue ich mal, ob sich so ein Counter auch in PHP umsetzen lässt. JavaScript war für mich hier allerdings die naheliegendste Lösung, zumal das Intervall aus Zufallszahlen erzeugt werden soll.
 
Werbung:
So, habe das Problem gelöst und bin um eine Erfahrung reicher. Der einfachste Weg um den Inhalt der Variablen
HTML:
var foo = $("#bar").html();
während einer Session weiterzugeben, besteht darin, den Wert in einem JS-Cookie zu speichern. Die Übergabe an PHP ist nicht unbedingt notwendig.

Im obigen Beispiel mit dem Counter wird nun beim Laden der einzelnen Seiten der Wert des Cookies timer im DIV #counter ausgegeben und beim Klick auf einen Navigationsbutton immer wieder aktualisiert.

HTML:
$("#button").click(function(){
    var counter = $("#counter").html();
    $.cookie('timer', counter);
    window.location = 'http://example.de';
});

Setzt natürlich voraus, dass der User JavaScript und Cookies aktiviert hat. Wovon ich in meinem Fall aber ausgehen kann.
 
Zurück
Oben