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

PHP Session Variable in Javascript nutzen

Spaulding

New member
Hallo zusammen,

ich hoffe ich bin mit meiner Frage im richtigen Forum. Die Suchfunktion hat mir bei meinem Problem leider nichts geholfen.

Es geht um folgendes:
Mit PHP messe durch Microtime die Zeit eines Start- und eines Endpunkts. Diese werden beim Drücken eines entsprechenden Buttons gespeichert. Beim Ende werden diese zusammengerechnet und in der Session Variable "result" gespeichert, sodass ich die Zeit des "Spiels" in Millisekunden des jeweiligen Nutzer herausfinde. Dann wird per Javascript eine Fancybox aufgerufen, wo mit Text das erfolgreiche Ende des "Spiels" angekündigt wird. Hierbei soll auch die Session Variable "result" angezeigt werden. Die Nutzer sollen ja sehen, wie schnell sie waren.

Mein Javascript-Teil:
Code:
function success() {
var result='<?php echo $_SESSION["result"];?>';
var text_header = '<div id="exit"><p class="message success" id="success">Ihre Daten wurden übermittelt.</p>';
var text_text = '<p>Vielen Dank für Ihre Teilnahme. Weiterer Text....<input type="submit" name="exit" class="button" value="Weiter zur Homepage"></p></div>';

	jQuery(document).ready(function() {
		$.fancybox(
			
			text_header + result+text_text,
			{
    			'autoDimensions'	: false,
				'width'         	: 350,
				'height'        	: 'auto',
				'transitionIn'		: 'none',
				'transitionOut'		: 'none'
			}
		);
	});
}


Der PHP-Teil:
PHP:
if(isset($_POST["end"])) {
    if (!$newpart=fopen("results.csv","a")) {
   	echo "<script type='text/javascript'>
      		document.getElementById('errorRights').style.display = 'block';
		</script>";
   	}
   	
   	else {
   		$_SESSION["timestamp_end"] = date("d.m.Y - H:i:s");
		$_SESSION["end"] = microtime(true)*1000;
   		$_SESSION["result"] = round($_SESSION["end"]-$_SESSION["start"]);
   		fputs($newpart,utf8_decode($_SESSION["address"]).";".utf8_decode($_SESSION["fullname"]).";".utf8_decode($_SESSION["email"]).";".utf8_decode($_SESSION["firm"]).";".utf8_decode($_SESSION["street"]).";".utf8_decode($_SESSION["city"]).";"."START-ZEIT:".";".utf8_decode($_SESSION["start"]).";"."END-ZEIT:".";".utf8_decode($_SESSION["end"]).";".$_SESSION["timestamp_start"].";".$_SESSION["timestamp_end"].";".$_SESSION["result"].";\n");
   		 echo '<script type="text/javascript">
      			success();
      		
      	        </script>';
		fclose($newpart);
   	}
}

Das Problem hierbei: Schon beim Aufrufen der Seite erhalte ich den Fehler "SyntaxError: unterminated string literal" aus. Beim Klick auf den Button "Spiel beenden (name="end") sagt mir Javascript die Funktion success() wäre nicht definiert. Klicke ich nochmal auf den Button funktioniert alles tadellos.

Ich persönlich nehme an, dass die Funktion aufgerufen wird, bevor PHP die Session Variable "result" beschreiben kann. Die Unindexierte Variable kann Javascript nicht lesen und gibt mit den Error Unterminated String literal aus. Aber ich bin mir nicht sicher. Ich habe bisher keine Lösung finden können. Vielleicht hat einer von euch eine Idee?

Ich hoffe ich habe mich verständlich ausgedrückt. Wenn etwas nicht klar sein soll und etwas noch fehlt, bitte Bescheid sagen :)


Vielen Dank schonmal im Vorraus!
 
Zuletzt bearbeitet:
Hallo,

was meinst du mit "wie er im Browser ankommt"?
Alles was ich an JS nutze, habe ich oben gepostet. Worüber findet ich raus, was im Browser ankommt? Es werden mir ja lediglich Fehlermeldungen produziert..

EDIT:
Oder meinst du das:

Code:
<script type = 'text/javascript'>

function success() {
	var result='<br />
<b>Notice</b>:  Undefined index: result in <b>/Applications/XAMPP/xamppfiles/htdocs/Osteraktion/StartFeature.php</b> on line <b>191</b><br />
';
	var text_header = '<div id="exit"><p class="message success" id="success">Ihre Daten wurden übermittelt.</p>';
	var text_text = '<p><form method="post"><input type="submit" class="button" value="Ciao" name="bye"></form>Vielen Dank für Ihre Teilnahme. Ihre Meinung hilft uns, unsere Leistungen und unsere Produkte weiter zu verbessern. Das von Ihnen gewünschte Präsent wird Ihnen mit Abschluss unserer Kundenbefragung Ende Februar zugesandt.<br><br><a href="http://www.arago-consulting.de"><input type="submit" name="exit" class="button" value="Weiter zur arago Consulting Homepage"></a></p><p class="exit-social"><a href="http://www.arago-consulting.de" target="_blank">ÜBER UNS</a></p><p class="exit-social"><a href="http://www.facebook.com/aragoGmbH" target="_blank"><img src="00_gfx/assets/facebook.png" style="height:20px;" alt="facebook"/></a></p><p class="exit-social"><a href="http://www.twitter.com/arago_GmbH" target="_blank"><img src="00_gfx/assets/twitter.png" style="height:20px;" alt="twitter"/></a></p><p class="exit-social"><a href="https://plus.google.com/+Arago-ConsultingDe/posts" target="_blank"><img src="00_gfx/assets/gplus.png" alt="Google+" style="height:20px;"/></a></p><p class="exit-social"><a href="http://www.wissens-wert.net" target="_blank"><img src="00_gfx/assets/wissens-wert.png" alt="Wissens-Wert" style="height:20px;"/></a></p></div>';

	jQuery(document).ready(function() {
		$.fancybox(
			
			text_header + result+text_text,
			{
    			'autoDimensions'	: false,
				'width'         	: 350,
				'height'        	: 'auto',
				'transitionIn'		: 'none',
				'transitionOut'		: 'none'
			}
		);
	});
}



</script>
 
Zuletzt bearbeitet:
Meinst du das hier:

Code:
<script type = 'text/javascript'>

function success() {
	var result='<br />
<b>Notice</b>:  Undefined index: result in <b>/Applications/XAMPP/xamppfiles/htdocs/Osteraktion/StartFeature.php</b> on line <b>191</b><br />
';
	var text_header = '<div id="exit"><p class="message success" id="success">Ihre Daten wurden übermittelt.</p>';
	var text_text = '<p>Vielen Dank für Ihre Teilnahme. <input type="submit" name="exit" class="button" value="Weiter zur Homepage"></a></p></div>';

	jQuery(document).ready(function() {
		$.fancybox(
			
			text_header + result+text_text,
			{
    			'autoDimensions'	: false,
				'width'         	: 350,
				'height'        	: 'auto',
				'transitionIn'		: 'none',
				'transitionOut'		: 'none'
			}
		);
	});
}



</script>

(Sollte ich jetzt doppelt post, tuts mir leid: Meine eben geschriebene Antwort wird mir nicht angezeigt, obwohl im Forum 2 Antworten steht)

EDIT:
Wie ich mir dachte: Da steht der undefined Index. Aber eigentlich wird beim Button ja die Seite neugeladen und PHP beschreibt die Variable auch. Doch wie mach ich, dass Javascript die Variable in der richtigen Reihenfolge beschreibt?
 
Zuletzt bearbeitet:
Jetzt musst duch erstmal schauen, welche Zeit genau genommen werden soll. Zwischen Button und Scriptstart auf dem Server liegen ja etliche Millesekunden.
 
Mich beschleicht das Gefühl, dass dir der Unterschied zwischen cleintseitiger und serverseitiger Programmierung nicht ganz klar ist. Mach' dir klar, dass PHP nur auf dem Server ausgeführt wird, dort das HTML (ja, das JS ist Teil des HTMLs) als String erzeugt und dieses an den Browser schickt.
Der Browser parst dann das HTML und führt das eingebettete JS aus, sieht aber nichts vom PHP.
 
Hm, PHP schreibt den Fehler doch direkt rein: "Undefined index: result". Ein klarer Fall von fehlender Fehlerbehandlung.
 
Zurück
Oben