login pw-abfrage PHP

hi, habe da mal wieder son problem mit php!

habe ein login-script:
1. login.html (eingabe name und passwort (html))
2. admin.php (inhalt der administration: darf keiner dran bevor er pw und bn in der login.html eingebene hat)
3. gbadmin.php
4. newsadmin.php
5. forumadmin.php

die datein 3,4,5 möchte ich ebenfalls so einrichten, dass sie nur angesehen werden können, wenn in der login.html die daten richtig eingegeben wurden!!

wie stelle ich das an???
 
nach erfolgreichem vergleich der login daten machst du folgendes:

PHP:
session_register('safe');

an den anfang jeder datei stelltst du dann

PHP:
<? session_start(); 
if(!session_is_registered('safe')) {
      die ("<b>Please login</b> <br>");
      }
?>

aber noch vor das <html> also in zeile 1

grüße
Sven
 
Warum machst du aus der Login.html nicht eine Login.php? Dann köntest du dein Anmeldeformular in der Art schreiben:
PHP:
<form name="login" method="post" action="login.php" target="_self">
Username: <input type="text" name="uname"><br>
Password: <input type="password" name="upwd"> 
</form>
In der gleichen Datei (also login.php) kannst du dann kucken ob das Passwort und der Benutzername (korrekt) eingegeben wurden, ungefähr so:
PHP:
<?
if (isset($_POST['uname'],$_POST['upwd']))
{
include("PATH/daten.php"); //die Datei zum Überprüfen der Eingabe inculden wo die Userdaten drin liegen (du solltest diese Datei am besten über dem ersten vom Web aus erreichbaren Ordner speichern und den Pfad zu der Datei anstelle von PATH angeben)
 if ( $_POST['uname']==$username && $_POST['upwd']==$password)
 {
  //hier dann entweder die anderen Dateien (admin.php / gbadmin.php / newsadmin.php / forumadmin.php) includen oder komplett reinkopieren
 }else echo "<b>Login nicht erfolgreich.</b>";
}else 
{
//hier kannst du das Formular rein packen
?>


<?
}
?>
ich hoffe das hilft dir weiter ...
[EDIT]
achso, damit das Anmelde-Formular verschwindet nachdem die Daten Korrekt eingegeben wurden kannst du es in den elseZweig von if(isset()) schreiben
[/EDIT]

mfg
püppi
 
Original von PuppE
Warum machst du aus der Login.html nicht eine Login.php? Dann köntest du dein Anmeldeformular in der Art schreiben:
PHP:
<form name="login" method="post" action="login.php" target="_self">
Username: <input type="text" name="uname"><br>
Password: <input type="password" name="upwd"> 
</form>
In der gleichen Datei (also login.php) kannst du dann kucken ob das Passwort und der Benutzername (korrekt) eingegeben wurden, ungefähr so:
PHP:
<? if (isset($_POST['uname'],$_POST['upwd']))
{
include("PATH/daten.php"); //die Datei zum Überprüfen der Eingabe inculden wo die Userdaten drin liegen (du solltest diese Datei am besten über dem ersten vom Web aus erreichbaren Ordner speichern und den Pfad zu der Datei anstelle von PATH angeben)
 if ( $_POST['uname']==$username && $_POST['upwd']==$password)
 {
  //hier dann entweder die anderen Dateien (admin.php / gbadmin.php / newsadmin.php / forumadmin.php) includen oder komplett reinkopieren
 }
ich hoffe das hilft dir weiter ...

mfg
püppi

man kann auch alles direkt in eine Datei fassen...
PHP:
if($_GET['admin'] == 1) { session überprüfen,.... }

die links dann www.bla.de/index.php?admin=1 zb
 
Liebe puppe
das war ein Beispiel ;)

du kannst in der index php diverese If abfragen einbauen, ich hätte auch schreiben können Puppe=1
aber zb Wenn admin=1 per Get übergeben wird und eine if Schleife dazu existiert, kann danach der part der admin.php ausgegeben werden.
Per geschickten Abfragen liese sich auch realisieren, dass immer nur ein Wert übergeben wird.
-> du hast nur eine datei mit dem Inhalt von 5

und wenn keine der if Abfragen erfüllt wird (eine if abfrage für den Index also liste aller Verfügbaren Seiten) kann man halt den Login ausgeben lassen

grüße
Sven
 
ich hatte schon das Grundprinzip verstanden ...
Blos wo willst du denn deine Variable (admin / puppe) setzen ?

Wäre es nicht sinnvoller (wenn man schon eine Unterscheidung treffen will) in dem Anmeldeformular ein paar Radiobuttons zu vereinbaren die der User dann anklicken kann ? zb.:
PHP:
<form name="login" method="post" action="login.php" target="_self">  Username: <input type="text" name="uname"><br>
Password: <input type="password" name="upwd">
<input type="radio" name="Admin" value="Admin"> Admin
<input type="radio" name="PuppE" value="PuppE"> PuppE
</form>
die könnte man dann mit if(isset($_POST['Admin'])) überprüfen und dann die jeweilige seite ausgeben.

Das war jetzt auch nur ein Beispiel :P

mfg
püppi
 
@puppe
deine alternative ist richtig und funzt auch, jedoch ist damit leider noch net mein problem behoben. denn so hat jeder die möglichket (vorausgesetzt er kennt den pfad der datei), die datei, die ich include will auch manuel zu öffnen! oder liege ich da falsch und verstehe deine antwort nicht ganz! X(

ich möchte ja alle datein, die ich includen möchte ebenso mit pw u. bn schützen! denn wenn jemand den pfad der (z.b.) gbadmin.php kennt, kann er darauf zugreifen und sie dennoch öffnen (er umgeht in dem fall den passwortschutz)!

ist es irgendwie möglich alle datein so zu schützen (also die datein die ich in die admin.php include möchte) dass man die datein nur über die "login.php" öffnen kann!? d.h. nur mit eingabe des pw u. bn!?

bisher habe ich es wie folgt (in der art):

in der login.php das formular (diese verzweigt dann durch form="" zur "admin.php")

die admin.php sieht dann so aus:

<?php
include ("pw.php"); // enthält pw u. bn

if (($user== "$bn") and ($pws== "$pw"))
{
?>
<html>
<head>
<title>admin</title>
</head>
<body>

<a href="gbadmin.php">gb</a>
<a href="newsadmin.php">news</a>

</body>
</html>
<?
}
else {
echo "Kein Zugriff!";
}
?>



nun möchte ich (wie oben zu sehen) die beiden dateien (gbadmin und newsadmin.php) darin laden!
wenn jemand jedoch den pfad der beiden dateien kennt, kann er so drauf zugreifen und den pwschutz umgehen!
das möchte ich net!
möchte, dass man nur über die pw-abfrage auf die dateien kommt (d.h. wenn man zwar den pfad kennt und die datei öffnen will bzw. die pw-abfrage umgehen will, dass dann kommt "Error" oderso)
 
Nein puppe
ich will extra links dafür machen
also du loggst dich ein
und siehst 3 Links mit jeweils ner anderen Get Variablen
und dann If Abfragen zu jeder einzelenen Get Variablen

so hab ich mir das gedacht

@ Hirnb.

da ich jezt erstmal pennen gehe werde ich dir morgen, sollte ich zeit finden mal nen Fertigen source posten

danach dürfte dann auch alles klar sein
 
Um deine Datei vor ungewolltem Zugriff zu schützen solltest du Sie ausser halb des vom WWW erreichbarem Bereich lagern und später includen. Das gilt ganz besonders für die pw.php ;)
Ich weis nicht wie deine Verzeichnisstruktur aussieht, aber normaler weise hat man einen Ordener der nicht vom Web aus erreichbar ist (dieser liegt meist Über dem www-Ordner), falls nicht muss ich mir halt noch was anderes ausdenken :rolleyes:
Also musst du ansatt die Links auszugeben, die jeweilige Datei includen.
Um zu unterscheiden wo der User hin will, könntest du Svens Ansatz (mit meiner Variante, den Radiobuttons) benutzen, so das der User vorher schon sagen muss wo er hin will.

mfg
püppi
 
Original von PuppE
Ich weis nicht wie deine Verzeichnisstruktur aussieht, aber normaler weise hat man einen Ordener der nicht vom Web aus erreichbar ist (dieser liegt meist Über dem www-Ordner), falls nicht muss ich mir halt noch was anderes ausdenken :rolleyes:
alternativ könnte man die dateien in einen htaccess geschützen bereich packen.
 
ja das wäre möglich und auch wohl momentan am einfachsten! jedoch möchte ich das gerade net! ^^
bin da etwas eigen! :P

ich habe mir was gerade so überlegt, mit einem switch die datein in der admin.php zu includen, jedoch bringt mich das net weiter, da durch son break; keine variablen vom darüberliegendem "switch" "durchgehen"
oh mein gott, hoffe ihr versteht was ich meine!?

admin.php

<?
include "pw.php"; // natürlich anderer pfad ^^

if (($user== "$bn") and ($pws== "$pw")) // $user u. $pws von login.php(werden überprüft)
{

switch($admin) {

default:
?>
<a href="gbadmin.php?admin=gb">gb</a>
<a href="newsadmin.php?admin=news">news</a>
<?
}
else {
echo "Kein Zugriff!";
}
?>
<?
break;
case "gb":
include ('gbadmin.php'); // in der datei ebenfals if (($user == "$bn") and ......

break;
case "news":
include ("gbnews.php'); // in der datei ebenfals if (($user == "$bn") and ......
}
?>




könnten fehler drin sein! hab sie nur mal schnell reingeschrieben, solen zum vereutlichen dienen! ^^^

ist so etwas möglich?? d.h. die (zb) gbadmin.php hat oben auf die abfrage der daten stehen, das hieße man könnte so auf die datei net zugreifen!

aber durch son break; kommen auch net die daten von der "normalen" admin.php durch?? oder wie ist so etwas möglich?
 
du machst da einen ganz großen logischen fehler ... mit <a href="gbadmin.php?admin=gb">gb</a> rufst du die gbadmin.php auf und über gibst der gbadmin.php die variable admin mit dem wert gb. Du willst aber in der admin.php die variable $_GET['admin'] (nicht $admin) überprüfen, die wird da _nie_ ankommen ... :(
was hast du gegen die Variante mit dem geänderten Formular ?
PHP:
<form name="login" method="post" action="login.php" target="_self">  Username: <input type="text" name="uname"><br>
Password: <input type="password" name="upwd">
<input type="radio" name="gbnews" value="gbnews"> GBNews
<input type="radio" name="gbadmin" value="gbadmin"> GBAdmin
</form>
dann könntest du in der login.php folgendes machen:
PHP:
<?
if (isset($_POST['uname'],$_POST['upwd']) && (isset($_POST['gbadmin']) || isset($_POST['gbnews'])))  {
include("pw.php"); 
 if ( $_POST['uname']==$username && $_POST['upwd']==$password)   { 
   if(isset($_POST['gbadmin']))
   include("gbadmin.php"); 
   if(isset($_POST['gbnews']))
   include("gbnews.php");
  }
}else 
{
//hier kannst du das Formular rein packen
?>


<?
}
damit ersparst du dir ne menge fummelei und das erneute überprüfen der UserDaten.
 
also am einfachsten is doch die variante das man die eingegebenen Daten in ner Session starten und vor jede datei die man schützen will einfach

<?php
session_start ();
if (!isset ($_SESSION["login"]))
{
header ("Location: login.html");
}
?>

und in der session "login" sind die Daten wie Benutzername & dazugehöriges Passwort gespeichert, und mit !isset prüft man ob die session existiert bzw hier nicht existiert ... falls sie nicht existiert -> zurück auf die seite wo die daten eingegeben werden sollen, oder wo immer du hin willst ... so einfach, so kommt keiner an den admin bereich ran ohne seine daten vorher eingegeben zu haben. oder hab ich unrecht? bitte berichtigen =)
 
@ invader
danke, das wäre auch ne lösung! ich werds bei meiner neuen page anwenden! :)

@puppi
gibt es eine möglichkeit die "radio"-button auch wieder abzuwählen, d.h. wenn man versehens eine falschen angeklickt hat!? geht nämlich irgendwie net!!??

wäre cool, du oder jemand anders könnte mir da helfen!! danke!


mfg hirnbreaker
 
PuppE's Idee war nicht schlecht, aber damit die Radio-Buttons zusammengehören, müssen sie den selben Namen haben.
Also:
Code:
<form ... >
    ...
    <input type="radio" name="choose" value="gb" checked><br />
    <input type="radio" name="choose" value="admin"><br />
    <!-- usw. -->
</form>

Und der PHP-Code:

PHP:
<?php
switch($_REQUEST['choose']){
    case "gb":
        include "PFAD/gb.php";
        break;
    case "admin":
        include "PFAD/admin.php";
        break;
    default:
        echo "Fehler: Sie müssen einen Button auswählen";
        break;
}
?>

Wobei ich jedoch auch die Lösung mit der Session besser finde...
 
Zurück
Oben