André: Admin Bereich

Hallo zusammen und einen wunderschönen guten morgen :)
Ich habe gestern das Design einer Sport Homepage fertig gestellt. Da auf dieser Seite ständig neue News erscheinen sollen, habe ich gedacht ich richte für den Sportverein ein Admin Bereich ein, in dem dann der User mit Passwort die News schreiben kann und dass dann auf der Page erscheint. So habe ich wieder mehr Zeit ! Ich habe gelesen, dass so etwas mit php und Datenbanken geht ?

Meine Frage:
Wie erstelle ich so einen Bereich ?
Eine Datenbank habe ich schon angelegt.

Gibt es vielleicht ein Tutorial dazu, in dem Schritt für Schritt so ein Admin-Bereich aufgebaut ist ?

Würde mich sehr über Antworten freuen.

Gruß André Albrecht

  1. Morgen André,

    Wie erstelle ich so einen Bereich ?

    Dafür gibt es verschiedene Wege, weshalb ich mal versuche zu erklären, wie das Prinzip funktionieren könnte.

    Zuerst benötigst du eine Zugriffsbeschränkung. Die könntest du am einfachsten mit Hilfe von .htaccess erstellen. Du legst ein Verzeichnis an, wo für den Zugriff eine Authentifizierung nötig ist. Wie sowas geht, findest du hier beschrieben:

    http://de.selfhtml.org/diverses/htaccess.htm#verzeichnisschutz

    Wenn du eine Datenbank benutzt, könntest du es IMHO auch über verschiedene User lösen. Du legst einen Gastuser an, der nur aus der Datenbank lesen, aber nicht schreiben kann. Weiterhin legst du einen User Admin an, der nicht nur lesen, sondern auch schreiben darf. Informationen hierzu gibt dir die Dokumentation: http://dev.mysql.com/doc/mysql/de/MySQL_Database_Administration.html. Wenn also jemand auf einen Link "News hinzufügen" klickt, kommen zwei Eingabefelder "Name" und "Passwort", mit den eingegebenen Werten versuchst du, die Datenbankverbindung aufzubauen (http://de.php.net/manual/de/function.mysql-connect.php), im Misserfolgsfall leitest du auf eine Fehlerseite um ("Sie haben keine Berechtigung" oder sowas), im Erfolgsfall auf das Eingabeformular.

    Damit wäre sichergestellt, dass nur Berechtigte in deine Datenbank schreiben können. Den Gastuser kannst du für die Abfrage der in der DB enthaltenen News verwenden. Du kreierst eine Seite, z.B. news.php, die beim Aufruf mittels Gastuser die News aus der Datenbank liest und sie nett gestaltet ausgibt. Einen Überblick über die mySQL-Funktionen von PHP gibt dir http://de.php.net/manual/de/ref.mysql.php.

    Den Gastuser kannst du evtl. auch ganz weglassen, wenn es niemanden geben soll, der nur lesen darf und sich zu diesem Zweck irgendwo identifizieren muss.

    Freundschaft!
    Siechfred

    --
    Punk's not dead: http://www.siechfreds-welt.de/badreligion.shtml
    Dankbarkeit, man spürt sie ja so selten bei den Menschen, und gerade die Dankbarsten finden nicht den Ausdruck dafür, sie schweigen verwirrt, sie schämen sich und tun manchmal stockig, um ihr Gefühl zu verbergen. (Stefan Zweig)
    1. Ich nochmal.

      Ich bin einfach davon ausgegangen, dass deine Datenbank eine mySQL-DB ist. Sollte dem nicht so sein, ist das Prinzip zwar das Gleiche, nur die Verweise zur mySQL-Dokumentation und zu den mySQL-Funktionen von PHP nützen dir dann wenig :)

      Freundschaft!
      Siechfred

      --
      Punk's not dead: http://www.siechfreds-welt.de/badreligion.shtml
      Dankbarkeit, man spürt sie ja so selten bei den Menschen, und gerade die Dankbarsten finden nicht den Ausdruck dafür, sie schweigen verwirrt, sie schämen sich und tun manchmal stockig, um ihr Gefühl zu verbergen. (Stefan Zweig)
      1. Hallo und danke für eure sehr informativen Antworten.

        @ Sichfred:

        Ja, ich habe die Datenbank von mySQL !!

        Ich weiß nicht wo ich anfangen muss. Könnte mir jemand so kleine Schritte aufschreiben oder ähnliches ?

        Danke andré

        1. Hallo André.

          Ja, ich habe die Datenbank von mySQL !!

          Na, dann passt es ja :)

          Ich weiß nicht wo ich anfangen muss. Könnte mir jemand so kleine Schritte aufschreiben oder ähnliches ?

          1. Passworteingabeseite
          -----------------------

          Ein stinknormales HTML-Formular mit zwei Inputfeldern Name und Passwort:

          http://de.selfhtml.org/html/formulare/eingabe.htm#felder
          http://de.selfhtml.org/html/formulare/eingabe.htm#felder_passwort

          Als Ziel gibst du ein PHP-Skript an, nennen wir es mal connect.php.

          2. Skript connect.php
          ---------------------

          Dieses Script mach nichts anderes, als zu versuchen, eine Verbindung zu deiner News-DB aufzubauen. Als Nutzername und Passwort werden die Werte aus deinem Formular genommen:

          http://www.dclp-faq.de/q/q-formular-variablen.html

          Für den Verbindungsversuch siehe:

          http://de.php.net/manual/de/function.mysql-connect.php

          Bei Misserfolg leitet das Script den Client auf eine Fehlerseite um, im Erfolgsfall wird das Eingabeformular angezeigt. Bei der Umleitung hilft dir die header-Funktion:

          http://de.php.net/manual/de/function.header.php

          Z.B. so:

          <?php
            $link = mysql_connect('localhost', '$_POST['name']', '$_POST['passwort']');
            if (!$link) {
              header("Location: http://www.example.com/fehlerseite.html");
              exit;
            }
            mysql_close($link);
          ?>
          <-- Formular zur Eingabe der News --/>

          Das Newsformular muss seinerseits wieder ein PHP-Script als Ziel haben, in welchem dann die News in die mySQL-Datenbank eingetragen werden.

          Ob dieser Weg jetzt der Weisheit letzter Schluss ist, mögen die PHP-Cracks beurteilen. Jedenfalls hast du jetzt einen Lösungsansatz und bist am Zug :)

          Freundschaft!
          Siechfred

          --
          Punk's not dead: http://www.siechfreds-welt.de/badreligion.shtml
          Dankbarkeit, man spürt sie ja so selten bei den Menschen, und gerade die Dankbarsten finden nicht den Ausdruck dafür, sie schweigen verwirrt, sie schämen sich und tun manchmal stockig, um ihr Gefühl zu verbergen. (Stefan Zweig)
          1. Danke und Hallo Sichfred,
            mit deiner antwort hast du mir sehr geholfen. Natürlich habe ich noch weitere Fragen zu dem Thema:

            Ich habe mir jetzt eine php Datei erstellt, in der Das Anmelde und Passwort Feld ist.

            Dann hast du ja geschrieben, dass ich eine weitere php Datei erstellen soll ( conntent.php oder so) und da soll irgendein phpScript rein. Gibt es einen fertigen Script ? Woher weiß denn das phpScript, wer sich da anmeldet und ob der eine erlaubnis hat ??

            Außderdem möchte ich gerne noch weiteres über die Datenbank erfahren, denn ich weiß nicht, wie ich jetzt ein Bereich erstelle, in dem ich die z.B. News bearbeiten und neu machen kann !

            Danke + Gruß

            André

            PS: Vielleicht doch über eMail, da ich immer lange suchen muss, bis ich meinen Artikel hier im Forum gefunden habe ?

            1. Hallo André.

              Ich habe mir jetzt eine php Datei erstellt, in der Das Anmelde und Passwort Feld ist.

              Nun ja, eine einfache HTML-Datei tut es da auch. Kann man sich das Ergebnis deiner Mühen online ansehen?

              Dann hast du ja geschrieben, dass ich eine weitere php Datei erstellen soll ( conntent.php oder so) und da soll irgendein phpScript rein.

              Ja genau, dieses Script muss die Eingaben aus dem Formular empfangen. Ich versuche es nochmal kurz zu erklären:

              Dein Formular beginnt mit einem form-Tag. Wichtig dabei ist insbesondere das Attribut "action", das festlegt, wohin die Formulardaten übermittelt werden sollen. Weiter wichtig ist das Attribut "method", mit dem du die Übertragungsmethode festlegst. Dann folgen die Eingabefelder, ein Submit-Button und das schließende form-Tag. Stark vereinfacht könnte es so aussehen:

              <form action="connect.php" method="POST">
                <p>User: <input type="text" name="user" value=""></p>
                <p>Passwort: <input type="password" name="passwort" value=""></p>
                <p><input type="submit" name="senden" value="Senden"></p>
              </form>

              Klickt der User auf "Senden", werden diejenigen Name/Wert-Paare an "connect.php" übergeben, die der User in die Eingabefelder getippt hat. Den Link zur Formularverarbeitung in PHP hatte ich dir ja gepostet. Danach hast du in deinem PHP-Script Zugang zu den erhaltenen Daten über $_POST['name_des_eingabefeldes']. In meinem Beispiel hätte $_POST['user'] den Wert, der im ersten Textfeld eingegeben wurde, und $_POST['passwort'] den Wert, den der User im Passwortfeld eingegeben hat. Und genau diese beiden brauchst du als Zugangsdaten für die Verbindung zu mySQL.

              Gibt es einen fertigen Script?

              Hm, du musst dich schon entscheiden, ob du es selber machen oder ein fertiges Script benutzen möchtest. Falls du selber mal suchen möchtest: http://www.phparchiv.de/, unter "Pflegen eines Newsbereichs". Dies wäre nur eines von vermutlich 100en Archiven mit fertigen Scripten.

              Woher weiß denn das phpScript, wer sich da anmeldet und ob der eine erlaubnis hat ??

              Das PHP-Script erhält die Daten von dem Eingabeformular, das du ja schon erstellt hast (s.o.). Mit diesen Zugangsdaten versucht es, eine Datenbankverbindung aufzubauen, schlägt dies fehl, so ist das ein sicheres Zeichen dafür, dass die Daten falsch sind (das war das Stückchen PHP-Code, das ich dir gepostet hatte). Ob die Benutzerdaten richtig sind, weiß nur deine Datenbank und natürlich der Benutzer, der die richtigen Daten eingeben muss.

              Außderdem möchte ich gerne noch weiteres über die Datenbank erfahren, denn ich weiß nicht, wie ich jetzt ein Bereich erstelle, in dem ich die z.B. News bearbeiten und neu machen kann !

              Ich werde das Gefühl nicht los, dass du von PHP und mySQL-Datenbanken noch nicht so die Ahnung hast, oder? Deshalb oder trotzdem lege ich dir folgendes Tutorial ans Herz (wenn du es wirklich lernen möchtest): http://www.schattenbaum.net/php/mstart.php, da wird der Einstieg in mySQL mit PHP recht anschaulich und verständlich erklärt. Dort sollten auch die meisten deiner Fragen beantwortet werden.

              Vielleicht doch über eMail, da ich immer lange suchen muss, bis ich meinen Artikel hier im Forum gefunden habe?

              Nein :)

              Im Ernst, man könnte dir sicher ein fertiges Script posten oder per Mail schicken, aber das ist nicht das Anliegen dieses Forums. Es soll (und wird) dir helfen, dich in die Grundlagen einzuarbeiten und diese zu verstehen, sodass du über kurz oder lang selber in der Lage bist, das Gewünschte umzusetzen. Es klingt vielleicht hartherzig, aber wenn du jemanden suchst, der dir das Script schreibt, bist du leider im falschen Forum.

              Also nicht verzagen, weiterprobieren und bei Problemen einfach hartnäckig nachfragen :)

              Freundschaft!
              Siechfred

              --
              Punk's not dead: http://www.siechfreds-welt.de/badreligion.shtml
              Dankbarkeit, man spürt sie ja so selten bei den Menschen, und gerade die Dankbarsten finden nicht den Ausdruck dafür, sie schweigen verwirrt, sie schämen sich und tun manchmal stockig, um ihr Gefühl zu verbergen. (Stefan Zweig)
              1. Hallo Siechfred,
                danke für deine Antwort.
                Ja, die Seite ist online:

                http://andro.sabserv.de/admin/index.php

                Die conntect.php datei ist noch leer, da ich mir noch durchlesen muss, was ich da reinschreiben muss.
                Das mit der Fehlerseite, falls das Passwort falsch ist, ist glaube ich kein Problem.

                Wann kommt die Datenbank zum einsatz ?

                Gruß André

                1. Hallo André.

                  http://andro.sabserv.de/admin/index.php

                  Da stimmt was nicht, die Seite wird nicht gefunden.

                  Wann kommt die Datenbank zum einsatz ?

                  Die Datenbank nimmt zum einen deine neuen News auf, zum anderen liefert sie deiner Newsseite die Daten, die dort als News angezeigt werden sollen. Wenn du also bei erfolgreichem Login News eingetragen hast, werden diese Daten wieder an ein PHP-Script übergeben, welches diese dann in die Datenbank einträgt.

                  Freundschaft!
                  Siechfred

                  --
                  Punk's not dead: http://www.siechfreds-welt.de/badreligion.shtml
                  Dankbarkeit, man spürt sie ja so selten bei den Menschen, und gerade die Dankbarsten finden nicht den Ausdruck dafür, sie schweigen verwirrt, sie schämen sich und tun manchmal stockig, um ihr Gefühl zu verbergen. (Stefan Zweig)
                  1. Hi,
                    ja sorry wegen dem Link !
                    Ich habe mir jetzt zur Übung mal einen fertigen Script genommen, um zu sehen wie so etwas auf gebaut ist.

                    Habe dazu die install.php geöffnet und alle Daten rein geschrieben.
                    Passwort festgelegt, ... Dann habe ich mich eingeloggt. Und kann da jetzt News texte schreiben. Wenn ich auf Speichern klicke, wo werden die denn gespeichert ?

                    Wo muss ich im script bekannt geben, wo meine Homepage liegt, wo die News texte angezeigt werden sollen?

                    Gruß André

                    http://andro.sabserv.de/admin/corenews2/index.php

                    1. Hallo André.

                      Wo muss ich im script bekannt geben, wo meine Homepage liegt, wo die News texte angezeigt werden sollen?

                      Das musst du nicht direkt bekannt geben, du muss lediglich wissen, wie der SQL-Server heißt (das muss dir dein Provider sagen) und wie deine Newsdatenbank heißt (der Name, den du ihr beim Anlegen gegeben hast). Mit diesen Daten und den eingegebenen Benutzerdaten bestückst du mysql_connect und mysql_select_db, und dann sollte die Verbindung zur Datenbank geöffnet sein und du kannst News eintragen oder auslesen. Beim Eintragen und Auslesen brauchst du SQL-Statements, den Link zur mySQL-Doku hatte ich dir ja schon gepostet.

                      Freundschaft!
                      Siechfred

                      --
                      Punk's not dead: http://www.siechfreds-welt.de/badreligion.shtml
                      Dankbarkeit, man spürt sie ja so selten bei den Menschen, und gerade die Dankbarsten finden nicht den Ausdruck dafür, sie schweigen verwirrt, sie schämen sich und tun manchmal stockig, um ihr Gefühl zu verbergen. (Stefan Zweig)
                      1. Hi,
                        ich verstehe das nicht :)
                        Also noch mal:

                        Ich habe mir eine ganz normale Homepage erstellt. Eine Kategorie heißt dort News.
                        Dann habe ich mir eine Datenbank eröffnet.
                        Auf meiner Homepage soll jetzt unter News etwas Online schreib bar sein. Muss ich da noch ein Feld erstellen ?

                        Meine Page mit dem Admin Bereich habe ich ja auch erfolgreich an die Datenbank angepasst. Es kam verbindung zur Datenbank erfolgreich.

                        Mir ist nur nicht klar, wen ich da in dem News-Admin Bereich etwas schreibe und speicher, wo der das dann hin packt. Sollen soll er das auf meiner Seite unter News, in ein Tabellensystem.

                        Gruß André

                        1. Hallo André.

                          Auf meiner Homepage soll jetzt unter News etwas Online schreib bar sein. Muss ich da noch ein Feld erstellen ?

                          Ja, irgendwie muss der Newsverfasser ja zu dem Formular gelangen, in dem er die News einträgt.

                          Meine Page mit dem Admin Bereich habe ich ja auch erfolgreich an die Datenbank angepasst. Es kam verbindung zur Datenbank erfolgreich.

                          Na bestens, jetzt fehlt dir nur noch ein Eingabeformular für die Erfassung der News mit einem dazugehörenden Script, das die News in die Datenbank schreibt.

                          Mir ist nur nicht klar, wen ich da in dem News-Admin Bereich etwas schreibe und speicher, wo der das dann hin packt. Sollen soll er das auf meiner Seite unter News, in ein Tabellensystem.

                          Wenn du die News ausgeben möchtest, brauchst du den Admin-Bereich nicht, der soll nur sicherstellen, dass nur Berechtigte in deine Datenbank schreiben. Für die Augabe musst du aber nur auslesen, eine ganz einfache mySQL-Abfrage nach diesem Schema genügt:

                          <?php
                            $link = mysql_connect("localhost", "user", "passwort");
                            mysql_select_db("newsdatenbank");
                            $query = "SELECT * FROM newsdatenbank GROUP BY datum ORDER BY datum DESC";
                            $result = mysql_query($query);
                            while ($row = mysql_fetch_array($result, MYSQL_BOTH)) {
                              print "<td>$row[1]</td>\r\n";
                              print "<td>$row[2]</td>\r\n";
                              # usw. usf.
                            }
                            mysql_free_result($result);
                            mysql_close($link);
                          ?>

                          User und Passwort kannst du im PHP-Code im Klartext notieren, das sollte grundsätzlich ungefährlich sein.

                          Freundschaft!
                          Siechfred

                          --
                          Punk's not dead: http://www.siechfreds-welt.de/badreligion.shtml
                          Dankbarkeit, man spürt sie ja so selten bei den Menschen, und gerade die Dankbarsten finden nicht den Ausdruck dafür, sie schweigen verwirrt, sie schämen sich und tun manchmal stockig, um ihr Gefühl zu verbergen. (Stefan Zweig)
  2. Hallo André,

    ansich ist so ein "Bereich" nur ein passwortgeschützes Verzeichnis in Deinem erstellten Web, wo Du die verschiedensten Scripte zur Gestalltung bereit hältst. Diesen Passwortschutz kannst Du mittels einer Serverkonfigurationsdatei => http://httpd.apache.org/docs-2.0/configuring.html erreichen.

    http://httpd.apache.org/docs-2.0/mod/core.html#authtype
    http://httpd.apache.org/docs-2.0/mod/core.html#authname
    http://httpd.apache.org/docs-2.0/mod/mod_auth.html#authuserfile
    http://httpd.apache.org/docs-2.0/mod/mod_auth.html#authgroupfile
    vgl.:
    http://de.selfhtml.org/diverses/htaccess.htm#verzeichnisschutz

    (Für andere Server als den apache wird es sicher auch Manuals geben, die Referenzen zum Thema Passwortschutz haben.)

    Je nachdem, ob Du mit einer DB arbeiten magst (ich persönlich denk das ist in diesem Fall unnötig), solltest Du Dir die einzelnen Funktionen des PHP-Manuals http://de.php.net ansehen, die für Deine DB maßgebend sind. Dort gibt es zumeist auch kleine Scriptbeispiele, die man sich zu nutze machen kann.

    Eine andere Lösung ist mit Includdatein zu arbeiten, die von den Scripten im Admin-Bereich überarbeitet werden und im restlichen Web lediglich einbezogen werden.

    Gruß aus Berlin!
    eddi

  3. Hello,

    Man kann den Zugriff auf verschiedene Weise beschränken:

    • Zugriff auf die Scripte beschränken, die die Admin-Funktionen enthalten
    • Zugriffsrechte im Script ermitteln dass die Funktionen bereitstellet UND diese später
        ausführt. Die Zugriffsrechte sollten bei beiden Richtungen geprüft werden.

    Man kann auch ein modifiziertes Verfahren wählen.
    Arbeiten mit Sessions.
    Die aktuellen Rechte des Users werden bei jedem Zugriff geprüft
      Das kann man für jedes Objekt separat durchführen
      Adminwerkzeuge sind auch Objekte
    Ausgelieferte Formulare werden in der Session unter einer Zerifikatsnummer eingetragen
      Kommt nun ein Request für die Session mit der passenden Zertifikatsnummer, wird
      die Aktion ausgeführt.

    Bei Diesem System muss man nun unterscheiden, ob es sich um Rechte auf Daten oder um rechte auf
    Rechte handelt. So kann man dann das Adminsystem ins CMS derart integrieren, dass es eigentlich
    jedem User zur Verfügung steht. Es gibt dann eben nur unterschiedlich gestaffelte Rechte auf
    die Objekte des Systems für jeden User.

    Das erreicht man am einfachsten durch die Kombination von

    • Userlevel
    • Gruppenzugehörigkeite
    • Ausnahmeregeln

    Anderenfalls müsste man es so machen wie bei "billigen" OS, da wird für jdeden User und jedes Objekt ein Datensatz angelegt. Das führt dann dazu, dass die zugehörige Datenbank schon beim Einrichten des ersten Users gewaltig explodiert.

    Harzliche Grüße aus http://www.annerschbarrich.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau