[PHP] Link in Funktion setzen

MaxFleit

web2systems
ID: 308871
L
15 Januar 2008
293
28
Hallo,
ich habe ein kleines Problem und hoffe ihr könnt mir helfen. Ich habe einen Login für eine geschütze Seite, bei dieser geschützte Seite wird überprüft ob der User das Zugangsrecht hat.

PHP:
// Ausgabe Login wenn kein Zugriff erlaubt

if(!$ret[0] OR $this->modus==2 OR $this->modus==3)
{
echo "<div align=center>";
if($ret[1]){echo "<font color=red>".$ret[1]."</font>";}
}

if(!$ret[0] AND $this->modus!=3)
{
echo $this->formlogin();
}
if(!$ret[0] AND $this->modus==3)
{
echo $this->formlogout();
}

if(!$ret[0] OR $this->modus==2 OR $this->modus==3)
{
echo "</div>";
die();
}
}

So jetzt kommt der Login, wenn der User nicht das nötige Zugriffsrecht hat. Ich habe den Login aber in ein Design includet. Also möchte ich, dass wenn das Zugriffsrecht nicht vorhanden ist die seite login.php geöffnet wird.

WIe müsste das dann aussehen?

mfg
MaxFleit
 
So jetzt kommt der Login, wenn der User nicht das nötige Zugriffsrecht hat. Ich habe den Login aber in ein Design includet. Also möchte ich, dass wenn das Zugriffsrecht nicht vorhanden ist die seite login.php geöffnet wird.

WIe müsste das dann aussehen?

Du könntest ein
PHP:
header("Location: https://example.org/login.php");
setzen (allerdings vor jeder Ausgabe).

Mit einem Templatesystem (Smarty, ...) hättest du hier allerdings diverse Vorteile - hier würde z.B. folgendes reichen
PHP:
$tpl->assign('content','login');

Deine $modus-Vergleiche könntest du dir mit Konstanten noch einfacher machen.
 
Zuletzt bearbeitet:
Also so oder wie muss das jetzt aussehn?
PHP:
// Ausgabe Login wenn kein Zugriff erlaubt

if(!$ret[0] OR $this->modus==2 OR $this->modus==3)
{	 
echo "<div align=center>";
if($ret[1]){echo "<font color=red>".$ret[1]."</font>";}
}

if(!$ret[0] AND $this->modus!=3)
{	
header("Location: https://example.org/login.php"); 
echo $this->formlogin();
}
if(!$ret[0] AND $this->modus==3)
{	
header("Location: https://example.org/login.php"); 
echo $this->formlogout();
}

if(!$ret[0] OR $this->modus==2 OR $this->modus==3)
{
echo "</div>";
die();
}
}
 
Wenn du einen Location-Header sendest, solltest du danach kein Login-Formular mehr ausgeben, sondern das Script beenden.
 
Hallo,
wenn ich das jetzt so mache sagt er mir

Umleitungsschleife

Die aufgerufene Website leitet die Anfrage so um, dass sie nie beendet werden kann.

PHP:
// Test ob genügend Rechte vorhanden sind

if(!$ret[0] OR $this->modus==2 OR $this->modus==3)
{
echo "<div align=center>";
if($ret[1]){echo "<font color=red>".$ret[1]."</font>";}
}
if(!$ret[0] AND $this->modus!=3)
{
echo header('Location: https://mftestserver.ohost.de/pg2/login.php');
}
if(!$ret[0] AND $this->modus==3)
{
echo header('Location: https://mftestserver.ohost.de/pg2/login.php');
}
if(!$ret[0] OR $this->modus==2 OR $this->modus==3)
{
echo "</div>";
die();
}
}//ende zugriff
 
Du möchtest Seite A haben.
Du fragst nun beim Server nach Seite A an. Antwort: Umleitung auf Seite A
Also möchtest du Seite A haben.
Du fragst nun beim Server nach Seite A an. Antwort: Umleitung auf Seite A
Also möchtest du Seite A haben.
Du fragst nun beim Server nach Seite A an. Antwort: Umleitung auf Seite A
Also möchtest du Seite A haben.
Du fragst nun beim Server nach Seite A an. Antwort: Umleitung auf Seite A
Also möchtest du Seite A haben.
...
Irgendwann wirds dir zu dumm und du gibst auf :evil:

Genau das is bei dir der Fall.
 
Hmm wieso, sry wenn ich nerve aber ich verstehe das net so ganz.

Ich frage Seite A nach, das Script checkt beim Server ob genügend Rechte vorhanden sind. Der sagt nein ung startet den Location-Header -> Umleitung auf Seite B.

Iwie glaub ich steh ich aufm Schlauch.

edit: verstehe der führt das danach noch aus:>
 
PHP:
if(!$ret[0] OR $this->modus==2 OR $this->modus==3)
{
echo "<div align=center>";
if($ret[1]){echo "<font color=red>".$ret[1]."</font>";}
}
if(!$ret[0] AND $this->modus!=3)
{
echo header("Location: https://mftestserver.ohost.de/pg2/login.php") and exit();
}
if(!$ret[0] AND $this->modus==3)
{
echo header("Location: https://mftestserver.ohost.de/pg2/login.php") and exit(); 
}
if(!$ret[0] OR $this->modus==2 OR $this->modus==3)
{
echo "</div>";
die();
}
}//ende zugriff


So habe jetzt nen exit dahintergepackt. Das geht so aber nicht. Hab das bei php.net aber auch ähnlich gesehen.

Wäre super wenn mir nochmal einer helfen könnte.
 
header() hat Rückgabetyp void - was soll das echo davor? Sollte das wirklich was ausgeben, kannst du Header senden, wie du willst. Die wären dann schon lange abgeschickt.

Lass das komische "and" weg. Beendet einfach ganz normal nach der Headeranweisung das Script.
 
PHP:
// Test ob genügend Rechte vorhanden sind

if(!$ret[0] OR $this->modus==2 OR $this->modus==3)
{
echo "<div align=center>";
if($ret[1]){echo "<font color=red>".$ret[1]."</font>";}
}
if(!$ret[0] AND $this->modus!=3)
{
void header('Location: https://mftestserver.ohost.de/pg2/login.php') 
exit();
}
if(!$ret[0] AND $this->modus==3)
{
void header('Location: https://mftestserver.ohost.de/pg2/login.php') 
exit(); 
}
if(!$ret[0] OR $this->modus==2 OR $this->modus==3)
{
echo "</div>";
die();
}
}//ende zugriff


Warum is da denn jetzt ein

Parse error: syntax error, unexpected T_STRING in /usr/export/www/hosting/mftestserver/pg2/cl_zugriff.php on line 47


Wäre sehr dankbar für eure Hilfe. Würde das gerne hinbekommen.
 
Was soll das void da? :hö:
Bitte :pray: lies dir vor weiteren Fragen im Manual die grundliegende Syntax von PHP durch :pray: