[PHP&MySQL] Login mit PHP (Dreamweaver)

Oli28

Stammgast
Hallo Forum..


Jep das such ich.. hab schon ein bisschen gegoogelt, war mir leider immer (viel) zu kompliziert.

Was ich möchte ist in meine Website eine Login/Logout Funktion einbauen welche auf einen bestimmten Link hinweist. Sowohl bei richtigem als auch bei falschem PW.

Dieser ("
PHP:
 Login mit php") Thread hab ich schon gesehen, leider ist da die Rede von einer Problematik bei mehreren Usern was ich haben müsste.


Alle Beispiele welche ich gefunden haben verlangen einen "Datenbankname" voher krieg ich den? - habe meine Site bei Funpic.de atm..


Erste Versuche sind in arbeit, bis jetzt mit geringem Erfolg - brauche Unterstützung!



Danke
Oli
 
Zuletzt bearbeitet:

sergey

Stammgast
Hey,
jep wär dann mal wieder ein Spezialgebiet von mir.

Dazu brauche ich aber noch ein paar Infos:

- Mit MySQL oder ohne?
- PHP Version?
- Zugriff auf phpMyAdmin oder ähnlich?

Gruss

sergey
 

Oli28

Stammgast
Hey,
jep wär dann mal wieder ein Spezialgebiet von mir.

Dazu brauche ich aber noch ein paar Infos:

- Mit MySQL oder ohne?
- PHP Version?
- Zugriff auf phpMyAdmin oder ähnlich?

Gruss

sergey

Mit MySQL, dies sollte funpic haben
PHP Version? Abhängig von? Funpic oder Dreamwaver?
phpMyAdmin ist mir beim googlen über den weg gelaufen, habe aber noch nichts genaueres zu diesem "programm" herausgefunden


gruss

/edit: mein Hauptproblen ist z.Z. ich habe 100 Beispiele, finde aber die Zeile vo ich Username und PW reinschreiben muss (nich die zum Login sonder die Daten welcher nacher als richtig gewertet werden) nicht..
 
Zuletzt bearbeitet:

sergey

Stammgast
Mit MySQL, dies sollte funpic haben
PHP Version? Abhängig von? Funpic oder Dreamwaver?
phpMyAdmin ist mir beim googlen über den weg gelaufen, habe aber noch nichts genaueres zu diesem "programm" herausgefunden


gruss

/edit: mein Hauptproblen ist z.Z. ich habe 100 Beispiele, finde aber die Zeile vo ich Username und PW reinschreiben muss (nich die zum Login sonder die Daten welcher nacher als richtig gewertet werden) nicht..

Okay, funpic, dann sollte das keine Probleme bereiten.

Also, ich werde dann später nen kleinen Input posten, der ist nicht abgesichert nix, aber sollte so funktionieren.

Auf phpMyAdmin solltest du von deinem Account bei funpic zugriff haben. (Sollte dort auch schon vorinstalliert sein.)

Gruss

sergey
 

Oli28

Stammgast
Okay, funpic, dann sollte das keine Probleme bereiten.

Also, ich werde dann später nen kleinen Input posten, der ist nicht abgesichert nix, aber sollte so funktionieren.

Auf phpMyAdmin solltest du von deinem Account bei funpic zugriff haben. (Sollte dort auch schon vorinstalliert sein.)

Gruss

sergey

juhu :) google sei dank. :)

phpMyAdmin hab ich gefunden, weiter gehts.

Momentan versuche ich mich nach dieser Vorlage:
http://aktuell.de.selfhtml.org/artikel/php/loginsystem/index.htm


auf dein Input freu ich mich schon.


Oli
 

sergey

Stammgast
Sry, dass ich nicht früher geantwortet hab, war noch beschäftigt..., und dann hatte auch der PC noch einen Spinner... :mad:

Also, das Script sieht schon mal nicht schlecht aus.

Was da noch fehlt, ist die überprüfung der Daten aus der Datenbank. Du weiss wie du diese aus der Datenbank holst?

Hier mal eine kurze Loginfunktion von mir... (hat noch viele Dinge drin die nicht zu beachten sind.)

PHP:
function login($user, $pass) {
    mysql_real_escape_string($user);
    addslashes($pass);
    $pass = sha1($pass);
    $sid = session_id();
    $datum = date("j.m.Y");

    if (empty($user)) $error .= "<li>es wurde kein Username eingegeben.</li>";
    if (empty($pass)) $error .= "<li>es wurde kein Passwort eingegeben.</li>";
    if (empty($error)) {
   
        $query = "SELECT * FROM user WHERE name = '$user' LIMIT 1";
        $sql = mysql_query($query);
        if (!$sql) {   
            echo "Konnte nicht aus der Tabelle lesen.";
        } else {
            $result = mysql_num_rows($sql);
            if ($result == 0) {
                echo "Kein Benutzer mit diesem Namen vorhanden.";
            } else {
                $row = mysql_fetch_assoc($sql);
                if ($row['publik'] == 0) {
                    echo "Sie wurden im System gespeert.<br>\n";
                    echo "Wenn diese Speerung aufheben wollen, melden Sie dies dem Admin.<br>\n";
                    echo "<a href='index.php'>Index</a>\n";
                } elseif ($row['name'] == $user && $row['pw'] == $pass) {
                    $query = "UPDATE user SET lastlogin = '$datum', sessid = '$sid' WHERE id = '".$row['id']."'";
                    $sql = mysql_query($query);
                    if (!$sql) {
                        echo "Konnte die Tabelle nicht updaten.";
                    } else {
                        //Hier die Session reinsetzen (hab meine rausgenommen)
                        echo "Erfolgreich angemeldet.<br>";
                        echo "<a href='index.php'>Hier</a> gehts weiter.";
                    }
                } else {
                    echo "Fehlerhaftes Login.<br>";
                    echo "<a href='javascript:history.back()'>zurück</a>";
                }               
            }
        }   
    } else {
        echo "Sie konnten nicht eingeloggt werden weil:";
        echo "<ul>$error</ul>";
        echo "Gehen Sie <a href='javascript:history.back()'>zurück</a>";
    }
}

Hier wurde ausserdem mit einem Rechtesystem gearbeitet, die Loginzeit aktualisiert, und auf verschiedene weitere Dinge geachtet.

Hoffe konnte dir damit einen kleinen anstoss geben.

Gruss

sergey
 

Oli28

Stammgast
Hoffe konnte dir damit einen kleinen anstoss geben.

Kein Problem die "Verspätung"


Denkanstoss hab ich auch - muss aber wohl eine andere Suche aufmachen..

[Suche] PHP Vorlage für Login

oder so änlich, sonst werd ich den Durchblick so schnell nicht kriegen.

Ich versuch mich mal mit meinem Freund google noch und sonst sehen wir und später vlt nochmal :)


Danke.

oli
 

froeschli

Stammgast
Welchen Teil dieser Funktion hast du denn nicht verstanden?? Oder anders herum gefragt, bringst du schon Programmierkenntnisse mit (z.B. Java, PHP, JavaScript, SQL)?

Wenn du nur Teile von dem Code nicht verstehst, kann man dir hier sicherlich weiterhelfen. Ich lerne zur Zeit gerade im Studium mit PHP umzugehen (erste Erfahrungen bereits hinter mir) und habe auch schon einiges mit Java und SQL geschrieben. Daher mein Interesse daran, was du nicht verstehst. Alles was nicht verstanden wird, sollte dokumentiert werden...

Gruss froeschli
 

froeschli

Stammgast
Hehe, ich habs nicht so mit dokumentieren, vor allem wenn das zeugs (für mich) alles klar ist... (sollte auch in ein paar jahren noch so sein. :D)

Gruss

sergey

Das sollte kein Vorwurf an dich sein ;) Aber ich habe selber schon gemerkt, dass ich davon profitiere, wenn ich Code fortlaufen dokumentiere.... Ich bin schon öfters vor meinem eigenen Code gesessen, und habe mich gefragt, was der eigentlich macht. Über die Jahre ändert sich der eigene Programmierstil gewaltig und man blickt nicht mehr so einfach durch Workarounds, welche früher selbstverständlich waren....

Gruss froeschli
 

sergey

Stammgast
Das sollte kein Vorwurf an dich sein ;) Aber ich habe selber schon gemerkt, dass ich davon profitiere, wenn ich Code fortlaufen dokumentiere.... Ich bin schon öfters vor meinem eigenen Code gesessen, und habe mich gefragt, was der eigentlich macht. Über die Jahre ändert sich der eigene Programmierstil gewaltig und man blickt nicht mehr so einfach durch Workarounds, welche früher selbstverständlich waren....

Hehe, jaa das hatte ich auch schon..., ist dann ein blödes Gefühl, wenn man denn Code sieht, und erst einmal einfach überlegt... :D

Das mit dem Programmierstil habe ich auch schon festgestellt, hab mir mal Code von einer älteren Anwendung von mir angeschaut. Poah sieht der scheisse aus... :D

Gruss

sergey
 

Oli28

Stammgast
Welchen Teil dieser Funktion hast du denn nicht verstanden?? Oder anders herum gefragt, bringst du schon Programmierkenntnisse mit (z.B. Java, PHP, JavaScript, SQL)?

Währe wohl einfacher welchen Teil ich verstanden hab :(

Programmierkentnisse - Nein.


Wir haben das Thema atm in der Berufsschule, jedoch nur am rande weil mein Beruf nicht direkt mit Informatik o.ö. zu tun hat.


Ich dachte ein Login würd mich interessieren - In der Schule haben wirs nicht also hab ich mich hier mal gemeldet.


Das einzige was ich bis jetzt verstanden hab ist, dass der Code aus verschiedenen Teilen besteht, also der Login.php z.B. fragt bei einer Eingabe beim auth.php nach ob dieser Benutzer/Passwort vorhanden ist, wenn ja gibt er den Link frei.


Wenn ich ein fertiges Packet sehe ist für mich vlt möglich den Code nachzuvollziehen, einen Teil-Code versteh ich vlt auch noch aber kann ihn sicherlich nicht fertig schreiben.



Gruss
oli
 

froeschli

Stammgast
Währe wohl einfacher welchen Teil ich verstanden hab :(

Programmierkentnisse - Nein.

Wenn ich ein fertiges Packet sehe ist für mich vlt möglich den Code nachzuvollziehen, einen Teil-Code versteh ich vlt auch noch aber kann ihn sicherlich nicht fertig schreiben.

Ich werde mal versuchen sergeys Code zu dokumentieren....
@sergey: bitte korrigiere mich, wenn etwas nicht stimmen sollte.

PHP:
//mit function wird ein kleines Modul in PHP generiert, welches einen
//Input erhält ($user, $pass) und damit u.U. einen Output generiert
//(echo oder return).
//Variablen werden mit einem $-Zeichen gekennzeichnet.
function login($user, $pass) {
    mysql_real_escape_string($user); //keine Ahnung, was das macht.
    addslashes($pass); //keine Ahnung was das macht ;)
    $pass = sha1($pass); //das Passwort wird verschlüsselt(?) und in
                                    //eine Variable geschrieben.
    $sid = session_id(); //die aktuelle Session ID wird eingelesen
                                 //und in eine Variable geschrieben.
    //eine Session identifiziert einen Website Besucher eindeutig.
    //Somit kann immer auf die gleichen Daten zugegriffen werden
    //(Sinn eines Logins).
    $datum = date("j.m.Y"); //das aktuelle Datum wird in eine Variable geschrieben.

    // Mit der function empty() wird geprüft, ob die übergebene
    // Variable leer ist. Gibt true (leer) oder false (nicht leer) zurück.
    if (empty($user)) $error .= "<li>es wurde kein Username eingegeben.</li>";
    if (empty($pass)) $error .= "<li>es wurde kein Passwort eingegeben.</li>";
    // Falls Username oder PW fehlt, wird eine Fehlermeldung in die Variable $error geschrieben.
    // Das Skript soll nur fortfahren, wenn kein Fehler vorliegt, sprich,
    // wenn die Variable $error leer ist. D.h. der gesamte Bereich
    // innerhalb der geschweiften klammern wird bei einem Fehler übersprungen.
    if (empty($error)) {
   
        // Hier beginnen die SQL Abfragen:
        // Mit SELECT * werden alle Daten aus einer Tabelle
        // (hier FROM user) angefordert, mit der Einschränkung
        // (WHERE name = '$user') das der Wert in der Spalte Name
        // gleich dem übergebenen Usernamen ($user) entsprechen
        // soll und es soll maximal ein Ergebnis ausgegeben werden
        // (LIMIT 1).

        // Die Abfrage wird in die Variable $query geschrieben.
        $query = "SELECT * FROM user WHERE name = '$user' LIMIT 1";
        
        // und mit der function mysql_query() ausgeführt.
        $sql = mysql_query($query);
        
        // wenn keine Antwort zurück kommt, gibts einen Fehlerstring.
        if (!$sql) {   
            echo "Konnte nicht aus der Tabelle lesen.";
        } else { //sonst wird weitergemacht.

        // Die Anzahl Zeilen des Resultates wird ausgelesen,
        // und in eine Variable geschrieben.
            $result = mysql_num_rows($sql);
            if ($result == 0) { //Bei keinem Resultat => Fehlermeldung)
                echo "Kein Benutzer mit diesem Namen vorhanden.";
            } else { // sonst weiterfahren
        // Hier hat sergey eine Möglichkeit geschaffen, um Benutzer zu sperren.
                $row = mysql_fetch_assoc($sql);
                if ($row['publik'] == 0) {
                    echo "Sie wurden im System gespeert.<br>\n";
                    echo "Wenn diese Speerung aufheben wollen, melden Sie dies dem Admin.<br>\n";
                    echo "<a href='index.php'>Index</a>\n";
                // Wenn User und PW übereinstimmen, fahre fort.
                } elseif ($row['name'] == $user && $row['pw'] == $pass) {
                    $query = "UPDATE user SET lastlogin = '$datum', sessid = '$sid' WHERE id = '".$row['id']."'";
                    $sql = mysql_query($query);
                    if (!$sql) {
                        echo "Konnte die Tabelle nicht updaten.";
                    } else {
                        //Hier die Session reinsetzen (hab meine rausgenommen)
                        // Hier kannst du definieren, was nach dem Login geschehen soll.
                        echo "Erfolgreich angemeldet.<br>";
                        // Diesen Link würde ich noch anpassen, sonst
                        // gelangst du wieder zum Anfang zurück.
                        echo "<a href='index.php'>Hier</a> gehts weiter.";
                    }
                // Sonst generiere eine Fehlermeldung.
                } else {
                    echo "Fehlerhaftes Login.<br>";
                    echo "<a href='javascript:history.back()'>zurück</a>";
                }               
            }
        }   
    } else {
        echo "Sie konnten nicht eingeloggt werden weil:";
        echo "<ul>$error</ul>";
        echo "Gehen Sie <a href='javascript:history.back()'>zurück</a>";
    }
}

Vielleicht verstehst du es jetzt etwas besser. Aber wenn du gar keine Programmierkenntnisse hast, wird es sicherlich schwer, alles nach zu vollziehen.... ansonsten einfach Fragen ;)

Gruss froeschli
 

Oli28

Stammgast
Verstehe ich schon besser. aber da fehlt die Datenbank der Users ja noch oder?

Was ist denn der Unterschied zu diesem Code?

Login.php
PHP:
<?php
     if ($_SERVER['REQUEST_METHOD'] == 'POST') {
      session_start();

      $username = $_POST['username'];
      $passwort = $_POST['passwort'];

      $hostname = $_SERVER['HTTP_HOST'];
      $path = dirname($_SERVER['PHP_SELF']);

      // Benutzername und Passwort werden überprüft
      if ($username == 'benjamin' && $passwort == 'geheim') {
       $_SESSION['angemeldet'] = true;

       // Weiterleitung zur geschützten Startseite
       if ($_SERVER['SERVER_PROTOCOL'] == 'HTTP/1.1') {
        if (php_sapi_name() == 'cgi') {
         header('Status: 303 See Other');
         }
        else {
         header('HTTP/1.1 303 See Other');
         }
        }

       header('Location: http://'.$hostname.($path == '/' ? '' : $path).'/index.php');
       exit;
       }
      }
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
 <head>
  <title>Geschützter Bereich</title>
 </head>
<body>
  <form action="login.php" method="post">
   Username: 
     <input type="text" name="username" />
    <br />
   Passwort: <input type="password" name="passwort" /><br />
   <input type="submit" value="Anmelden" />
  </form>
</body>
</html>

Auth.php
PHP:
<?php
     session_start();

     $hostname = $_SERVER['HTTP_HOST'];
     $path = dirname($_SERVER['PHP_SELF']);

     if (!isset($_SESSION['angemeldet']) || !$_SESSION['angemeldet']) {
      header('Location: http://'.$hostname.($path == '/' ? '' : $path).'/login.php');
      exit;
      }
?>


Logout.php
PHP:
<?php
     session_start();
     session_destroy();

     $hostname = $_SERVER['HTTP_HOST'];
     $path = dirname($_SERVER['PHP_SELF']);

     header('Location: http://'.$hostname.($path == '/' ? '' : $path).'/login.php');
?>

Der is irgenwie so kurz :)

Wahrscheindlich eher "rudimentär"


Interessieren würd mich bei diesem Code wo genau ich da jetzt eine Tabelle mit den User/PW's erstellen kann, müsste wenn ich das richtig verstanden hab im "auth.php" sein vobei ich da nirgens eine Möglichkeit sehe. :(

/edit: sehe gerade im login.php in diesem Teil
PHP:
      // Benutzername und Passwort werden überprüft
      if ($username == 'benjamin' && $passwort == 'geheim') {
       $_SESSION['angemeldet'] = true;

Kann ich die User eingeben, aber: Wie kann ich mehrere? einfach so?

PHP:
      // Benutzername und Passwort werden überprüft
      if ($username == 'benjamin' && $passwort == 'geheim') {
      if ($username == 'test1' && $passwort == '1234') {
      if ($username == 'test2' && $passwort == '4321') {
       $_SESSION['angemeldet'] = true;


/edit2: nein offensichtlich nicht.. dann kommt diese Meldung:
"Parse error: syntax error, unexpected $end in /usr/export/www/vhosts/funnetwork/hosting/meinname/Members/Login3/login.php on line 49"


Danke fürs Dokumentieren
oli
 
Zuletzt bearbeitet:

froeschli

Stammgast
Verstehe ich schon besser. aber da fehlt die Datenbank der Users ja noch oder?

Was ist denn der Unterschied zu diesem Code?

Login.php
PHP:
      // Benutzername und Passwort werden überprüft
      if ($username == 'benjamin' && $passwort == 'geheim') {

Der is irgenwie so kurz :)

Wahrscheindlich eher "rudimentär"


Interessieren würd mich bei diesem Code wo genau ich da jetzt eine Tabelle mit den User/PW's erstellen kann, müsste wenn ich das richtig verstanden hab im "auth.php" sein vobei ich da nirgens eine Möglichkeit sehe. :(

Bei dieser Lösung handelt es sich um einen Ein-User-System.... im genannten Beispiel gibt es nur den User benjamin mit dem Passwort geheim. Wenn du hier einen Mehr-User-System draus machen willst, musst du auf ein Array zurückgreifen. Das eignet sich aber lediglich für eine kleine Anzahl von Usern....

Gruss froeschli
 

Oli28

Stammgast
Bei dieser Lösung handelt es sich um einen Ein-User-System.... im genannten Beispiel gibt es nur den User benjamin mit dem Passwort geheim. Wenn du hier einen Mehr-User-System draus machen willst, musst du auf ein Array zurückgreifen. Das eignet sich aber lediglich für eine kleine Anzahl von Usern....

Gruss froeschli

Kleine Anzahl Usern = Weniger Kompliziert? :)


Ich brauch nicht soo viele.. ist eigentlich sowieso nur ein Loginbereich damit ich was lernen kann.

Ich google mal dieses Array system.


Danke
 

Oli28

Stammgast
also :)

über das Array System hab ich nicht viel gefunden.. hast Du eine zu empfehlen Seite?



So sieht mein Login Teil atm aus:

PHP:
<?php 
     if ($_SERVER['REQUEST_METHOD'] == 'POST') { 
      session_start(); 

      $username = $_POST['username']; 
      $passwort = $_POST['passwort']; 

      $hostname = $_SERVER['HTTP_HOST']; 
      $path = dirname($_SERVER['PHP_SELF']); 

      // Benutzername und Passwort werden überprüft 
      if ($username == 'Oli' && $passwort == '0000') { 
       $_SESSION['angemeldet'] = true; 

       // Weiterleitung zur geschützten Startseite 
       if ($_SERVER['SERVER_PROTOCOL'] == 'HTTP/1.1') { 
        if (php_sapi_name() == 'cgi') { 
         header('Status: 303 See Other'); 
         } 
        else { 
         header('HTTP/1.1 303 See Other'); 
         } 
        } 

       header('Location: http://'.$hostname.($path == '/' ? '' : $path).'/Members2.php'); 
       exit; 
       } 
      } 
?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de"> 
 <head> 
  <title>Geschützter Bereich</title> 
 </head> 
<body> 
  <form action="login_save.php" method="post"> 
   Username:  
    <input type="text" name="username" /> 
    <br /> 
   Passwort: <input type="password" name="passwort" /><br /> 
   <input type="submit" value="Anmelden" /> 
  </form> 
</body> 
</html>

Nur kann ich wenn ich den Link kenne auch ohne PW auf die Seite, da muss ich doch was includen oder?
 

Dragonlord

PCtipp-Moderation
Teammitglied
PHP/MySQL

Sorry, dass ich mich jetzt einmische, aber das mit dem Array würde ich vergessen.

Binde doch einfach eine MySQL Datenbank ein und dann kannst Du beliebig viele User definieren.

Den Code dazu könnte ich dir liefern.

lg Roger
 

Oli28

Stammgast
Sorry, dass ich mich jetzt einmische, aber das mit dem Array würde ich vergessen.

Binde doch einfach eine MySQL Datenbank ein und dann kannst Du beliebig viele User definieren.

Den Code dazu könnte ich dir liefern.

lg Roger

Kein Problem - nur einmischen :)


Eine MySQL Datenbank includen anstelle von diesem Code?

Login.php

PHP:
      // Benutzername und Passwort werden überprüft 
      if ($username == 'benjamin' && $passwort == 'geheim') {


Gerne, klingt einfach für mich - würd mich über den Code freuen.


Gruss oli
 
Oben