Zur Navigation

Einmaliger Download [2]

11 rockford

Hi Jörg,


jetzt sind die Fehlermeldungen weg. Aber die Seite erscheint trotzdem. Sie wird komplett angezeigt. Oben drüber steht:
Sie sind ausgeloggt....

????


Gruß

Rockford

01.10.2005 20:04

12 Jörg Kruse

Ich hab das Script grad mal getestet. Am besten scheint mir für deinen Zweck, die soll-geschuetzt-werden.php links liegen zu lassen und stattdessen die login.php anzupassen und zu verlinken:

<?
session_start();
include 'sessionhelpers.inc.php';
if (isset($_POST['login']))
{
$userid=check_user($_POST['username'], $_POST['userpass']);
if ($userid!=false)
login($userid);
else
echo 'Ihre Anmeldedaten waren nicht korrekt oder Ihr Account ist nach einmaligem Login abgelaufen!';
}
if (!logged_in())
echo '<form method="post" action="login.php">
<label>Benutzername:</label><input name="username" type="text"><br>
<label>Passwort: </label><input name="userpass" type="password" id="userpass"><br>
<input name="login" type="submit" id="login" value="Einloggen">
</form>';
else
$sql = "DELETE FROM users WHERE UserName = '$username'";
mysql_query($sql);
?>
<!-- Hier drunter kommt der zu schützende Inhalt rein (als HTML-Quelltext): -->

Die Anpassungen habe ich fett markiert. Nach einem erfolgreichen Login sieht der User den geschützten Inhalt, wird aber zuvor aus der Datenbank gelöscht, und kann sich bei einem zweiten Aufruf so nicht mehr einloggen.

Das Löschen des Users wäre die einfachste Lösung. Alternativ könnte man noch eine Lösch-Spalte einrichten, wie ich es am Anfang des Threads beschrieben habe. Die Anpassung wäre ein klein wenig aufwendiger, aber es hätte den Vorteil, dass die Namen in der Datenbank verbleiben, falls du diese (z.B. zum Abgleich) noch benötigst

01.10.2005 21:30 | geändert: 01.10.2005 21:37

13 rockford

Hi Jörg,

meine login.php sieht jetzt so aus:
<?
session_start();
include 'sessionhelpers.inc.php';
if (isset($_POST['login']))
{
$userid=check_user($_POST['username'], $_POST['userpass']);
if ($userid!=false)
login($userid);
else
echo 'Ihre Anmeldedaten waren nicht korrekt oder Ihr Account ist nach einmaligem Login abgelaufen!';
}
if (!logged_in())
echo '<form method="post" action="login.php">
<label>Benutzername:</label><input name="username" type="text"><br>
<label>Passwort: </label><input name="userpass" type="password" id="userpass"><br>
<input name="login" type="submit" id="login" value="Einloggen">
</form>';
else
$sql = "DELETE FROM users WHERE UserName = '$username'";
mysql_query($sql);
?>



<!-- Hier drunter kommt der zu schützende Inhalt rein (als HTML-Quelltext): -->

<p><a href="http://forum.joergkrusesweb.de/" target="_blank">Testen Sie unbedingt
diesen Link!</a></p>


So far so good. Aber der schützende Bereich wird immer angezeigt. Auch wenn man nicht eingeloggt ist.
Ist dies vielleicht Browserabhängig? Ich nutze firefox.


Gruß

Dario

04.10.2005 11:19

14 Jörg Kruse

Hallo Dario,

sorry, da hatte ich wohl Mist gebaut. Ich hab die login.php nochmal gründlich überarbeitet, so sollte es funktionieren:

<?
include 'sessionhelpers.inc.php';

if (isset($_POST['login'])) {
$userid=check_user($_POST['username'], $_POST['userpass']);

if ($userid!=false) {

$username = $_POST['username'];
$sql = "UPDATE users SET UserPass = 'x' WHERE UserName = '$username'";
mysql_query($sql);
?>

<!-- Hier drunter kommt der zu schützende Inhalt rein (als HTML-Quelltext): -->

<p><a href="http://forum.joergkrusesweb.de/" target="_blank">Testen Sie unbedingt
diesen Link!</a></p>

<!-- Ende des zu schützenden Inhaltes -->

<?php

} else {
echo 'Ihre Anmeldedaten waren nicht korrekt (Sie gelangen mit dem Zurück-Button Ihres Browsers wieder zum Formular) oder Ihr Account ist nach einmaligem Login abgelaufen!';
}

} else {

echo '<form method="post" action="login.php">
<label>Benutzername:</label><input name="username" type="text"><br>
<label>Passwort: </label><input name="userpass" type="password" id="userpass"><br>
<input name="login" type="submit" id="login" value="Einloggen">
</form>';

}
?>

Die Session-Funtionen habe ich diesmal gar nicht mehr berücksichtigt, man loggt sich ja eh nur für eine Seite ein. Nach dem Login wird das verschlüsselte Password durch ein 'x' ersetzt, so dass der User sich kein zweites Mal einloggen kann. Nach Aktualisieren der Seite sollte eine Fehlermeldung erscheinen. Teste mal, ob es so bei dir funktioniert

04.10.2005 13:24 | geändert: 04.10.2005 13:28

15 rockford

Hi Jörg,

ja, so funktioniert es. Das Adminpasswort wurde gelöscht :-)
Vielen Dank schonmal!!!!!!

Gibt es denn eine Möglichkeit, eine Seite zu schaffen, auf die nur der Admin zugreifen kann ( Passwort wird nicht gelöscht *g* ).
In dieser Seite hat der Admin dann die Möglichkeit neue User für den einmaligen Download freizuschalten und er kann dort User die sich bereits eingeloggt haben löschen.


Lezten Endes möchte ich dieses Verfahren für mehrere Downloadpakete verwenden.
Was wäre sinnvoller?

1. Für jedes Downloadpaket einen eigenen Ordner, mit eigener Tabelle in der Datenbank, und eigener Passwortabfrage

oder

2. Ein Ordner, Ein Adminforumular, Eine Passwortabfrage. Nach der Passwortabfrage öffnet sich nur das Dokument, welches auch für den Nutzer vorgesehen ist.

Grüße aus Bremen

Dario




04.10.2005 13:32 | geändert: 04.10.2005 13:32

16 Jörg Kruse

User anlegen und bearbeiten könntest du auch einfach über phpMyAdmin. Ersteres geht z.B. über "Einfügen". Die Felder "UserID" und "UserSession" lässt du leer, für die anderen Felder gibst du die entsprechenden Werte ein, wobei für "UserPass" im Dropdownmenü Funktion noch "MD5" ausgewählt sein muss.

Man kann natürlich auch ein eigenes Admin-Formular entwerfen, ist halt eine Frage des Programmieraufwandes

Zu deiner zweiten Frage:

Sollen die Downloadpakete nacheinander oder gleichzeitig zur Verfügung gestellt werden?

04.10.2005 15:19

17 rockford

Gleichzeitig. Aber nicht jeder Nutzer hat das Recht jedes Paket zu sehen.



Ich bin zwar kein Freund von phpMyAdmin, aber es scheint echt das Beste zu sein. Nur wie das Funktionieren soll, ist mir noch nicht ganz klar. Wo soll ich das machen? Besonders in Bezug auf die verschiedenen Pakete?


Gruß

Rockford



04.10.2005 15:23

18 rockford

Gleichzeitig. Aber nicht jeder Nutzer hat das Recht jedes Paket zu sehen.



Ich bin zwar kein Freund von phpMyAdmin, aber es scheint echt das Beste zu sein. Nur wie das Funktionieren soll, ist mir noch nicht ganz klar. Wo soll ich das machen? Besonders in Bezug auf die verschiedenen Pakete?


Gruß

Rockford



04.10.2005 15:25

19 Jörg Kruse

Gleichzeitig. Aber nicht jeder Nutzer hat das Recht jedes Paket zu sehen.

Dafür reicht das bisherige Script wohl nicht mehr aus; würden die Downloads nacheinander vergeben, könnte man den Link bei einem neuen Paket einfach austauschen und die Passwörter neu vergeben und in die vorhandene Tabelle eintragen. Bei mehreren Paketen gleichzeitig muss man wohl eine zweite Tabelle für die Pakete anlegen, und mit der User-Tabelle verknüpfen.

Ich bin zwar kein Freund von phpMyAdmin, aber es scheint echt das Beste zu sein.

Ja, man kann schon 'ne Menge damit machen - und wenn man sich Programmierarbeit sparen möchte, kann man die Administration auch darüber machen ;)

Nur wie das Funktionieren soll, ist mir noch nicht ganz klar. Wo soll ich das machen?

Du musst in phpMyAdmin die Tabelle 'users' aufrufen, und dort den Menüpunkt 'einfügen' wählen; dann wie beschrieben das Formular ausfüllen, um einen neuen User hinzuzufügen.

Besonders in Bezug auf die verschiedenen Pakete?

Dafür müsste man das Script und die Tabellen auch noch weitergehender umarbeiten (s.o.)

04.10.2005 19:04

20 rockford

Hi Jörg,


kann ich nicht einfach mehrere Einträge in der Tabelle machen?

Also
user_pack1
user_pack2
user_pack3
usw.

Und dann in jedem Ordner dass jetzige System anwenden?

Gruß

Rockford

04.10.2005 21:12