Direkter Zugang

Ich habe für eine umfangreiche Website in einem separaten Ordner eine 2. Website angehängt die einen Firmenbereich zeigt der geschützt werden soll.
Dazu habe ich dann auf der offenen Seite einen einfachen Login eingerichtet, in dem die Nutzer einen Benutzernamen und ein Passwort eingeben müssen.
Zuerst habe ich das mit htaccess geregelt, aber der hässliche graue Banner ging mir auf den Geist. Also habe ich das mit php geregelt, über ein Login das ich direkt in eine Seite vom offenen Bereich eingebaut habe. Das Login wird über ein check.php (Anhang) geregelt. Was mir nicht gefällt, ist dass ich beim absenden der Daten keinen direkten Zugang zur Seite bekomme. Außerdem will ich nach 3 falschen Versuchen eine extra denied.php Seite einblenden die Informationen gibt wo man Passwort und Benutzer herbekommt.

Hier der Code:

<?php // Passwortschutz mit PHP if ($Benutzer == "" or $Kennwort == "") { echo "Bitte alle Felder ausfüllen!"; } else if($Benutzer == "Bereich" and $Kennwort == "Passwort") { echo 'Herzlich Willkommen - Mit einem Klick sind Sie am Ziel!';

}
else
{
echo ‚<a href=„seminare.php“?>Sorry, bitte noch mal versuchen!</a?>‘;
}
?>

Gerne lese ich konkretes.

Kieler

Du kannst doch bei erfolgreichem Login den User weiterleiten.

Entweder mittels JavaScript (so mache ich das auch NOCH pfui) oder per PHP-Headerweitereitung.

per JavaScript:
[PHP]
print „“;
print „<a href="$ziel?PHPSESSID=“.$PHPSESSID.„">Weiter“;
[/PHP]

oder per Header
[PHP]
header(„Location: index-neu.php“);
[/PHP]

oder verstehe ich dich jetzt falsch?

lg michael

Weiterleitung Header

Danke für den Hinweis. Den Header hab ich auch schon probiert.
Aber ohne Erfolg.
[php]<?php
// Passwortschutz mit PHP

if ($Benutzer == „“ or $Kennwort == „“)
{
echo „Bitte alle Felder ausfüllen!“;
}
else if($Benutzer == „Bereich“ and $Kennwort == „Passwort“)
{
echo header(„Location: index_neu.php“);
}
else
{
echo ‚<a href=„seminare.php#top“?>Sorry, bitte noch mal versuchen!</a?>‘;
}
?>[/php]Vermutlich weil ich ihn als Echo benutze. Aber sicher bin ich mir nicht.
Ich habe auch schon den ganzen Pfad eingegeben. Hat nichts genutzt.

So langsam geb ich das nun auf und mache das mit Javascript, was mir sehr zuwider ist.

header() benutzt man ohne echo. Wenn es dann noch nicht klappt, hast du eine Ausgabe vor der Funktion. In diesem Falle könnte man output caching benutzen.

Vielen Dank

Vielen Dank für die ausführliche und umfassende Antwort.
Wenn ich schon Beispiele vorgebe dann wäre es doch nützlich sie auch zu benutzen.
Aber warum soll das hier anders sein als sonstwo.

Trotzdem gnädigsten Dank für die „Hilfe“ auf dass die Erleuchtung über euch komme.

Wir wollen dir nur helfen!!! Und die Antwort war eigentlich sehr verständlich. Du darfst kein echo vor den Auruf von header setzen, also:
[PHP]
header(…);
[/PHP]
Das geht aber nur, wenn du vor dem Aufruf von Header keine Ausgaben gemacht hast. Wenn du diese machst und den Code auch nicht verschieben kannst, kannst du die Ausgabe puffern, also nicht direkt senden, sondern erst am Ende an den Client senden. Siehe Das deutschsprachige PHP Handbuch / Manual bei Dynamic Web Pages! PHP PHP3 PHP4 PHP5 - Deutscher Knotenpunkt für PHP → Dynamic Web Pages. Alles zu MySQL, PostgreSQL, XML, Web Services & PHP Hoffentlich verstehst du es jetzt, obwohl ich dir nicht deine ganze Website programmiert habe.

ein wirklich verlässlicher schutz ist hier noch nicht gegeben.
wenn du einen guten php entwickler suchst (beruflich) kannst du dich gerne mal melden, vielleicht werden wir uns ja einig.

Natürlich ist das kein sicherer Schutz. Immerhin kann die neue Seite (index_neu.php) auch direkt aufgerufen werden. Man ist somit nicht mehr abhängig von der überprüfung.
Aber unabhängig davon versuchen wir hier das Problem zu lösen. Soweit wir das beurteilen können liegt es an dem echo…

ich gehe davon aus, dass header void (an php) zurück gibt.
demnach wird es so nicht funktionieren, dass echo muss weg :slight_smile:

header benutzt den php eigenen Ausgabepuffer (siehe PHP: ob_start - Manual)

wie mein vorredner schon gesagt hat, muss das echo weg :slight_smile:

damit das ganze etwas übersichler ist kannst du es auch so formulieren:

[php]
if(condition)
die(‚bitte mal überprüfen ob alles eingegeben wurde‘);

if(condition)
die(‚du hast hier nichts zu suchen‘);

echo ‚du bist eingeloggt‘;
[/php]

PHP: die - Manual / PHP: exit - Manual sind zwar sehr sture php funktionen, dass verwendete muster jedoch benutzt man später jedoch auch gerne in der objekt orientierten welt, also macht es sinn wenn du dich direkt an sowas gewöhnst.