kostenloser Webspace werbefrei: lima-city


Fehler bei session_start()

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    vrw

    vrw hat kostenlosen Webspace.

    Hallo,

    ich taste mich gerade zum ersten Mal an Sessions heran. Doch beim Start der Session wird mir folgendes ausgespuckt, womit ich absolut nichts anfangen kann :( :

    Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at /home/webpages/lima-city/vrw/html/logincheck.php:1)

    Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /home/webpages/lima-city/vrw/html/logincheck.php:1) in /home/webpages/lima-city/vrw/html/logincheck.php on line 26

    Warning: Cannot modify header information - headers already sent by (output started at /home/webpages/lima-city/vrw/html/logincheck.php:1) in /home/webpages/lima-city/vrw/html/logincheck.php on line 35


    Was will mir das sagen? (Hab den Code für die Sessions aus einem schlauen Buch)
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Vor session_start(); darf keinerlei Ausgabe erfolgen. Also sollte dies am besten an erster Stelle im Code stellen.
    Vielleicht postest du mal etwas Beispielcode.
  4. Autor dieses Themas

    vrw

    vrw hat kostenlosen Webspace.

    Hm, wenn das so ist, dann ist ja bereits der Code im Buch fehlerhaft ... weil da wird das erst etwa in der Mitte des ganzen gestartet. Aber zur besseren Anschauung hier mal den kompletten Code:

    <?php
    		  if(isset($_REQUEST['vorname']))
    		  {
    		    $vorname = $_REQUEST['vorname'];
    		  }
    		  if(isset($_REQUEST['nachname']))
    		  {
    		    $nachname = $_REQUEST['nachname'];
    		  }
    		  if(isset($_REQUEST['pw']))
    		  {
    		    $pw = $_REQUEST['pw'];
    		  }
    		  if (!empty($vorname) || !empty($nachname) || !empty($pw))
    		  {
    		    $db=mysql_connect("mysql.lima-city.de","USER***","passwort")
    		      or die("Kein Connect zum Datenbankserver");
    		    mysql_select_db("db****")
    		      or die("Datenbank konnte nicht angesprochen werden.");
    			$anfrage="SELECT id_registered FROM user WHERE vorname='".$vorname."' AND nachname='".$nachname."'
    			  AND pw='".$pw."'";
    			$ergebnis=mysql_query($anfrage);
    			$anz=mysql_num_rows($ergebnis);
    			if ($anz==1)
    			{
    			  session_start();
    			  $session_id=session_id();
    			  $zeile=mysql_fetch_row($ergebnis);
    			  $anfrage="INSERT INTO sessions VALUES('".$session_id."','".$zeile[0]."',now())";
    			  $ergebnis=mysql_query($anfrage);
    			  $text=$vorname." ".$nachname." wacht auf";
    			  $anfrage="INSERT INTO chat VALUES(0,
    			    '".$text."',now())";
    			  $ergebnis=mysql_query($anfrage);
    			  header("Location: frame.php?id=".$session_id);
    			}
    			else
    			{
    			  echo "Bewohnername und/oder Passwort nicht korrekt!<br />";
    			  echo "Bitte erneut einloggen:<br />";
    			  echo "<a href='login.php'>Login</a>";
    			}
    			mysql_close($db);
    		  }
    		  else
    		  {
    		    echo "Du hast keine Angaben get&auml;tigt.<br />";
    			echo "Bitte erneut einloggen:<br />";
    			echo "<a href='login.php'>Login</a>";
    		  }
    		?>
  5. Mach ganz einfach ganz oben

    <?php
    session_start();
    ....




    Und dann den Rest. Sollte funktionieren.
  6. Autor dieses Themas

    vrw

    vrw hat kostenlosen Webspace.

    und trotzdem funktioniert dann dieses "if", wo das session_start() drin ist, ja? oO(sorry, wenn die Frage blöd klingt, aber ist wie gesagt mein erster Versuch damit)
  7. t**k

    Es müsste klappen. Aber eben nur wenn du session_start() nach oben stellst.
  8. Autor dieses Themas

    vrw

    vrw hat kostenlosen Webspace.

    Alles klar, dann probier ich das einfach mal ... wenn nicht, editier ich diesen jetzigen Eintrag noch mal :D

    EDIT: Nein, die Meldung bleibt auch dann die gleiche :(

    Beitrag zuletzt geändert: 26.5.2009 17:35:10 von vrw
  9. Du darfst natürlich dann session_start(); unten nicht nochmal aufführen.
    Einziger Unterschied ist, dass die Session nun auf jeden Fall gestartet wird, egal ob eine Bedinung zutrifft oder nicht.
  10. Autor dieses Themas

    vrw

    vrw hat kostenlosen Webspace.

    Ja, das war mir klar, dass es dann nicht doppelt sein soll ;)
  11. Notfalls gehts auch mit ob_start()


    php.net hilft weiter.
  12. Autor dieses Themas

    vrw

    vrw hat kostenlosen Webspace.

    Ich glaube irgendwie gar nicht mal, dass es an dieser einen funktion liegt, sondern an irgendetwas anderes im Script ... aber da ich mich damit überhaupt nicht auskenne, hab ich keine Ahnung, was ... vielleicht wieder nur ein Zeichen vergessen, was ich auch nach mehrmaligem Überprüfen nicht finde oder so ...
  13. Immer den Quellcode posten :wink:
    Vielleicht mal den, der ganzen Seite. Inklusive HTML.


    EDIT:
    Ich hab mal den Code von oben ganz alleine bei mir auf dem Webspace geladen. Geht ohne Fehlermeldung. Um das PHP-Skript muss also noch irgendwas herum sein. Und wenn es ein Leerzeichen ist.

    http://karpfen.lima-city.de/session.php

    Beitrag zuletzt geändert: 26.5.2009 18:32:17 von karpfen
  14. Autor dieses Themas

    vrw

    vrw hat kostenlosen Webspace.

    öhm, eigentlich nicht ... ich hab die komplette seite kopiert und hier eingefügt o.O
  15. Stell sicher dass <?php session_start();

    ganz oben steht und keine irgendwelche Zeichen vor dem <? stehen... zb Leerzeichen oder so...


    ansonsten dürfte es mit session_start kein problem geben

    sollte es immer noch nicht funktionieren kannst du es ja mit Cookie machen... Cookie finde ich sogar viel besser als Session... Aber deine Entscheidung ^^
  16. Autor dieses Themas

    vrw

    vrw hat kostenlosen Webspace.

    Ahhh, da hatte sich tatsächlich ein leerzeichen eingeschlichen, ok, jetzt geht es.

    Aber was mich wundert ist jetzt nur noch, warum mein schlaues buch dieses start-zeug in die mitte des scripts gepostet hat anstatt ganz oben, sprich nur wenn das if zutrifft, soll diese gestartet werden.
  17. Naja - die Abfragen über dem session_start() dienen ja anscheinend dazu, rauszufinden, ob der Benutzer existiert. Wenn man nur für existierende Benutzer eine Session erzeugen will, steht der Befehl genau an der richtigen Stelle.

    Kam vielleicht bisher nicht ganz richtig rüber: Vor dem session_start() darf nur keine Ausgabe an den Browser erfolgen - PHP-Code darf davor stehen, soviel will ;)
  18. Da hat tavern völlig recht, ich hab das auch noch mal mit dem ursprünglichen Code ausprobiert. Hat auch funktioniert. Kannst das also auch so verwenden, wie in deinem Buch.
  19. Das liegt daran, dass es dann immernoch funktionieren würde. Wenn ich den Code richtig überfllogen habe, wird von dem session_start nichts ausgegeben. Und das ist das einzige was zählt. Das session_start kann auch in der 10.000 Codezeile stehen, wenn vorher keine Ausgabe geschah. Deswegen gibt man im Code normalerweise auch nie etwas aus, sondern hängt es an eine Variable (Bsp: $out .= "Test") um es später auszugeben.
  20. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!