-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.php
More file actions
89 lines (77 loc) · 3.03 KB
/
index.php
File metadata and controls
89 lines (77 loc) · 3.03 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
<!doctype html>
<html lang="de">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, initial-scale=1.0">
<title>Ticketverwaltung | Doubtful-Joy19</title>
</head>
<body>
<h1>Ticketverwaltung von Doubtful-Joy19</h1>
<h2>Neues Ticket erstellen</h2>
<form action="submit-new-ticket.php" method="POST">
<label>
Titel des neuen Tickets
<input type="text" name="title" required maxlength="255"/>
</label>
<input type="submit"/>
</form>
<hr />
<h2>Bestehende Tickets</h2>
<?php
try {
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
/**
* repräsentiert eine Verbindung zur Datenbank, wie wir sie vorher mit dem
* Kommandozeilenprogramm "mysql" geöffnet haben.
*/
$connection = new mysqli("192.168.19.12", "web-php", "c3nt0s", "web");
if ($connection->connect_errno !== 0) {
throw new RuntimeException(
"Could not connect to database. Error code $connection->connect_errno: " . $connection->connect_error,
1681361641
);
}
/**
* das Ergebnis der Datenbankfrage mit folgendem SQL-Befehl:
*
* ```
* select `title` as `Titel`, `uid` as `ID`, `created_at` as `Erstellt am` from `ticket`
* ```
*/
$queryResult = $connection->query(
"select `title` as `Titel`, `uid` as `ID`, `created_at` as `Erstellt am` from `ticket`"
);
// Schreiben des Tabellen-Kopfs
echo "<table><tr>";
foreach ($queryResult->fetch_fields() as $field) {
// normalerweise sollte hier die Datenbank immer den von uns gegebenen Wert zurückgeben (reflection)
// daher ist der Escape hier nur für den Fall, wenn diese das aus irgendwelchen Gründen nicht tut.
echo "<th>" . htmlspecialchars($field->name) . "</th>";
}
echo "</tr>";
// Schreiben der Inhalts-Zeilen der Tabelle
while (($row = $queryResult->fetch_row()) !== null) {
echo "<tr>";
foreach ($row as $column) {
// Der escape ist hier zwingen notwendig, da die Datenbankspalte für den Titel nicht vertrauenswürdige,
// vom Nutzer gesteuerte, Zeichenketten enthält.
// Für die restlichen Felder ist es egal, da diese niemals HTML-Code enthalten sollten.
echo "<td>" . htmlspecialchars($column) . "</td>";
}
echo "</tr>";
}
echo "</table>";
} catch (Throwable $exception) {
// Setzt den HTTP Response Code auf den Fehlerzustand (Server Internal Error)
http_response_code(500);
// Informieren des Nutzers, dass ein Fehler aufgetreten ist
echo '<p>Die Liste der bestehenden Tickets konnte nicht abgerufen werden.</p>';
// In einer wirklichen Anwendung würde man diese Fehlerinformationen nicht dem Nutzer übergeben,
// sondern Monitoring / Logging umsetzen. Für dieses Projekt ist das allerdings out-of-scope.
echo '<p>Bitte übermitteln Sie die folgende Fehlernachricht an einen Administrator:</p>';
echo '<pre>' . htmlspecialchars((string)$exception) . '</pre>';
}
?>
</body>
</html>