http-equiv="refresh" Verhalten bei verschiedenen Browsern

Spellchiller

Mitglied
Hallo und guten Morgen.

Ich habe mal eine Frage. Ich selber kann mir diesen Phänomen leider nicht erklären.

Auf meinem Server liegt ein Order mit html und php Dateien.
z.B.
database/main.html
database/farben_bearbeitet.php

Der Anwender soll nach einer bestimmten Prozedur von der Seite farben_bearbeitet.php auf die Seite main.html mittels
Code:
<meta http-equiv="refresh" content="2; URL=database/farben_lieferanten.html">';
weitergeleitet werden.

Wenn ich das mit Google Chrome mache klappt das wunderbar. Arbeite ich jedoch mit Firefox, Safari oder IE leiter er mich auf die Seite database/database/main.html.

Kann man das irgendwie vereinheitlichen? Wenn ich die URL auf URL=main.html kürze, leitet mich Chrome auf
http://www.url.de/main.html. Das ist aber falsch. Es muss http://www.url.de/database/main.html heißen.

Danke für Tipps.
 

tombe

Erfahrenes Mitglied
Also wenn die beiden Dateien im gleichen Verzeichnis liegen, dann reicht es doch auch aus wenn du nur den Dateinamen angibst.

Davon mal abgesehen hast du dich oben verschrieben oder hast du sowieso einen Fehler drin, oben wird nämlich auf die Seite "farben_lieferanten.html" und nicht "main.html" umgeleitet!
 

Spellchiller

Mitglied
Hallo,

ja das war auch nur ein Beispiel. Das Prinzip ist das selbe.
Das reicht ja eben nicht. Zumindest nicht für Chrome. Der "verschluckt" dann meinen Unterordner.
 

Spellchiller

Mitglied
Wenn ich es so "/database/main.html" angebe klappt es in Chrome aber in IE, Firefoc etc. werde ich auf "/database/database/main.html" geleitet.
 

tombe

Erfahrenes Mitglied
Ist zwar komisch das es mit Chrome geht und mit den anderen nicht. Du bist dir aber sicher das der Fehler nicht noch wo anders liegen kann?

Habe ein bisschen im Netzt gestöbert aber nirgends auf ein ähnliches Problem gestossen.

Keine Ahnung ob das für die eine Option wäre aber kannst du die Weiterleitung nicht mit PHP machen?
 

Spellchiller

Mitglied
Ich bin daran auch ein wenig verzweifelt. Hab nämlich auch nichts vergleichbares gefunden.

Hmm ich denke nicht das es an etwas anderem liegt. Hab beides mal parallel mit Chrome und Firefox probiert. Ergebnis wie oben beschrieben.

Ok. Umbau in php:

PHP:
<?php
session_start();
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 "http://www.w3.org/TR/html4/loose.dtd">
<html>    
<head>
      
    
   
	<title>Login</title>
    <meta charset="utf-8">
	<meta name="robots" content="index,follow">
   	<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    
    <link rel="stylesheet" href="http://www.url.de/css/reset.css">
	<link rel="stylesheet" href="http://www.url.de/css/unterseiten_style.css">
    <base href="http://www.url.de/" target="_self">
	<link rel="SHORTCUT ICON" href="favicon.ico" type="image/x-icon">
	

</head>
<body>
	<div id="wrapper">
		<div id="head">
			<img alt="Logo" id="logo" src="images/logo_weiss.gif"></a>
			<a>
            <img alt="Schriftzug" id="schrift" src="images/schriftzug.gif">
            </a>
		</div>
		<div id="content">

<div class="content-inner-box-large">
<?php


include 'config.php';
include 'connect.php';



$username = $_POST["username"];
$password = $_POST["password"];



if($username == "" OR $password == "")
    {
    echo "Eingabefehler. Bitte alle Felder korrekt ausfüllen. <a href=\"database/login.html\">Zurück</a>";
    exit;
    }
$password1 = md5($password);

$result = mysql_query("SELECT id FROM tbl_benutzer WHERE user LIKE '$username'");
$menge = mysql_num_rows($result);

if($menge == 0)
    {
    	echo "User gibt es nicht! <a href=\"database/login.html\">Zurück</a>";

    }

else
    {
		$pw_abfrage = mysql_query("SELECT user, password FROM tbl_benutzer WHERE user LIKE '$username'");

 	while($row = mysql_fetch_array($pw_abfrage))
		   {
				$pw = $row['password'];
		   if ($password1 != $pw)
								 {
								 echo "Falsches Passwort. <a href=\"database/login.html\">Zurück</a>";
								 echo "<meta http-equiv=\"refresh\" content=\"5; URL=login.html\" />";
								 }
			else
			$_SESSION['loggedIn'] = true; 
			$_SESSION['username'] = $username;

//Weiterleitung

			ob_start();
			echo "Login erfolgreich! Du wirst nun weitergeleitet.";
			header ("refresh:3;url=main.html");
			ob_flush();
			ob_end_clean();
			
			//echo "<meta http-equiv=\"refresh\" content=\"2; URL=database/main.html\" />";
		   }

			
			
	}
		
		
		
    
?> 

</form>
</div>    	</div>
		<div id="footer">
			<span>
				
			</span>
		</div>
		
	</div>

</body>
</html>

Ergebnis: "Login erfolgreich! Du wirst nun weitergeleitet.
Warning: Cannot modify header information - headers already sent by (output started at /www/htdocs/w00e3f4e/database/login.php:17) in /www/htdocs/w00e3f4e/database/login.php on line 80"

Leerzeichen sind nicht vor dem "<?php"
Das macht mich verrückt.
 

sheel

I love Asm
Leerzeichen vllt. nicht, aber echo´s und ein ganzer HTML-Block :suspekt:
Damit header funktioniert darf überhaupt keine Ausgabe davor sein,
egal ob Leerzeichen oder sonst was.

Als Workaround gibts ja die Sache mit ob_start, das gehört aber wenn schon ganz an den Anfang.
Da hin, wo session_start ist.
 

Spellchiller

Mitglied
Perfekt!

So passt es

PHP:
<?php
session_start();
ob_start();
header ("refresh:3;url=main.html");
			ob_flush();
			ob_end_clean();

?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 "http://www.w3.org/TR/html4/loose.dtd">
<html>    
<head>
.
.
.

Nur wie mache ich es in dem Fall, wenn Benutzer oder Passwort falsch sind?
 
Zuletzt bearbeitet:

tombe

Erfahrenes Mitglied
Habe den obigen Code jetzt nicht komplett angeschaut, aber du hast ja irgendwo einen IF-Block wo du prüfst ob die Anmeldung korrekt war oder nicht.

Dort gehört dann wohl auch die header-Anweisung hin.