php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2004

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 05.07.2004, 16:39  
Gast
 
Beiträge: n/a
Standard Wo ist der Fehler?

Hallo,
also, ich habe ein Login-Script, welches auf Sessions basiert:

intern.php
Code:
<?php
include ("checkuser.php");
?>
<html>
<head>
  <title>Interne Seite</title>
</head>
<body>
  BenutzerId: <?php echo $_SESSION["user_id"]; ?>

  Nickname: <?php echo $_SESSION["user_nickname"]; ?>

  Nachname: <?php echo $_SESSION["user_nachname"]; ?>

  Vorname: <?php echo $_SESSION["user_vorname"]; ?>
  <hr>
  Ausloggen
</body>
</html>
checkuser.php
Code:
 <?php session_start (); ?>
<html>
<head>
  <title>Checkuser</title>
</head>
<body>
<?php
if (!isset ($_SESSION["user_id"]))
{
  header ("Location: formular.php");
}
?> 
</body>
</html>
formular.php
Code:
 <?php session_start (); ?>
<html>
<head>
  <title>Login</title>
</head>

<body>
<?php
if (isset ($_REQUEST["fehler=1"]))
{
  echo "Die Zugangsdaten waren ungültig.";
}
?>
<form action="login.php" method="post">
  Name: <input type="text" name="name" size="20">

  Kennwort: <input type="password" name="pwd" size="20">

  <input type="submit" value="Login">
</form>
</body>
</html>
login.php
Code:
 <?php
session_start ();
?>
<html>
<head>
  <title>Login</title>
</head>
<body>
<?php
// Datenbankverbindung aufbauen
$connectionid = mysql_connect ("turbozoidberg.planet-school.de", "m38**-1", "*****");
if (!mysql_select_db ("m38**-1", $connectionid))
{
  die ("Keine Verbindung zur Datenbank");
}

$sql = "SELECT ".
    "Id, Nickname, Nachname, Vorname ".
  "FROM ".
    "benutzerdaten ".
  "WHERE ".
    "(Nickname like '".$_REQUEST["name"]."') AND ".
    "(Kennwort = '".md5 ($_REQUEST["pwd"])."')";
$result = mysql_query ($sql);

if (mysql_num_rows ($result) > 0)
{
  // Benutzerdaten in ein Array auslesen.
  $data = mysql_fetch_array ($result);

  // Sessionvariablen erstellen und registrieren
  $_SESSION["user_id"] = $data["Id"];
  $_SESSION["user_nickname"] = $data["Nickname"];
  $_SESSION["user_nachname"] = $data["Nachname"];
  $_SESSION["user_vorname"] = $data["Vorname"];

  header ("intern.php");
}
else
{
  header ("formular.php?fehler=1");
}
?> 
</body>
</html>
logout.php
Code:
 <?php
// Wird ausgeführt um mit der Ausgabe des Headers zu warten.
ob_start ();

session_start ();
session_unset ();
session_destroy ();
?>
<html>
<head>
  <title>Logout</title>
</head>
<body>
<?php
header ("Location: formular.php");
ob_end_flush ();
?> 
</body>
</html>
Soweit so gut. Aber es hat 2 Fehler:

1. Beim Login
Wenn man sich einloggt, dann kommt folgende Fehlermeldung:
Zitat:
Warning: Cannot modify header information - headers already sent by (output started at /home/www/kunden/domain.de/intern/login.php:9) in /home/www/kunden/domain.de/intern/login.php on line 37
Allerdings kann man hinterher die Datei "intern.php" aufrufen, und man gilt als "eingeloggt"...

2. Nicht eingeloggt, aber Versuch von Zugriff auf "intern.php"
Ruft man die Datei "intern.php" auf, und ist NICHT eingeloggt, kommt diese Fehlermeldung:
Zitat:
Warning: Cannot modify header information - headers already sent by (output started at /home/www/kunden/domain.de/intern/checkuser.php:7) in /home/www/kunden/domain.de/intern/checkuser.php on line 10
und die seite wird angezeigt (bis auf, dass die daten nicht ausgelsen werden können).

Das Script online könnt ihr euhc hier angucken:
Link rausgenommen

Die Daten:
Nickname: admin
Passwort: admin
 
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 05.07.2004, 16:45  
Clan
Gast
 
Beiträge: n/a
Standard

nen leerzeichen wurde gesendet, bevor session_start initialisiert wurde.
was nicht sein darf

nicht so..
Code:
 <?php 
session_start (); 
?>

wenn dann so..
Code:
<?php 
session_start (); 
?>
 
Alt 05.07.2004, 17:21  
Gast
 
Beiträge: n/a
Standard

Hi ich hab genau den gleichen Fehler..

Und @ Clan .. Das funktioniert trotzdem nicht

bye
 
Alt 05.07.2004, 17:23  
Gast
 
Beiträge: n/a
Standard

dann ahste warscheinlich ne html-ausgabe gehabt, bevor die session gestartet bzw. ne session erstellt wurde.
 
Alt 05.07.2004, 17:35  
Gast
 
Beiträge: n/a
Standard

Danke für die Antwort! Aber daran kanns nicht liegen. Der Fehler war nur beim Einfügen hier ins Forum... Außerdem funzt "intern.php" ja. Nur nihct "checkuser.php" und "login.php"... thx
 
Alt 05.07.2004, 17:52  
Gast
 
Beiträge: n/a
Standard

Zitat:
Zitat von DaNnYy
Danke für die Antwort! Aber daran kanns nicht liegen.
Natürlich liegt es daran, wie Du der Fehlermeldung ja entnehmen kannst.

Fehler:
1. in intern.php wird keine Session gestartet
2. in checkuser wird die Session korrekt gestartet, aber vor header() HTML ausgegeben.
3. da Du keinen Fallback (Client will keinen Keks) vorsiehst, wird sich die Freude an dem Script sicher in Grenzen halten.
4. header('Location: ...') erfordert einen absoluten URL (siehe Beispiel im Handbuch)
5. nach dem Location-header muß ein exit folgen.
6. formular.php wäre fast richtig. Da Du aber auch da keinen Fallback für die Session_id vorsiehst... (s.o.)
7. login.php ist ebenfalls Murks. Auch hier gibts Du HTML aus.
Sowas ist Humbug:
Code:
header ("intern.php");
} 
else 
{ 
  header ("formular.php?fehler=1"); 
}
PHP kann den header nicht wegschicken, da Du schon Content ausgegeben hast, und der Client könnte mit dem Header nix anfangen, weil er falsch ist.
8. logout.php ist ebenfalls Humbug. Ebenfalls wird dort sinnfreies HTML ausgegeben, was keinen interessiert, denn der Client soll ja stattdessen einen anderen URL anfordern.
9. auch hier wieder ein relativer URL in Location.
 
Alt 05.07.2004, 18:28  
Erfahrener Benutzer
 
Registriert seit: 18.09.2003
Beiträge: 13.598
PHP-Kenntnisse:
Fortgeschritten
imported_Ben ist zur Zeit noch ein unbeschriebenes Blatt
Standard

man kann natürlich auch einfach mal in die standardfehlermeldungen schauen und sich das ganze gefrage hier ersparen ..

http://www.dclp-faq.de/ch/ch-errors.html
imported_Ben ist offline  
Alt 05.07.2004, 18:32  
Gast
 
Beiträge: n/a
Standard

Danke für die Antwort! Hab jetzt alles berichtigt...
Nur bei Nr. 7 weiß ich nicht, wie ich das ändern soll

achja: wegen den "keksen": da hab ich schon was gefunden: http://www.dclp-faq.de/q/q-sessions-cookie.html *gg*

@ Ben: Danke für den Link!
 
Alt 05.07.2004, 19:16  
Gast
 
Beiträge: n/a
Standard

Zitat:
Zitat von DaNnYy
Danke für die Antwort! Hab jetzt alles berichtigt...
Nur bei Nr. 7 weiß ich nicht, wie ich das ändern soll
Das HTML löschen, weil Du ja den Client entweder zu formular.php oder zu intern.php schicken willst.
Das muß geändert werden:
Code:
if (mysql_num_rows ($result) > 0) 
{ 
  // Benutzerdaten in ein Array auslesen. 
  $data = mysql_fetch_array ($result); 

  // Sessionvariablen erstellen und registrieren 
  $_SESSION["user_id"] = $data["Id"]; 
  $_SESSION["user_nickname"] = $data["Nickname"]; 
  $_SESSION["user_nachname"] = $data["Nachname"]; 
  $_SESSION["user_vorname"] = $data["Vorname"]; 

  session_write_close();
  header ('Location: http://' . $_SERVER['SERVER_NAME'] . '/intern.php?' . SID); 
} 
else 
{
  session_write_close();
  header ('Location: http://' . $_SERVER['SERVER_NAME'] . '/formular.php?fehler=1&' . SID); 
} 
exit;
# Scriptende!
?>
Die anderen Script sinngemäß anpassen. Beachte, daß Du bei formular.php ebenfalls dann die Session_id übergeben mußt, wenn der Client keinen Keks haben wollte.
 
Alt 05.07.2004, 21:10  
Gast
 
Beiträge: n/a
Standard

Ich weiß, ich nerve, aber ich habe immernohc folgendes Problem:
bei ungültigem Login, wird man zwar zum Loginformular zurückgeleitet, allerdings gibt der Server die Fehlermeldung (Das der Login ungültig ist) nicht aus...

Die login.php sieht jetzt so aus:
Code:
<?php
session_start ();

// Datenbankverbindung aufbauen
$connectionid = mysql_connect ("turbozoidberg.planet-school.de", "m3861-1", "***");
if (!mysql_select_db ("m3861-1", $connectionid))
{
  die ("Keine Verbindung zur Datenbank");
}

$sql = "SELECT ".
    "Id, Nickname, Nachname, Vorname ".
  "FROM ".
    "benutzerdaten ".
  "WHERE ".
    "(Nickname like '".$_REQUEST["name"]."') AND ".
    "(Kennwort = '".md5 ($_REQUEST["pwd"])."')";
$result = mysql_query ($sql);

if (mysql_num_rows ($result) > 0)
{
  // Benutzerdaten in ein Array auslesen.
  $data = mysql_fetch_array ($result);

  // Sessionvariablen erstellen und registrieren
  $_SESSION["user_id"] = $data["Id"];
  $_SESSION["user_nickname"] = $data["Nickname"];
  $_SESSION["user_nachname"] = $data["Nachname"];
  $_SESSION["user_vorname"] = $data["Vorname"];

  session_write_close();
  header ('Location: http://' . $_SERVER['SERVER_NAME'] . '/intern/intern.php?' . SID);
}
else
{
  session_write_close();
  header ('Location: http://' . $_SERVER['SERVER_NAME'] . '/intern/formular.php?fehler=1&' . SID);
}
exit;
# Scriptende!
?>
 
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
bitte hilfe! mysql fehler meldung: basicx PHP Tipps 2008 2 22.07.2008 16:36
mysql fehler meldung: basicx Datenbanken 1 22.07.2008 09:48
[Erledigt] Mysql Syntax Fehler Datenbanken 3 06.07.2006 09:58
[Erledigt] Seite wird nicht angezeigt, untersch. Fehler bei IE/FF/Safar PHP-Fortgeschrittene 19 31.05.2005 14:52
Blöder MySQL Fehler PHP Tipps 2005 3 15.05.2005 03:14
Fehlermeldung - aber kein fehler... Tschuu HTML, Usability und Barrierefreiheit 16 14.03.2005 15:56
finde fehler trotz manual nicht: SELECT lindner Datenbanken 3 13.03.2005 08:39
Wo liegt der fehler?? PHP-Fortgeschrittene 5 22.12.2004 09:54
[Erledigt] mysql fehler PHP Tipps 2004 2 03.11.2004 00:32
Wo ist der Fehler? socke Datenbanken 10 01.11.2004 18:10
Fehler anders ausdrücken PHP Tipps 2004 4 27.10.2004 15:09
Hilfe ich finde den Fehler nicht! PHP Tipps 2004 2 07.10.2004 17:40
array_push nur in begrenzter Anzahl ausführen ? PHP Tipps 2004 2 07.09.2004 09:05
mysql_real_escape_string - Fehler Schaelle Datenbanken 0 03.07.2004 23:32
Paradox, Fehler bei Berechnung in MySQL MrNiceGuy Datenbanken 0 23.06.2004 16:09

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php mysql datenbankverbindung vor body, cannot access protected property block::$mid in /extensions/checkuser/checkuser_body.php, turbozoidberg.planet-school.de datenbank, php session_unset im body, header formular, php session_start html, session_write_close header location, php session_destroy scriptende

Alle Zeitangaben in WEZ +2. Es ist jetzt 03:16 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.