Ein paar mal nachgefragt, ein paar Ankündigungen & ich bin erster
Vorab: Das hier sind nur die Basics - um Sachen wie Shops etc. müsst ihr euch selber kümmern
Ich werde hier auch nur die Funktionen vorstellen, also werde ihr hier nichts OOP sehen - nicht mal selbstgeschriebene Funktionen
Fangen wir direkt an, indem wir eine Session initialisieren.
Wichtig: Die Session muss initialisiert werden, bevor das erste Zeichen ausgegeben wird - das liegt damit zusammen, dass die Session ein Cookie erstellt, was der Webserver im Header sendet - also muss es vor der ersten Ausgabe kommen
Den Anfang legt das HTML-Grundgerüst ( HTML5 ), was wir sicher alle kennen
<?php session_start(); ?><html lang="de"> <head> <meta charset="utf-8" /> <title>Mein UCP</title> </head> <body> [ Webseiteninhalt hier rein ] </body></html>
Fangen wir mit unserer ersten Abfrage ab, ob der Benutzer eingeloggt ist:
<?php if(isset($_SESSION['logedin']) && $_SESSION['logedin'] == true) { // Hier ist der Benutzer eingeloggt } else { // Hier nicht }?>
Wenn er nicht eingeloggt ist, unterscheiden wir noch mal, ob er das Formular abgesendet hat, oder nicht:
<?php if(isset($_SESSION['logedin']) && $_SESSION['logedin'] == true) { // Hier ist der Benutzer eingeloggt } else { // Der Benutzer ist nicht eingeloggt if(isset($_POST['username']) && isset($_POST['password'])) { // Das Formular ist abgesendet worden -> verarbeiten } else { // Das Formular ist nicht abgesendet echo <<<FORMULAR <form action="index.php" method="post"> Benutzername:<br /> <input type="text" name="username" /><br /> Passwort:<br /> <input type="password" name="password" /><br /> <input type="submit" value="Absenden" /> </form>FORMULAR; } }?>
Wenn wir die Seite jetzt in einem Browser aufrufen, werden wir das Formular sehen, und beim Absenden, nichts.
Was wir jetzt machen, wir verbinden uns auf den FTP-Server und downloaden die Benutzerdatei. Dann prüfen wir, ob sie erfolgreich gedownloaded wurde - falls ja, prüfen wir das Passwort. Ist auch das richtig, loggen wir den Benutzer ein:
<?php if(isset($_SESSION['logedin']) && $_SESSION['logedin'] == true) { // Hier ist der Benutzer eingeloggt } else { // Der Benutzer ist nicht eingeloggt if(isset($_POST['username']) && isset($_POST['password'])) { // Das Formular ist abgesendet worden -> verarbeiten // Verbinden zu dem FTP-Server "127.0.0.1" auf Port 21 $ftp = ftp_connect("127.0.0.1", 21); // Einloggen mit dem Benutzer "bla" und dem Passwort "blub" ftp_login($ftp, "bla", "blub"); // Wechseln in das Verzeichnis "scriptfiles/Accounts" ftp_chdir($ftp, "scriptfiles/Accounts"); // Versuche, die Datei "benutzername.ini" zu downloaden. // Der zweite Parameter gibt den Namen auf dem Webspace an, der dritte auf dem FTP-Server. Mit dem viertem sagen wir, dass wir die Datei in dem ASCII-Modus haben wollen. ftp_get($ftp, 'cache/'. $_POST['username'] .'.ini.cache', $_POST['username'] .'.ini', FTP_ASCII); // Prüfen, ob die Datei existiert. Wenn ja, download erfolgreich if(file_exists('cache/'. $_POST['username'] .'.ini.cache')) { // Der Benutzer existiert - wir lesen seine Datei aus ( die wir gedownloaded haben ) // Dazu nutzen wir parse_ini_file - das geht die Datei zeilenweise durch und macht aus einer Zeile "Key=xxx" folgendes: $array['Key'] = "xxx" $player = parse_ini_file('cache/'. $_POST['username'] .'.ini.cache'); // Jetzt prüfen wir, ob das Passwort stimmt. WICHTIG: Bei einem GF müsst ihr das PW evtl. verschlüsseln ! if($player['Key'] == $_POST['password']) { // Der Benutzer hat sich erfolgreich eingeloggt echo 'Du hast dich erfolgrecih eingeloggt.'; // Jetzt setzen wir die Session-werte: $_SESSION['logedin'] = true; $_SESSION['user'] = $_POST['username']; } else { // Die Passwörter stimme nicht überein echo 'Das Passwort ist falsch !'; } } else { // Der Benutzer existiert nicht echo 'Der Loginist falsch !'; } } else { // Das Formular ist nicht abgesendet echo <<<FORMULAR <form action="index.php" method="post"> Benutzername:<br /> <input type="text" name="username" /><br /> Passwort:<br /> <input type="password" name="password" /><br /> <input type="submit" value="Absenden" /> </form>FORMULAR; } }?>
Aus Übersichtsgründen kommt jetzt nur noch der obere Teil
<?php if(isset($_SESSION['logedin']) && $_SESSION['logedin'] == true) { // Hier ist der Benutzer eingeloggt $player = parse_ini_file('cache/'. $_POST['username'] .'.ini.cache'); echo'Wilkommen im Controlpanel, '. $_SESSION['username'] .'<br />'; // <- erinnert ihr euch ? Die haben wir bei dem Login gesetzt ;) echo'Du bist Level '. $player['Level'] .'<br />'; // In der Datei steht "Level=5", dann steht hier "Du bist Level 5" if($player['ALevel'] >= 1) // Wenn das ALevel ( Godfatherisch für AdminLevel ) größer als 1 ist, das auch ausgeben echo'Du bist Admin Level '. $player['ALevel'] .'<br />'; } else { [...]
Und hier noch mal alles zusammen:
<?php session_start(); // Eine neue Session-ID bei jedem Aufruf generieren - nur beim Login geht schlecht, // da vorher Text ausgegeben wird und ich euch nicht mit OutputStream-Bufferring belästigen möchte // „false“ bedeutet, alle Variablen nicht löschen. session_regenerate_id(false);?><html lang="de"> <head> <meta charset="utf-8" /> <title>Mein UCP</title> </head> <body><?php // Einrücken müsst ihr selber :P if(isset($_SESSION['logedin']) && $_SESSION['logedin'] == true) { // Hier ist der Benutzer eingeloggt $player = parse_ini_file('cache/'. $_POST['username'] .'.ini.cache'); echo'Wilkommen im Controlpanel, '. $_SESSION['username'] .'<br />'; // <- erinnert ihr euch ? Die haben wir bei dem Login gesetzt ;) echo'Du bist Level '. $player['Level'] .'<br />'; // In der Datei steht "Level=5", dann steht hier "Du bist Level 5" if($player['ALevel'] >= 1) // Wenn das ALevel ( Godfatherisch für AdminLevel ) größer als 1 ist, das auch ausgeben echo'Du bist Admin Level '. $player['ALevel'] .'<br />'; } else { // Der Benutzer ist nicht eingeloggt if(isset($_POST['username']) && isset($_POST['password'])) { // Das Formular ist abgesendet worden -> verarbeiten // Verbinden zu dem FTP-Server "127.0.0.1" auf Port 21 $ftp = ftp_connect("127.0.0.1", 21); // Einloggen mit dem Benutzer "bla" und dem Passwort "blub" ftp_login($ftp, "bla", "blub"); // Wechseln in das Verzeichnis "scriptfiles/Accounts" ftp_chdir($ftp, "scriptfiles/Accounts"); // Versuche, die Datei "benutzername.ini" zu downloaden. // Der zweite Parameter gibt den Namen auf dem Webspace an, der dritte auf dem FTP-Server. Mit dem viertem sagen wir, dass wir die Datei in dem ASCII-Modus haben wollen. ftp_get($ftp, 'cache/'. $_POST['username'] .'.ini.cache', $_POST['username'] .'.ini', FTP_ASCII); // Prüfen, ob die Datei existiert. Wenn ja, download erfolgreich if(file_exists('cache/'. $_POST['username'] .'.ini.cache')) { // Der Benutzer existiert - wir lesen seine Datei aus ( die wir gedownloaded haben ) // Dazu nutzen wir parse_ini_file - das geht die Datei zeilenweise durch und macht aus einer Zeile "Key=xxx" folgendes: $array['Key'] = "xxx" $player = parse_ini_file('cache/'. $_POST['username'] .'.ini.cache'); // Jetzt prüfen wir, ob das Passwort stimmt. WICHTIG: Bei einem GF müsst ihr das PW evtl. verschlüsseln ! if($player['Key'] == $_POST['password']) { // Der Benutzer hat sich erfolgreich eingeloggt echo 'Du hast dich erfolgrecih eingeloggt.'; // Jetzt setzen wir die Session-werte: $_SESSION['logedin'] = true; $_SESSION['user'] = $_POST['username']; } else { // Die Passwörter stimme nicht überein echo 'Das Passwort ist falsch !'; } } else { // Der Benutzer existiert nicht echo 'Der Loginist falsch !'; } } else { // Das Formular ist nicht abgesendet echo <<<FORMULAR <form action="index.php" method="post"> Benutzername:<br /> <input type="text" name="username" /><br /> Passwort:<br /> <input type="password" name="password" /><br /> <input type="submit" value="Absenden" /> </form>FORMULAR; } }?> </body></html>
Werde das später noch um das Updaten der Benutzerdatei erweitern
Fragen und Feedback drüft ihr gerne posten, solange es sachlich + begründet(Fragen braucht ihr nicht begründen) ist und keine Beleidigungen enthält ( muss man in diesem Board leider sagen )
Neu: SFTP-Version - benötigt ssh2-lib, einfach Packet ssh2-php nachinstallieren, wenn noch nicht getan
Liebe Grüße
Tion
e1: Session regenerate id
e2: SFTP Versiob