PHP Login Skript fehler

dermatu

Captain
Registriert
Nov. 2011
Beiträge
3.764
Ich bin gerade dabei mir ein php loginskript zu basteln und hab mich hier von diesem youtube video inspirieren lassen.

http://www.youtube.com/watch?v=5XpBzLVHkPY

Bisher hab ich 2 Dateien:

Datei login.php
PHP:
<?php
if (isset($_REQUEST['attempt']))
	{
		$databaselink = mysql_connect('xyz','xyz','xyz') or die('Cant connect to database');
		mysql_select_db('xyz');
	
		$username = mysql_real_escape_string($_POST['username']);
		$password = sha1(mysql_real_escape_string($_POST['password']));
	
		$query = mysql_query("SELECT username FROM poker_user WHERE username = '$username' AND password = '$password' ")or die(mysql_error());
		
		$userfound = mysql_num_rows($query);
		
		if ($userfound > 0)
			{
				//login
				$queryinhalt = mysql_fetch_array($query);
				session_start();
				$_SESSION['username'] = $queryinhalt[0];
				header("Location: start.php");
			}
		else
			{
				//login fail
			}
	}
?>
<div id="logindiv">
	<form method="post" action="login.php?attempt">
		Benutzername <input type="text" name="username"><br>
		Passwort <input type="password" name="password"><br>
		<input type="submit">
	</form>
</div>

und die Datei start.php

PHP:
<?php
	session_start();
	
	if (!isset($_SESSION['username']))
	{
		echo ('No $_Session set');
	}
	else
	{
		echo ('$_Session Set');
	}
?>

Fehlermeldung lautet nachdem dem eingeben der Zugangsdaten:

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at start.php:1) in start.php on line 2
$_Session Set
 
Lösch das session_start(); aus start.php und probier es noch mal.
Und wie soll er dann $_SESSION[] abfragen..? :)

Guck mal, ob Du irgendwo Leerzeichen stehen hast, die nicht dort hin gehören.
 
Fortatus schrieb:

Domi83 schrieb:
Und wie soll er dann $_SESSION[] abfragen..? :)

Guck mal, ob Du irgendwo Leerzeichen stehen hast, die nicht dort hin gehören.

Ich hab jetzt nochmal meinen Quelltext durchgeschaut und nix dergleichen gefunden.
Dinge wie einrücken oder mal eine Leerzeile zwischen zwei Befehlen sollte doch eigentlich nichts ausmachen, oder ?
Ergänzung ()

Ich hab in der start.php jetzt mal den unteren part auskommentiert.
PHP:
<?php
	session_start();
	echo ($_SESSION['username']);	
	
	/*if(!isset($_SESSION['username']))
	{
		echo ('No $_Session set');
	}
	else
	{
		echo ('$_Session Set');
	}*/
?>

Den befehl
PHP:
echo ($_SESSION['username']);
scheint er trotz der Fehlermeldung auszuführen was ja bedeutet das die Sessioninformationen vorhanden sind, oder ?

Wenn ich jetzt das
PHP:
session_start();
auskommentiere wird mir gar nichts mehr angezeigt.

Fehlermeldung ist

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at start.php:1) in start.php on line 2
matu

Den Part: function.session-start kann ich anklicken und bekomme dann:
Not Found

The requested URL /.../.../function.session-start was not found on this server.
 
Zuletzt bearbeitet:
Hast du dran gedacht, dass session_start() quasi die allererste Zeile des gesamten Scripts sein muss? Vor dem Start einer Session darf GAR NICHTS an den Browser geschickt werden, kein einziges Zeichen.

Im Zweifel: Deine .php wurde als UTF8 mit BOM gespeichert und sendet jetzt, bevor session_start() kommt, ein hirnloses Steuerzeichen. Womit arbeitest du?
 
Ich nutz als Editor Expression Web 4. Aber so wie ich das oben gepostet habe ist das genau das was in der Datei steht. Da sollten also keine Steuerzeichen sein soweit ich das verstehe.

das session_start(); hab ich jetzt auch in der Datei login.php gleich in die erste Zeile hinter das <?php gesetzt. Geändert hat sich allerdings nichts.
 
Wenn du die Datei zufälligerweise mit BOM gespeichert hast, dann wirst du da nichts "sehen" im Editor. Da hilft nur mal genauer nachzugucken, was du für einen Dateimodus hast.
Versuchs mal mit Notepad++, das hat ne recht vernünftige Anzeige dafür, in welchem Modus deine Datei ist.
 
bau mal ein session_cache_limiter('none'); vor dein session_start oder mach outputbuffering an, das erste session_start sendet normalerweise schon Header, deshalb nörgelt das zweite wahrscheinlich rum.
 
Tippe auch auf das BOM-Problem. Expression Web nutzt per default UTF8 mit BOM, wie es eigentlich auch gut ist.
Du kannst das in Expression Web aber umstellen (rechtsklick auf Datei/Codierung..), beispielsweise auf "US/Westeuropäisch (ISO)". Wenn du jedoch bei UTF8 bleiben möchtest, dann musst du mal schauen, ob man in dem Menü auch das BOM raushauen kann.
 
Zuletzt bearbeitet:
carom schrieb:
Expression Web nutzt per default UTF8 mit BOM, wie es eigentlich auch gut ist.
Wann bitte ist BOM denn gut? Es löst bei Unix Shell Scripten, die eine Shebang erwarten Fehler aus. Es versaut PHP-Scripte. Es zeigt sogar bei purem HTML teilweise Grütze an und es versaut stellenweise JS oder CSS...

Arbeitet einfach mit Notepad++, das hat nicht solche hirnlosen Standards wie aktives BOM.
 
das mit dem header ist etwas komisch. aber man kann in php keinen header (also automatisches switchen auf eine neue seite) setzten, wenn es bereits einen header gibt.

dafür setzte ich am start der datei ein:

PHP:
ob_start();
und am ende ein
PHP:
ob_end_flush();
damit kann man den header mehrfach setzen/nutzen
 
Kann man... aber warum sollte man?
Außerdem würde auch das nicht funktionieren, wenn die Datei selbst defekt ist, weil sie mit BOM gespeichert wurde, denn dann würde eben dieses BOM bereits vor ob_start() übertragen.
 
ist expression web nicht irgendwie was von microsoft? ist doch sowas wie frontpage früher oder nicht? wie kommt man darauf damit php skripte zu schreiben? wenn dir notepad++ oder ein anderer einfacher editor mit syntaxhighlightning nicht reicht dann guck dir netbeans in der php edition oder apanta studio an.. sind mächtige ides für webentwicklung und völlig kostenlos.. microsoft sachen halten sich selten an irgendwelche webstandards was man ja auch am ie sehen kann..
 
Es ist wohl schon etwas besser als Frontpage, aber antun würd ich mir den Micromurks sicher trotzdem nicht.
 
klomann83 schrieb:
ist expression web nicht irgendwie was von microsoft? [...] microsoft sachen halten sich selten an irgendwelche webstandards was man ja auch am ie sehen kann..

Daaron schrieb:
[...] aber antun würd ich mir den Micromurks sicher trotzdem nicht.

Na da sprechen ja zwei Experten.
Ich nutze Expression Web auch nicht, aber nicht weil es schlecht wäre und schon gar nicht wegen "Begründungen" wie euren. Im Bereich Development/IDE hat MS seit Jahren ein ziemlich starkes Lineup am Start, mehr als nur das Visual Studio. Micromurks.. ist klar..

Um noch etwas zum Thema beizutragen: das BOM lässt sich in Expression Web schon lange nach belieben setzen, nur in Version 1 ging das nicht.
 
Du kannst ja mal versuchen, in jeglicher MS-Software anständig plattformunabhängig zu arbeiten. Du wirst kläglich scheitern. Da nehm ich doch lieber freie IDE.
 
Musste lange überlegen, ob man bei dem Argument irgendwo Relevanz anbringen kann, aber bin kläglich gescheitert. Kannst du das bitte etwas ausführen?
 
geht garnicht so um platformunabhängegig.. obwohl der großteil der webanwenungen im endefekt auf linux system läuft.. wenn dieses expression web auch so ein wysiwyg ding wie frontpage ist dann klickt man da doch seine html sachen irgendwie zusammen nach irgendwelchen microsoft standards die von sonstigen standards abweichen.. da kann doch nur murks bei entsetehen.. außerdem kostet das microsoft ding doch bestimmt ne gute stange geld.. wieso also geld bezahlen wenn es bessere kostenlose alternativen gibt.. die nicht den code verdrecken
 
Du hast da nen kleinen Exploit drin...

Tipp: Ich mach dein $username => "'foo or sleep(500)'".
 
Zurück
Oben