PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : PHP Script erzeugt leere weiße Seite im Internet Explorer


Auf der Mauer
06.08.2009, 18:50:14
Hallo,

ich habe ein Problem mit meinem Loginsystem. Im neuen Firefox (3.5) funktioniert alles wie es soll nur eben im IE 6 nicht. Wenn ich auf der Loginseite testweise einem Benutzernamen und ein Passwort eingebe und auf anmelden klicke kommt eine leere weiße Seite mit dergleichen URL. (login.php). Bei einem Refresh wird ordnungsgemäß die logincheck.php aufgerufen, durchlaufen und man wird zur memberbereich.php bzw. fehler.php weitergeleitet. Letztere natürlich nur wenn die Daten falsch waren. Es funktioniert also auch im IE allerdings nur nach einem Refresh der Seite. Jetzt konnte ich den Fehler im Skript leider nicht ausfindig machen der dafür verantwortlich ist. Eine Möglichkeit wäre einen automatischen Refresh einzubauen.

Hier sind alle dafür zuständigen php Dateien:

LOGIN.PHP

Sie besteht nur aus HTML. 2 Eingabefelder für Name und Passwort. Das Javascript überprüft vor dem Absenden ob die Felder ausgefüllt wurden.


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>TESTSEITE - LOGIN</title>
<style type="text/css">
<!--
<h4> { color:#999999; }
#headline { font:small-caps 70% Verdana; }
#normaltext { font:small-caps 90% Verdana; }
a:link { color:#999999; text-decoration:none; }
a:visited { color:#999999; text-decoration:none; }
a:hover { color:#333333; text-decoration:none; }
a:active { color:#999999; text-decoration:none; }
#Aussentabelle { width:685px; margin-left:145px; }
p { font-family:Verdana,Arial,serif;font-size:11px; }
#p2 { font-family:Verdana,Arial,serif;font-size:11px;color:333333; }
#letterbreite { font-family:Verdana,Arial,serif;font-size:10px;letter-spacing:0.0em;color:CC6600; }
div { border-width:1px; border-color:#787878; border-style:dashed; padding:10px; }
-->
</style>
<script language="JavaScript">
function chkFormular()
{
if(document.LOGIN.Pseudonym.value == "")
{
alert("Bitte gib dein Pseudonym ein!");
document.LOGIN.Pseudonym.focus();
return false;
}
if(document.LOGIN.Passwort.value == "")
{
alert("Bitte gib dein Passwort in das Feld ein!");
document.LOGIN.Passwort.focus();
return false;
}
}
</script>
</head>
<body background="background.jpg">
<table id="Aussentabelle" border="0"><td style="padding:20px">
<table border="0" bgcolor='#FFFFFF' cellspacing='0' cellpadding='0' width='650px'><td><a href="http://startseite.php"><img src='Logo3.gif' border='0'></a></td><td bgcolor='#EAEAEA' align="center"> <p id="p2"><b>SCHRITT 4</b></p></td></table>
<br><p style="font-family:Verdana,Arial,serif; font-size:13px; color:#CC6600;"><b>BENUTZER - LOGIN</b></p><br>
<p><b>BITTE GIB DEIN PSEUDONYM UND DEIN PASSWORT IN DIE EINGABEFELDER EIN.</b><br> (Achte dabei auf Groß,- u. Kleinschreibung)</p><br>
<form name="LOGIN" onSubmit="return chkFormular()" method="post" action="logincheck.php">
<div><table border="0" cellspacing='3'><td><p id="letterbreite"><b>PSEUDONYM</b></p></td><td><p id="letterbreite"><b>PASSWORT</b></p></td>
<tr><td><input name="Pseudonym" type="text"></td><td><input name="Passwort" type="password"></td><td><input type="submit" name="Submit" value="Anmelden"></td></tr>
</table></div>
</form>
<br><br><br><br><hr style="border:none; border-top: 1px dotted #999999; background-color: #FFFFFF;height: 1px;">
<p>© 2009 BY <a href="http://xxx.net"><b>xxx</b></a> - ALL RIGHTS RESERVED - <a href="http://xxx.net/html/impressum.html"><b>IMPRESSUM</b></a></p>
</td></table>
</body>
</html>


LOGINCHECK.PHP

Hier werden die Formulareingaben auf Richtigkeit überprüft. Ist alles in Ordnung wird die Session gestartet und man wird zum Memberbereich weitergeleitet. War Name oder Passwort falsch dann gibt es die Fehler.php


<?php
ob_start();
error_reporting (E_ALL ^ E_NOTICE);
// Verbindung zur Datenbank herstellen
include 'connect.php';

//Formulareingaben in Variabeln speichern
$Pseudonym = $_POST["Pseudonym"];
$Passwort = $_POST["Passwort"];

//Abfrage der Eingaben
$abfrage = "SELECT Pseudonym, Passwort FROM table WHERE Pseudonym = '$Pseudonym' AND Passwort = '$Passwort' LIMIT 1";
$ergebnis = mysql_query($abfrage);
while($row = mysql_fetch_object($ergebnis))
{
//$Code32 = $row->Code32;
}
if(mysql_num_rows($ergebnis))
{
session_start();
$_SESSION['Passwort'] = $Passwort;
$_SESSION['random_key'] = strtotime(date('Y-m-d H:i:s'));
$SESSID = $_SESSION['random_key'];
$_SESSION['Pseudonym'] = $Pseudonym;
header("Location: http://xxx.net/memberbereich.php?Pseudonym=$Pseudonym&SESSID=$SESSID");
}
else
{
header("Location: http://xxx.net/fehler2.php");
}
ob_end_flush();
?>


MEMBERBEREICH.PHP

Hier wird man mit seinem Namen begrüßt und findet seine hochgeladenen Bilder sortiert nach Datum vor. Es gibt eine Blätterfunktion. Hier kann man sich auch ausloggen.


<?php
session_start();
$Pseudonym = $_GET['Pseudonym'];
$SESSID = $_GET['SESSID'];
$Passwort = $_SESSION['Passwort'];

// Wenn $_SESSION['Passwort'] gesetzt ist und wenn $_SESSION['Passwort'] gleich $Passwort ist, dann ist man im gesicherten Bereich
if(isset($_SESSION['Passwort']) && $_SESSION['Passwort'] == $Passwort) {

// Andernfalls wird eine Meldung ausgegeben, dass man nicht eingeloggt ist
} else {
header("Location: http://xxx.net/fehler3.php");
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=windows-1250">
<meta name="generator" content="PSPad editor, www.pspad.com">
<title>xxx </title>

<style type="text/css">
<!--
<h4> { color:#999999; }
#headline { font:small-caps 70% Verdana; }
#normaltext { font:small-caps 90% Verdana; }
a:link { color:#999999; text-decoration:none; }
a:visited { color:#999999; text-decoration:none; }
a:hover { color:#333333; text-decoration:none; }
a:active { color:#999999; text-decoration:none; }
#Aussentabelle { width:685px; margin-left:145px; }
p { font-family:Verdana,Arial,serif;font-size:11px; }
#letterbreite { font-family:Verdana,Arial,serif;font-size:12px;letter-spacing:0.3em;color:CC6600; }
div { border-width:1px; border-color:#787878; border-style:dashed; padding:0px; }
-->
</style>

</head>

<body background="background.jpg">
<table id="Aussentabelle" border="0"><td style="padding:20px">
<table border="0" bordercolor='#FFFFFF' bgcolor='#EAEAEA' cellspacing='0' cellpadding='7' width='650px' rules='rows'>
<td><p><b>HALLO <?php echo "$Pseudonym" ;?></b><br><br>Willkommen in deinem privaten Bereich</p></td><td><?php echo "<a href='logout.php?SESSID=$SESSID'><p>Logout</p></a>"?></td></table>

<br><table border='1' bordercolor='#FFFFFF' bgcolor='#EAEAEA' cellspacing='0' cellpadding='15' rules='all' width='650px'"
style="font-family:Verdana, Arial, sans-serif; font-size:9px">
<tr>

<?php
$seite = $_GET["seite"]; //Abfrage auf welcher Seite man ist

//Wenn man keine Seite angegeben hat, ist man automatisch auf Seite 1
if(!isset($seite))
{
$seite = 1;
}
//Verbindung zu Datenbank aufbauen

include 'connect.php';

$abfrage = "SELECT Bilderlink, Thumb, Beschreibung FROM table WHERE Copyright = '$Pseudonym'";
$ergebnis = mysql_query($abfrage);
if(mysql_errno()) echo mysql_error();
$num_rows = mysql_num_rows($ergebnis);

echo " <p style=\"color:#000000;font-size:11px;font-family:verdana,Arial,serif;\"> <b>DU HAST BISHER (".$num_rows.") BILDER HOCHGELADEN</b></p><br>";
//Einträge pro Seite: Hier 15 pro Seite
$eintraege_pro_seite = 4;

//Ausrechen welche Spalte man zuerst ausgeben muss:

$start = $seite * $eintraege_pro_seite - $eintraege_pro_seite;

//Tabelle Abfragen
//Tabelle hei&szlig;t hier einfach: Tabelle
$abfrage = "SELECT Bilderlink, Thumb, Beschreibung FROM table WHERE Copyright = '$Pseudonym' ORDER BY Erstellt DESC LIMIT $start,

$eintraege_pro_seite";
$ergebnis = mysql_query($abfrage);
if(mysql_errno()) echo mysql_error();
while($row = mysql_fetch_object($ergebnis))
{
echo "<td><a href= '$row->Bilderlink' target='pic_haupt'><img src='$row->Thumb' title='$row->Beschreibung' width=126 height=126 border=0></a><br><br><input type='checkbox' name='delete'> LÖSCHEN<br></td>";

if ($i % 4 == 3) echo "</tr><tr>";
$i++;
}
?>
</table>

<?php
//Jetzt kommt das "Inhaltsverzeichnis",sprich dort steht Seite: 1 2
//Wieviele Einträge gibt es überhaupt
/*Wichtig! Hier muss die gleiche Abfrage sein, wie bei der Ausgabe der Daten also der gleiche Text wie in der Variable $abfrage, blo&szlig; das hier das LIMIT fehlt - Sonst funktioniert die Blätterfunktion nicht richtig, und hier kann nur 1 Feld abgefragt werden, also id*/

$result = mysql_query("SELECT Bilderlink, Thumb, Beschreibung FROM table WHERE Copyright = '$Pseudonym' ORDER BY Erstellt DESC");
$menge = mysql_num_rows($result);

//Errechnen wieviele Seiten es geben wird
$wieviel_seiten = $menge / $eintraege_pro_seite;

//Ausgabe der Seitenlinks:

echo "<br><p style='color:#000000;font-size:10px;font-family:verdana,Arial, serif'> <b>Seite:</b>";

//Ausgabe der Links zu den Seiten
for($a=0; $a < $wieviel_seiten; $a++)
{
$b = $a + 1;

//Wenn User sich auf dieser Seite befindet, keinen Link ausgeben
if($seite == $b)
{
echo "<b> $b </b>";
}
//Auf dieser Seite ist der User nicht, also Link ausgeben
else
{
echo "<a href=\"?Pseudonym=$Pseudonym&SESSID=$SESSID&seite=$b\"> $b </a>";
}
}
echo"</p>";
?>

<br><br><br><hr style="border:none; border-top: 1px dotted #999999; background-color: #FFFFFF;height: 1px;">
<p>© 2009 BY <a href="http://xxx.net"><b>STARTSEITE</b></a> - ALL RIGHTS RESERVED - <a href="http://xxx.net/html/impressum.html"><b>IMPRESSUM</b></a></p><br><br>
</td></table>
</body>
</html>


Ich bin für jeden Tip dankbar

Gruß
René

Auf der Mauer
06.08.2009, 19:53:06
Ich habe eine nicht mehr benötigte Passage aus dem Quelltext in der memberbereich.php entfernt, jetzt funktioniert der Login auch auf anhieb im Internet Explorer. Da war wohl irgendeine Wegfahrsperre in der Weiterleitung eingebaut. Das Problem der weißen Seite besteht jetzt nicht mehr.

Eine Frage habe ich allerdings noch zum Logout in der memberbereich.php , da ja jetzt alle benötigten Dateien schon in diesem Thread sind. Ich habe mich Testweise mal gleichzeitig mit unterschiedlichen Benutzeraccounts angemeldet. Das funktioniert auch ganz gut. Es werden nach dem erfolgreichen einloggen jedem Benutzer automatische Session Ids zugewiesen und auch in der memberbereich.php werden die jeweiligen Informationen/Bilder des Benutzers angezeigt. Das Problem ist aber das wenn ich den einen Benutzer über die logout.php abmelde auch der andere Benutzer seine Rechte an der Sitzung verliert. Verstehe nicht warum das so ist da es sich doch um 2 Sitzungen mit zwei unterschiedlichen Sitzungs ID's handelt.

Hier ist noch die LOGOUT.PHP


<?php
// Die Session wieder starten
session_start();
$SESSID = $_GET['SESSID'];
// Und die Session beenden
session_destroy();

// Weiterleitung zum Login-Formular (oder eine beliebigen anderen Datei)
header('Location: http://xxx.net/html/startseite.php');
?>


Gruß
René

feuervogel
06.08.2009, 20:09:38
also grundsätzlich sind da einige fehler im html, und die session-daten dürften nicht geschrieben werden: http://mrfoo.de/archiv/23-Header-Location-und-Sessions-Variablen-ein-PHP-Problem.html

Auf der Mauer
06.08.2009, 21:04:37
Hallo Feuervogel,

doch das mit den Sessions klappt ziemlich gut, nur beim ausloggen gibt es ein Problem, sollte aber eigentlich nichts mit dem geschriebenen zu tun haben. Die Session ID wird ja mittels GET an die anderen Seiten übertragen. (Auch an die logout.php)

Kann es sein das die Fehlertoleranz sowohl bei dem älteren IE 6 als auch dem neusten Firefox recht hoch ist? Die HTML fehler sorgen bis jetzt für keine Darstellungsfehler. Kannst du mal ein kleines Beispiel nenen wo es zum Beispiel im HTML Code hakt?

Gruß
René

feuervogel
06.08.2009, 21:44:46
ich glaube ein tr-tag wird nicht geschlossen sowie ein a tag. am besten du kopierst das html (oder den link zur seite) in den w3c-validator: http://validator.w3.org/

Auf der Mauer
06.08.2009, 22:02:01
Vielen Dank für den Link, die Seite ist richtig gut.
Da bin ich ja mal gespannt was dort alles so zum Vorschein kommt.

Gruß
René

vt1816
06.08.2009, 22:03:17
<tr>...</tr> fehlen komplett und dazu kommt noch:

Line 23, Column 32: required attribute "TYPE" not specified
Line 47, Column 101: ID "LETTERBREITE" already defined

Viel Arbeit an 'nem Fussballabend ;-)

Auf der Mauer
07.08.2009, 10:15:08
@ vt1816

ja genau ;-)
Trotz Fussball bin ich meine Seiten durchgegangen und es wurden einige HTML Fehler gefunden. Wobei es erstaunlich ist das diese eigentlich überhaupt nicht zu Darstellungsproblemen geführt haben. Die Toleranzgrenze ist da wohl recht hoch in den Browsern. Jetzt habe ich aber ein gutes Gefühl.


Congratulations
This document was successfully checked as HTML 4.01 Transitional!


Vielen Dank für die Hilfe und den Tip mit der Seite. Habe gleich mal ein Lesezeichen darauf gesetzt. Wieder ein Problem weniger.

Jetzt hakt es nur noch beim ausloggen. Hat da jemand noch eine Idee? Beim abmelden von User A wird automatisch auch User B abgemeldet obwohl es zwei Sitzungen mit zwei unterschiedlichen Session ID's sind. Wenn ich beide Seiten aktualisiere bleiben die unterschiedlichen Session ID's erhalten und sie werden auch mittels GET an die logout.php übergeben.

Gruß
René

Auf der Mauer
08.08.2009, 18:52:23
Das Problem mit dem ausloggen war garkeins.
Abmelden und Session destroy aus demselben Browser ist eben keine gute Idee ;-)
IE und Mozilla Firefox gleichzeitig überhaupt kein Problem.

Mhh schön wie die ganzen Zahnrädchen in meinem Projekt langsam anfangen sich zu drehen ;-)

Gruß
René