PHP Datenbankabfrage in diese Skript einbauen?

tommy99

Grünschnabel
Hallo Leute.

Ich möchte gerne einen Geschützten bereich auf meiner homepage erstellen.Dazu habe ich folgendes gefunden : http://aktuell.de.selfhtml.org/artikel/php/loginsystem/

Dort steht das man neben einer Festlegung der Login-Daten im Skript diese auch über eine datenbank anlegen kann und auslesen kann damit man mehrere benutzer hat.

Wie kann ich das jetzt in diese Skript integrieren?Von Datenbank abfragen habe ich fast keine ahnung.Habe lediglich vor geraumer zeit mal einwenig damit rumexpereimentiert.


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>
 
Moin,

also ohne grundlegendes Wissen über Datenbanken könnte das ein bisschen problematisch werden (für dich).
Ich könnte dir jetzt sagen, dass du folgenden Teil des Skriptes ersetzen müsstest:

PHP:
if ($username == 'benjamin' && $passwort == 'geheim') {...

Das ganze ist hier ja statisch im Dokument hinterlegt und deshalb für mehrere Benutzer nicht handlich...an diese Stelle müsste demnach eine Datenbankabfrage, die vorhergegangene Eingaben aus eben jener Datenbank filtert, eingesetzt werden.
Stimmen diese überein, dann wird der Benutzer auf die von dir gewünschte Seite weitergeleitet.

Soweit zum Prinzip....
Aber nun nochmal zur Problematik deines Wissensstandes zurück.
Wenn du dich damit nun wirklich garnicht auskennst, dann wäre es wahrscheinlich besser für dich, dass du dich erstmal ein wenig in die Materie einliest, denn sonst bringen dir etwaige Code-Schnipsel auch nicht viel.

Vllt. hast du aber auch schon eine DB mit entsprechender Struktur vorliegen, oder bist du im Moment nur im Besitz des Skriptes....das wäre als kleine Nebeninfo noch nützlich.
 
Also sagen wir es so ich bin jetzt kein PHP Freak der jemandem in 5 minuten alles macht was er will aber so schlecht bin ich auch wieder nicht ich habe vor einniger zeit ca 3 wochen datenbank abfragen gemacht mit php skripten siehe hier : http://www.tom-testet.square7.ch/db_abfragen/ kannst du dir ja mal angucken.Mein problem hier ist einfach das ich nicht genau weis WIE ich das ersetzen soll und auch Womit ich bin auch gewollt da alles zu versuchen nur weis ich eben nicht genau wie und womit.



MFG Tom
 
OK,

dann stell dich doch bitte nicht schlechter hin als getan.
Also ich geh jetzt einfach mal davon aus, dass das hier zu Testzwecken genutzt wird und nicht final werden soll, was die DB-Struktur angeht, weshalb ich mich in der DB auf 3 Spalten beschränke:
ID, Username, Password

So dann hier mal ein MÖGLICHER Weg der Lösung:

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

          $username = mysqli_real_escape_string($_POST['username']); 
          $passwort = mysqli_real_escape_string($_POST['passwort']); 

          $hostname = $_SERVER['HTTP_HOST']; 
          $path = dirname($_SERVER['PHP_SELF']);
		  
		  
		  // Zusatzvariablen
		  $host = "testhost";
		  $user = "user";
		  $pw	= "pw";
		  $db	= "testDB";
		  // Datenbankverbindung herstellen
		  $db_conn = new mysqli($host, $user, $pw, $db) or die("Verbindung zur DB konnte nicht hergestellt werden!");
		  
		  // Abfrage einfügen
		  $request = mysqli_query($db_conn, "SELECT * FROM test WHERE Username = '".$username."' AND Password = '".$passwort."'");
		  // Anzahl der betroffenen Datensätze
		  $quantity = mysqli_num_rows($request);
 
                  //Datenbankverbindung wieder schließen
		  mysqli_close($db_conn);
		  

          // Benutzername und Passwort werden überprüft 
          if ($quantity == 1) { 
           $_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>

Natürlich müssen die Zusatzvariablen noch angepasst werden, aber das sollte nicht das Problem sein.
Ich hoffe, dass das deinen Vorstellungen entspricht ;).
 
Zuletzt bearbeitet:
Du brauchst erstmal eine Datenbank. Darin erstellst du eine Benutzer-Tabelle.
Hier mal die eine Grundstruktur:
Code:
id | username | pw
Und der (My)SQL-Code dafür:
SQL:
CREATE TABLE users
(
  id INTEGER UNSIGNED AUTO_INCREMENT,
  username VARCHAR(10) UNIQUE,
  pw VARCHAR(64),

  PRIMARY KEY(id)
)
id ist einfach ein eindeutiger Integer pro Datensatz, username der Benutzername und pw das mit sha256 gehashte Passwort.

Dann brauchst du noch ein PHP-Skript, das die Daten vom Login-Formular überprüft, z.B.:
PHP:
<?php
  session_start();
  
  if (isset($_POST['username']) && isset($_POST['password']))
  {
    $username = mysql_real_escape_string($_POST['username']);
    $password = hash('sha256', $_POST['password']);
    
    mysql_connect('server', 'username', 'password');
    $result = mysql_query("SELECT id FROM users WHERE username='$username' AND pw='$password' LIMIT 1");
    if (mysql_num_rows($result)>0)
    /* Wenn kein Benutzername und Passwort mit den Daten übereinstimmt */
    /* Also nichts gefunden worden ist */
    {
       /* User mit angebenen Passwort existiert */
       $_SESSION['loggedIn'] = true;
       $_SESSION['username'] = $username;
       $_SESSION['userid'] = intval( mysql_result($result, 1) );
    }
    else 
    {
       /* Benutzername und/oder Passwort waren nicht korrekt */
       /* Do something */
    }
  }
  else
  {
    /* Keine Daten wurden übergeben */
    /* Do something */
  }

?>
Und dann musst du in jedem Skript, das im Admin-Bereich ist, folgendes an den Anfang schreiben:
PHP:
<?php
  if ( !isset($_SESSION['loggedIn']) )
    die('Access denied!');

/* Jetzt kommt der eigentliche Code */
?>
 
Hey das ist ja toll das mir gleich so gut geholfen wird ich beziehe mich jetzt erstmal auf die version von Alex_T es stellen sich mir eine frage die Zusatzvariabeln sind das der host zb. http://www.tom-testet.square7.ch pw halt das passwort der db und username dann tom-testet(das ist mein username.


Jetzt zu ComFreek:

Ist meiner meinung nach ein guter Code nur leider verstehe ich grade nciht so wie ich das login formular dazu bringen die daten mit deinem skript zu überprüfen.

MFG Tom


PS: Schonmal vorab vielen dank für eure Hilfe
 
Alex_T es stellen sich mir eine frage die Zusatzvariabeln sind das der host zb. http://www.tom-testet.square7.ch pw halt das passwort der db und username dann tom-testet(das ist mein username.
Schau mal in dein Webspace-Übersicht. Da müsste es stehen.
Bei Square7 ist der Server localhost. Den Benutzernamen hast du selber vergeben bzw. bei der ersten Datenbank ist das dein Benutzername, also testet.
Das Passwort ist genau das, was du eingegeben hast ;)

Ist meiner meinung nach ein guter Code nur leider verstehe ich grade nciht so wie ich das login formular dazu bringen die daten mit deinem skript zu überprüfen.
Ein ganz einfaches Formular ;)
HTML:
<form action="login.php" method="post">
  Benutzername: <input type="text" name="username" /><br />
  Passwort: <input type="password" name="password" /><br />
  <input type="submit" value="Login!" />
</form>
Mein PHP-Skript musst du dann eben noch "login.php" nennen.

Wenn du auf "Login!" klickst, werden die Daten an mein Skript gesendet und es wird in der DB nachgeschaut, ob der Benutzer mit diesem Passwort existiert.
 
Hallöle nochmal,

also da hat dir ComFreek aber mal ein rundum-sorglos-Paket geschnürt, dafür ein Danke von mir.

Also bzgl. den Zusatzvariablen:
Bei bPlaced (square7 ist meines Wissens nach nur ein Abzweig dessen), läuft der Host als "localhost". Der Benutzer ist dein Login-Name, also "tom-testet". Sollte bei Square7 demnach ähnlich ablaufen, aber vorsichtshalber nochmal dort nachschauen.
 
Genial Leute vielen vielen Dank für eure Hilfe. Das gibt erstmal ein dickes Danke.

Kennt ihr noch ein gutes Buch(ebook oder reales buch) bzw. cd/DVD wo man gut php html JS und dergleichen gut lernen kann?Können auch Videos im Internet sein.



edit: Werde euch Natürlich in meinem Code und in meiner Website mit einbauen habt ihr Homepages die euch gehören oder eine idde worauf ich euch verlinken kann?
 
Zurück