Problem mit den Cookies

deintag85

Erfahrenes Mitglied
Hi,
ich bastele grad an einer Rätselseite. Das Prinzip läuft folgendermaßen. Wenn jemand sich registriert, einloggt dann gibts ne Session mit dem Benutzernamen. Da kann ich dann einfach die Datenbank abfragen bei welchem Rätsel der Benutzer grad ist etc.
Aber das ganze funktioniert nicht wenn man nicht registriert ist, also hab ich mirgedacht ich mach das mit Cookies.

hab also in meiner rätsel.php einfach sowas eingebaut

PHP:
<?
// Include
if(!session_is_registered('user') || $_SESSION['user'] == "") {
     include("include/raetsel_unregistered.php");
}
				
if(session_is_registered('user') || $_SESSION['user'] != "") {
     include("include/raetsel_registered.php");
}
?>

In der Index.php, also wenn ein Besucher zum ersten Mal auf die Seite kommt hab ich eine einfache Abfrage in den Header gebaut.

PHP:
	if(empty($_COOKIE['raetsel']))
	{
		setcookie("raetsel", "1", time()+60*60*24);
	}

Wenn also jemand Neues die Seite besucht, fängt er bei Rätsel eins automatisch an.

Nun gut. Nun habe ich aber das Problem, dass ich in der datei raetsel_unregistered.php
natürlich meine Abfrage habe ob die Lösung richtig oder falsch ist. Wenn die Lösung
richtig ist dann soll er

PHP:
setcookie("raetsel", $id , time()+60*60*24);

wobei $id das nächsthöhere rätsel also alte id +1 darstellen soll.

Es funktioniert dummerweise nicht, aus dem Grund, da das setcookie noch VOR dem Header kommen soll.
Aber wie löse ich das am Besten? Gibts Tipps & Tricks wie ich das gestalten kann, sodass es vor dem Header kommt?
Ich müsste ja meine sämtliche Website völlig umprogrammieren damit zuerst der PHP Code kommt mit den Abfragen und dann erst die Ausgabe der Website komplett im Echo -Format.

Hmm....
 
Ich müsste ja meine sämtliche Website völlig umprogrammieren damit zuerst der PHP Code kommt mit den Abfragen und dann erst die Ausgabe der Website komplett im Echo -Format.

Stimmt, da wirst du wohl nicht drum rum kommen. Wie du selbst schon rausgefunden hast, müssen Cookies noch vor der ersten HTML-Ausgabe gesetzt werden.

Die beste Möglichkeit, dieses Problem zu lösen, ist es, deine PHP-Dateien wie folgt aufzubauen:

PHP:
<?php

  // Abfragen machen und Ausgabetexte vorbereiten:
  if($loesung == 'xyz') {
    setcookie(...);
    $ausgabe = "Deine Lösung ist richtig!";
  } else {
    $ausgabe = "Deine Lösung ist falsch :-(";
  }

?>

<html>
  <head>
    <title>...</title>
  </head>

  <body>

    <h1>Ergebnis:</h1>
    <p><?php echo $ausgabe; ?></p>

  </body>
</html>

Du verarbeitest also erst alle Informationen und tätigst die nötigen Operationen (z.B. Cookie setzen) und gibst dann die Seite (mit dem Heaeder) aus.

Grüße, Frezl
 
Zuletzt bearbeitet:
Gut bis hierhin Danke erstmal,
hab aber jetzt ne wahrscheinlich dumme Frage. ^^

Also ich will dann halt Oben erstmal die PHP Abfrage generieren und alles notwendige in eine Variable speichern was später ausgegeben werden soll.

PHP:
			echo'<h2><a href="#">Frage Nummer '.$raetsel_temp.'</a></h2>';
			
			$abfrage2 = "SELECT * FROM `fua` WHERE id='".$raetsel_temp."'";
			$ergebnis2 = mysql_query($abfrage2);
			$row2 = mysql_fetch_object($ergebnis2);
			
			echo $row2->frage;
								
			echo'<br />';
			echo'<form action="raetsel.php" method="post">';
			echo'<input type="text" name="antwort" /><br /><br />';
			echo'<input type="hidden" name="frage" value="'.$id.'" />';
			echo'<input type="submit" name="sent" value="Abschicken" />';
			echo'</form><br /><br />';

Wie fasse ich denn alle Echo's in eine Variable zusammen damit ich das später ausgeben kann? Ich steh da grad irgendwie auf dem Schlauch mit der Verkettung von Variablen.
 
Wie wär es mit einem Array? Dann kannst du es mittels Schleife nacheinander ausgeben.

Wenn es sich nur um die letzten 6 echos handelt: Da es sich hier um html Code handelt ist Zeilenumbruch doch eh egal, das kann man theoretisch auch alles in einen String packen.
 
Hey deintag95,

String-Variablen verkettet man so:

PHP:
<?php

  $string1 = "Hallo ";
  $string2 = "Welt";
  $string3 = "!"; 
  
  // Mehrere Strings zusammenfassen:
  $ausgabe1 = $string1.$string2.$string3;

  // String an einen anderen String anhängen:
  $ausgabe2 = $string1;
  $ausgabe2 .= $string2;
  $ausgabe2 .= $string3;

  // Der Inhalt der Ausgabe-Variablen ist in beiden Fällen der gleiche.
  echo $ausgabe1."<br>".$ausgabe2;

?>

Grüße, Frezl
 
Zuletzt bearbeitet:
Zurück