Website Admin panel?

2 Antworten

Vom Fragesteller als hilfreich ausgezeichnet
Dafür möchte ich machen, dass ich mich anmelden kann (...)

Du kannst die für das Panel notwendigen Dateien in einen Ordner verschieben, dem eine Basic Authentication vorgeschaltet wird. Bezüglich der Konfiguration bei einem Apache Webserver lies hier.

Falls deine Webseite nicht über einen Apache Webserver läuft, musst du dir selbst eine passende Anleitung zum jeweiligen Webserver suchen.

(...) dort dann auswählen kann zwischen zwei verschiedenen Optionen und dies dann auf der normalen Website automatisch geändert wird (...)

Zum einen brauchst du eine Datenquelle, die alle Dateien assoziativ zu einem Status auflistet. Da könnte eine Datenbank herhalten oder ebenso vollkommen ausreichend, eine einfache Textdatei (bspw. im CSV-Format).

Bei Wahl einer Datenbank wären für die Struktur zwei Tabellen günstig. Eine Tabelle speichert alle Status (z.B. Update in progress, Ready for download, etc.). Die zweite Tabelle besteht aus mindestens zwei Spalten (Dateipfad und Status). Die letztgenannte Spalte wäre ein Fremdschlüssel, der auf die Spalte der ersten Tabelle zeigt und die erstgenannte Spalte würde den Primärschlüssel darstellen.

Für die Ausgabe liest du die Datensätze in eine Liste ein und gibst sie via PHP aus.

Für die Verwaltung im Admin-Panel sieht das Prinzip ähnlich aus. Nur sollte das innerhalb eines HTML-Formulars geschehen. Alle Daten sollten in Formularfeldern ausgegeben werden, die name-Attribute mit eindeutigem Namen besitzen.

Beispiel:

<form action="update.php" method="post">
  <label for="download-file">Download:</label>
  <select id="download-file" name="download-file">
    <?php foreach ($downloads as $download): ?>
      <option><?= $download ?></option>
    <?php endforeach; ?>
  </select>
  <label for="status">Status:</label>
  <select id="status" name="status">
    <?php foreach ($availableStatus as $status): ?>
      <option><?= $status ?></option>
    <?php endforeach; ?>
  </select>
  <button>Update</button>
</form>

Wie du siehst, würde ich, um den neuen Status zu setzen, eine Auswahlliste nutzen. Wenn du eine Datenbank nach der oben beschriebenen Struktur verwendest, kannst du hierfür die Werte aus der ersten Tabelle auslesen.

In der update.php sind die Daten nach Formularversand im $_POST-Array vorrätig. Als Schlüssel wird stets der Wert aus dem name-Attribut eingesetzt.

<?php
  if (isset($_POST['download-file'])) {
    $downloadFile = $_POST['download-file'];
    $status = $_POST['status'];

    // save ...
?>

Zum Auslesen / Schreiben von Daten in eine MySQL/MariaDB-Datenbank kannst du das mysqli-Modul von PHP nutzen. Ansonsten gibt es noch andere Module für andere Datenbanksysteme (wie PostgreSQL). Schau dazu in die Dokumentation. Dort findest du in der Regel auch mehrere Beispiele je Funktion (siehe bspw. mysqli_prepare).

Eine einfache Referenz für Standard-SQL gibt es auf W3Schools.

Solltest du dich wiederum entscheiden, alles in einer Datei zu speichern, dann sind die PHP-Funktionen für die Handhabung des Dateisystems deine Freunde.

Noch zum Schluss wäre anzumerken, dass aktuelle Webseitenbesucher eine Statusänderung erst dann sehen, wenn sie die Seite mit der Statusauflistung einmal neuladen. Für eine schnellere / dynamischere Statusänderung bräuchtest du JavaScript.

Auf der Statusseite könnte ein Skript in regelmäßigen Zyklen (eine permanente Kommunikation halte ich für übertrieben) den aktuellen Status erfragen und ihn dann im DOM eintragen.

Beispiel:

<table id="status-table">
  <tr>
    <th>File
    <th>Status
  <tr>
    <td><a download="File1" href="path/to/file1">File 1</a>
    <td><span data-file="path/to/file1">Ready for download</span>
  <tr>
    <td><a download="File2" href="path/to/file2">File 2</a>
    <td><span data-file="path/to/file2">Ready for download</span>
</table>
<script>
  const statusTable = document.getElementById("status-table");
  setInterval(() => {
    fetch("getstatus.php")
      .then(response => response.json())
      .then(dataEntries => {
        for (const entry of dataEntries) {
          const statusElement = statusTable.querySelector(`[data-file=${entry.path}]`);
          statusElement.textContent = entry.status;
        }
      );
  }), 5 * 60 * 1000);
</script> 

In diesem Beispiel hättest du eine Tabelle mit zwei Einträgen. Ein Skript würde alle fünf Minuten einen Request an ein PHP-Skript getstatus.php schicken, welches als Antwort Text im JSON-Format liefert:

[
  { path: "path/to/file1", status: "Update in progress" },
  { path: "path/to/file2", status: "Not available" }
]

Dieser Text wird in ein JavaScript-Array geparst und dieses durchlaufen. Je Eintrag wird das zum Eintrag zugehörige Element gesucht, welches den Statustext präsentiert. Dessen Inhalt wird neu gesetzt.

Sollten dir PHP- und (bezüglich des letzten Abschnitts) JavaScript-Kenntnisse noch fehlen, solltest du dein Vorhaben erst einmal verschieben und dich zumindest mit den Grundlagenthemen (wie Variablen, Operatoren, Kontrollstrukturen, Funktionen) beschäftigen.

Genügend Informationen findest du im PHP Manual und auf MDN. Zwei zusätzlich empfehlenswerte Quellen sind MediaEvent (für JavaScript) und die Seite von Peter Kropff (für PHP).

HTML wird dir nicht ausreichen. Irgendwo musst du die angezeigten Daten speichern, Loginfunktionen für das Admin-Panel/Backend ermöglichen etc.

 Ich möchte eine eigene Website programmieren

Viel Spass. Sorge aber dafür, dass du dir nicht die primitivsten Sicherheitslecks einbaust.
Leichter und schneller kommst du voran, wenn du dir ein fertiges Blog-System oder CMS zunutze machst. Dabei kannst du dich um das Desgin und den Inhalt kümmern und die bereits vorhandenen Funktionen einfach nutzen, statt das Rad neu zu erfinden.


Joriax 
Fragesteller
 15.10.2022, 14:56

Erst mal danke! Die Website habe ich schon soweit fertig. Ich überlege noch diese extra Feature mit dem Admin Panel einzubauen. Könntest du mir dabei vielleicht helfen? Vielen Dank

0