PHP-Noob: Seltsames Verhalten einer PHP-Variable

Hallo Leute,

ich habe folgendes Problem. Ich habe auf meiner Seite ein Tagebuch, in dem die Tage seitenweise angeordnet sind und man zwischen ihnen mit entsprechenden Buttons blättern kann. Dabei wird mittels AJAX immer der Inhalt des jeweiligen Tages in den DIV nachgeladen. Ich habe zwei PHP-Variablen eingeführt, eine mit dem Namen $max für den letzten möglichen Tag (wird per $fn ermittelt) und eine mit dem Namen $aktuell, in der der aktuell angezeigte Tag für das Blättern gespeichert wird. Am Anfang wird standardmäßig der letzte Tag angezeigt.

Hier der Quellcode für die Belegung der Variablen:

<?php  
if($first==0)  
{  
do  
{  
$max=$max+1;  
$fn = "Tag_" . (string) $max . ".txt";  
}  
while(file_exists($fn));  
$max=$max-1;  
if($aktuell==0)  
	$aktuell=$max;  
$first=1;  
}  
?>

Hier der Code für die Buttons:

 <td align="center"><input name="Anfang" type="image" src="Grafiken/PfeilAnfang.gif" onClick="javascript:sendRequest(1);"></td>  
    <td align="center"><input name="zurueck" type="image" src="Grafiken/Pfeilzurueck.gif" onClick="javascript:sendRequest(<?php $wert=$aktuell-1; echo $wert; ?>);"></td>  
    <td align="center"><input name="vor" type="image" src="Grafiken/pfeilvor.gif" onClick="javascript:sendRequest(<?php $wert=$aktuell+1; echo $wert; ?>);"></td>  
    <td align="center"><input name="Ende" type="image" src="Grafiken/pfeilEnde.gif" onClick="javascript:sendRequest(<?php echo $max; ?>);"></td>

Hier der AJAX-Code:

	function sendRequest(tagesnummer)  
	{  
    	if (!xhttp)  
		{  
        	alert("Fehler beim Aufruf von XMLHttpRequest!");  
            return; // exit  
        }  
		xhttp.open("GET","Tag_"+tagesnummer+".txt",true);  
        xhttp.onreadystatechange=sendRequest_callback;  
        xhttp.send(null);  
		<?php  
			$aktuell=tagesnummer;  
		?>  
	}  
	  
	function sendRequest_callback()  
	{  
        if (xhttp.readyState==4 && xhttp.status==200)  
        	document.getElementById("Text").innerHTML=xhttp.responseText;  
    }

Nun mein Problem. Wie ihr seht, wird immer ein um eins verringerter oder erhöhter Wert bei den Vor- und Zurück-Buttons an die Javascript-Funktion übermittelt, wo dann die entsprechende Textdatei ausgelesen wird. Am Ende wird die PHP-Variable aktuell auf die gerade übergebene Tagesnummer gesetzt. Bis hierhin funktioniert alles einwandfrei, wie mir eine Ausgabe des Variableninhaltes an dieser Stelle auch zeigte. Wenn ich jetzt aber ein weiteres Mal auf den Button klicke, wird wieder der alte Wert der Variable $aktuell als Grundlage genommen, so dass ich mit vor und zurück immer nur zwischen zwei Seiten blättern kann. Wieso vergisst PHP diese Wertänderung zwischendurch? Und wie kann ich das Ganze umgehen?

Vielen Dank schon im Voraus für eure Hilfe!

PHP-Noob

  1. Moin!

    Hier der Code für die Buttons:

    <td align="center"><input name="Anfang" type="image" src="Grafiken/PfeilAnfang.gif" onClick="javascript:sendRequest(1);"></td>

    <td align="center"><input name="zurueck" type="image" src="Grafiken/Pfeilzurueck.gif" onClick="javascript:sendRequest(<?php $wert=$aktuell-1; echo $wert; ?>);"></td>
        <td align="center"><input name="vor" type="image" src="Grafiken/pfeilvor.gif" onClick="javascript:sendRequest(<?php $wert=$aktuell+1; echo $wert; ?>);"></td>
        <td align="center"><input name="Ende" type="image" src="Grafiken/pfeilEnde.gif" onClick="javascript:sendRequest(<?php echo $max; ?>);"></td>

      
    Änderst du den HTML-Code dieser Buttons durch AJAX? Wenn nein, ist logisch, was passiert: PHP schreibt die berechneten Werte für $wert einmalig beim ersten Seitenaufruf dort hinein, und das war es dann. PHP läuft schließlich einmalig auf dem Server und erzeugt ein HTML-Ergebnis. Das landet dann im Browser und lässt erst dann das Wirken von Javascript zu.  
      
    Du bist in die klassische Falle gegangen, zu glauben, PHP würde parallel zu Javascript ausgeführt. Das ist falsch.  
      
     - Sven Rautenberg
    
    1. Man sieht wieder mal den Wald vor lauter Bäumen nicht. Habe die aktuell-Variable jetzt als Java-Variable angelegt, und es klappt einwandfrei. Danke, dass du mich auf den richtigen Weg gebracht hast.

      1. hallo,
        "Habe die aktuell-Variable jetzt als Java-Variable angelegt"

        wie hast du das gemacht?

        1. Hallo PHP-Noob,

          | Habe die aktuell-Variable jetzt als Java-Variable angelegt
          wie hast du das gemacht?

          zu dieser Frage mal ganz nebenbei angemerkt, ist ein Konstrukt <element onClick="javascript:sendRequest(var_name);"> auch etwas seltsam. <element onClick="sendRequest(var_name)"> reicht völlig aus.

          Gruß aus Berlin!
          eddi

          --
          Warum ich hier bin? ❤ für lange Leitungen.