Warning: session_start()

Hier werden Probleme rund um das Rechen Captcha behandelt

Moderator: frameguard

Warning: session_start()

Beitragvon propaganders » 09.01.2007, 11:59

Hallo zusammen!

Ich bekomme folgende Fehlermeldung, egal ob ich das Ergebnis der Rechnung richtig od. falsch eingebe. Im Hintergrund wird das Script dann aber richtig verarbeitet: wenn das Ergebnis richtig war, wird der Eintrag ins Gästebuch geschrieben. Wenn das Ergebnis falsch war, wird nicht eingetragen.
Am Code selbst hab ich nichts geändert.

---------------
Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at /home/ftp/sites/server/wintergarten.ac/htdocs/oberkrainerfreunde/gbuchlesen.php:8) in /home/ftp/sites/server/wintergarten.ac/htdocs/oberkrainerfreunde/gbuchlesen.php on line 148
----------------


Hoffe, mir kann jemand helfen!?

glg
propaganders
 
Beiträge: 12
Registriert: 09.01.2007, 11:56

Beitragvon Sebi » 09.01.2007, 14:40

poste mal bitte den code dazu, wahrscheinlich startest du 2x die Session ?
Sebi
 
Beiträge: 44
Registriert: 26.12.2006, 12:05

gbuchlesen.php

Beitragvon propaganders » 09.01.2007, 15:01

<?php
$zaehler = "gbuch.txt";
$fo_gbuch=fopen($zaehler,"r");
$str_gbuch = fread ($fo_gbuch, filesize ($zaehler));

$tagname=date("w");
switch ($tagname) {
case 0:
$tag='Sonntag';
break;

case 1:
$tag='Montag';
break;

case 2:
$tag='Dienstag';
break;

case 3:
$tag='Mittwoch';
break;

case 4:
$tag='Donnerstag';
break;

case 5:
$tag='Freitag';
break;

case 6:
$tag='Samstag';
break;
}

$tag_nummer=date("d");
$mon=date("m");
$year=date("Y");

$datum="$tag, $tag_nummer.$mon.$year";
?>
<body>
<div id="grafik">
<img src="img/maus/edel.gif" width="15" height="15" border="0" alt="">
</div>
<div align="center">
<table width="90%" border="0" cellspacing="0" cellpadding="0">
<tr valign="top" height="40">
<td height="40"><img src="img/ue/gaest.gif" alt="Gaestebuch" height="20" width="108" border="0"></td>
</tr>
<tr>
<td>
<?

if($lesen == 'true') {
echo'<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tr>
<td height="30"></td>
</tr>
<tr>
<td><table border="0" cellspacing="0" cellpadding="0" width="100%">';
include("gbuch.txt");
echo'</table></td></tr>
<tr><td height="30" valign="bottom">
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tr><td width="3%"></td><td width="94%"><hr></td><td width="3%"></td></tr>
<tr><td colspan="3" height="5"></td></tr>
<tr><td width="3%"></td><td width="94%"><a href="gaeste.html" target="inhalt">Eintrag hinzuf&uuml;gen</a></td><td width="3%"></td></tr></table>
</td></tr></table>';
}
else {
if(($name == FALSE) or ($text == False)) {
echo'<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tr>
<td height="30"></td>
</tr>
<tr>
<td><table border="0" cellspacing="0" cellpadding="0" width="100%">
<tr><td width="10%"></td>';
echo'<td width="80%">Fehler!!! Die Felder Name, E-Mail und Text m&uuml;ssen ausgef&uuml;llt werden<hr>
<a href="gaeste.html" target="inhalt">zur&uuml;ck</a></td>';
echo'<td width="10%"></td></tr></table></td></tr></table>';
}
elseif((preg_match('/[<>]/', $name)) or (preg_match('[<>]',$email)) or (preg_match('/[<>]/', $homepage)) or (preg_match('/[<>]/', $text))) {
echo'<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tr>
<td height="30"></td>
</tr>
<tr>
<td><table border="0" cellspacing="0" cellpadding="0" width="100%">
<tr><td width="10%"></td>';
echo'<td width="80%">Fehler!!! Diese Zeichen sind nicht erlaubt<hr>
<a href="gaeste.html" target="inhalt">zur&uuml;ck</a></td>';
echo'<td width="10%"></td></tr></table></td></tr></table>';
}
elseif(!preg_match('/^[.a-zA-Z0-9_-]+@([.a-zA-Z0-9_-]+)\.[a-zA-Z0-9_-]{2,4}$/',$email)) {
echo'<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tr>
<td height="30"></td>
</tr>
<tr>
<td><table border="0" cellspacing="0" cellpadding="0" width="100%">
<tr><td width="10%"></td>';
echo'<td width="80%">Fehler!!! Mit der Email Adresse scheint etwas nicht in Ordnung zu sein<hr>
<a href="gaeste.html" target="inhalt">zur&uuml;ck</a></td>';
echo'<td width="10%"></td></tr></table></td></tr></table>';
}
else {
session_start();
function encrypt($string, $key) {
$result = '';
for($i=0; $i<strlen($string); $i++) {
$char = substr($string, $i, 1);
$keychar = substr($key, ($i % strlen($key))-1, 1);
$char = chr(ord($char)+ord($keychar));
$result.=$char;
}
return base64_encode($result);
}
$sicherheits_eingabe = encrypt($_POST["sicherheitscode"], "ghg836hgh2");
$sicherheits_eingabe = str_replace("=", "", $sicherheits_eingabe);
if($sicherheits_eingabe == $_SESSION['rechen_captcha_spam']){
unset($_SESSION['rechen_captcha_spam']);



$gbuch = fopen($zaehler, "w");
if($gbuch) {
$homepage=preg_replace('/http\:\/\//','',$homepage);
$text=preg_replace('/\n/','<br>',$text);
$ausgabe="<tr><td width=\"10%\"></td><td width=\"80%\" bgcolor=\"#CCCC99\">
<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\" width=\"100%\">
<tr><td width=\"3%\"></td><td colspan=\"2\" colspan=\"2\" width=\"94%\" style=\"text-align:right\">$datum</td><td width=\"3%\"</tr>
<tr><td width=\"3%\"></td><td width=\"47%\"><b>$name<b></td><td width=\"47%\" style=\"text-align:right\"><a href=\"mailto:$email\">$email</a></td><td width=\"3%\"></td></tr>
</table>
</td><td width=\"10%\"></td></tr>
<tr><td width=\"10%\"></td><td width=\"80%\" bgcolor=\"#000000\">
<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\" width=\"100%\">
<tr><td height=\"1\"></td></tr></table>
</td><td width=\"10%\"></td></tr>
<tr><td width=\"10%\"></td><td width=\"80%\" bgcolor=\"#CCCC99\">
<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\" width=\"100%\">
<tr><td width=\"3%\"></td><td width=\"94%\" valign=\"top\">$text</td><td width=\"3%\"></td></tr></table>
</td><td width=\"10%\"></td></tr>
<tr><td width=\"10%\"></td><td width=\"80%\" bgcolor=\"#000000\">
<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\" width=\"100%\">
<tr><td height=\"1\"></td></tr></table>
</td><td width=\"10%\"></td></tr>
<tr><td width=\"10%\"></td><td width=\"80%\" bgcolor=\"#CCCC99\">
<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\" width=\"100%\">
<tr><td width=\"3%\"></td><td width=\"94%\" align=\"right\"><a href=\"http://$homepage\" target=\"_blank\">$homepage</td><td width=\"3%\"></td></tr>
<tr height=\"15\" valign=\"middle\"><td colspan=\"3\"><hr size=\"1\"></td></tr>
</table>
</td><td width=\"10%\"></td></tr>
<tr><td colspan=\"3\" height=\"15\" width=\"80%\"></td></tr>";
fputs($gbuch, stripslashes($ausgabe));
fputs($gbuch, $str_gbuch);
echo'<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tr>
<td height="30"></td>
</tr>
<tr>
<td><table border="0" cellspacing="0" cellpadding="0" width="100%">
<tr><td width="10%"></td>';
echo'<td width="80%">Ihr Eintrag wurde ins G&auml;stebuch geschrieben<hr>';
echo"<a href=\"gaeste.html\" target=\"inhalt\">weiteren Eintrag hinzuf&uuml;gen</a> | <a href=\"gbuchlesen.php?lesen=true\" target=\"inhalt\">Eintr&auml;ge lesen</a></td>";
echo'<td width="10%"></td></tr></table></td></tr></table>';
}
}
}
}
?>
</td>
</tr>
</table>
</div>
propaganders
 
Beiträge: 12
Registriert: 09.01.2007, 11:56

Beitragvon Rob [Admin] » 09.01.2007, 17:28

session_start();

Immer zuoberst in der Datei schreiben.
Rob [Admin]
Site Admin
 
Beiträge: 143
Registriert: 23.12.2006, 12:27

Beitragvon propaganders » 10.01.2007, 09:18

Schönen guten Morgen!

Hatte ich vorher schon mal versucht, dann erscheint aber die selbe Fehlermeldung mit einer anderen Zeilen-Angabe:

--------------------------

Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at /home/ftp/sites/server/wintergarten.ac/htdocs/oberkrainerfreunde/gbuchlesen.php:8) in /home/ftp/sites/server/wintergarten.ac/htdocs/oberkrainerfreunde/gbuchlesen.php on line 40
--------------------------

session_start(); hab ich in dem Fall am Beginn des php-Teiles eingebaut (vor der Variablen $zaehler).

glg Sandra
propaganders
 
Beiträge: 12
Registriert: 09.01.2007, 11:56

Beitragvon Rob [Admin] » 10.01.2007, 09:21

Wird die Gästebuch Datei includet? Falls ja, dann in der index.php zuoberst das session_start(); setzen.
Rob [Admin]
Site Admin
 
Beiträge: 143
Registriert: 23.12.2006, 12:27

Beitragvon propaganders » 10.01.2007, 09:32

Meine Gästebuch ist folgendermaßen aufgebaut:

gaeste.html
Darin befindet sich ein Formular für einen neuen Eintrag ins Gästebuch inkl. img-Tag für das Rechen Captcha. Die Daten werden mittels POST an gbuchlesen.php übergeben.

gbuchlesen.php
Hier werden die Daten verarbeitet u. wenn alles korrekt ist in gbuch.txt eingetragen. Wenn "Gästebuch lesen" gewählt wurde, wird die txt-Datei ausgelesen bzw. angezeigt.

Die Session startet doch erst in gbuchlesen.php od. lieg' ich da jetz völlig falsch?

glg
propaganders
 
Beiträge: 12
Registriert: 09.01.2007, 11:56

Beitragvon Rob [Admin] » 10.01.2007, 09:52

Ja genau, aber du hast in gbuchlesen.php auf der Linie 40 ebenfalls ein session_start(); dies musst du rausnehmen.
Rob [Admin]
Site Admin
 
Beiträge: 143
Registriert: 23.12.2006, 12:27

Beitragvon propaganders » 10.01.2007, 10:44

Ich glaub, ich hab mich da etwas missverständlich ausgedrückt:

Wenn ich den geposteten Quellcode verwende dann erscheint folgende Fehlermeldung:
---------------
Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at /home/ftp/sites/server/wintergarten.ac/htdocs/oberkrainerfreunde/gbuchlesen.php:8) in /home/ftp/sites/server/wintergarten.ac/htdocs/oberkrainerfreunde/gbuchlesen.php on line 149
---------------

Wenn ich session_start(); an den Beginn des php-Teiles stell', dann erscheint folgende Fehlermeldung:
---------------
Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at /home/ftp/sites/server/wintergarten.ac/htdocs/oberkrainerfreunde/gbuchlesen.php:8) in /home/ftp/sites/server/wintergarten.ac/htdocs/oberkrainerfreunde/gbuchlesen.php on line 40
---------------

Also im Prinzip 2 identische Meldung mit unterschiedl. Zeilen-Angabe. Das session_start(); kommt im Skript aber nur 1x vor!

glg
propaganders
 
Beiträge: 12
Registriert: 09.01.2007, 11:56

Beitragvon eagle11 » 04.03.2007, 17:40

Hallo. Falls du das Problem noch nicht gelöst haben solltest, habe ich vielleicht die Lösung. Ich hatte das gleiche Problem und habe aber erst mal gegoogelt. Fand heraus, dass vor dem session_start() absolut nichts stehen darf - wie hier auch schon erwähnt. Also an den Anfang der Datei. Selbst ein Leerfeld kann diese Meldung verursachen. Bei einer HTML Datei mit PHP-Script lässt sich der HTML-Header aber nun mal nicht vermeiden.

Ich habe die session_start() an den Anfang geschrieben und dann den ganzen HTML-Kram in eine echo-Anweisung gepackt und dann ging es.

<?php
session_start()
echo "<HTML>
<BODY>
-----
-------";
function encrypt($string, $key) {
$result = '';
for($i=0; $i<strlen($string); $i++) {
$char = substr($string, $i, 1);
$keychar = substr($key, ($i % strlen($key))-1, 1);
$char = chr(ord($char)+ord($keychar));
$result.=$char;
------ usw.
?>
Ist zwar vielleicht nicht gerade die professionellste Lösung. Aber eine funktionierende Lösung ist besser als gar keine. ;)
eagle11
 
Beiträge: 2
Registriert: 04.03.2007, 17:18
Wohnort: Magdeburg

Beitragvon frameguard » 06.03.2007, 15:34

@Eagle11: Das mit dem echo brauchst gar nicht.

Du beendest php nach den Initialisierungen (session_start(), Variablen belegen, Files öffnen, was auch immer) einfach mit ?>, dann schreibst den HTML-Kram, und danach, wo's mit php weitergeht, machst mit <? einfach weiter. ;)

Das könnte dann, von Deinem Beispiel ausgehend, also so aussehen:

<?php
session_start();
?>
<HTML>
<BODY>
-----
-------
<?
function encrypt($string, $key) {
$result = '';
for($i=0; $i<strlen($string); $i++) {
$char = substr($string, $i, 1);
$keychar = substr($key, ($i % strlen($key))-1, 1);
$char = chr(ord($char)+ord($keychar));
$result.=$char;
------ usw.
?>
frameguard
 
Beiträge: 120
Registriert: 05.03.2007, 19:19
Wohnort: Wien

Beitragvon eagle11 » 06.03.2007, 18:03

... stimmt - das geht natürlich auch. Ich bin manchmal etwas kompliziert mit den Lösungswegen, aber ich finde immer einen und das ist entscheidend ;) - ... trotzdem danke für den Hinweis :)
-------
eagle11
 
Beiträge: 2
Registriert: 04.03.2007, 17:18
Wohnort: Magdeburg

Beitragvon frameguard » 06.03.2007, 18:05

Das kenn ich - bin auch manchmal so. ;) Aber ich bemüh mich... *g*
frameguard
 
Beiträge: 120
Registriert: 05.03.2007, 19:19
Wohnort: Wien


Zurück zu Rechen Captcha

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste

cron