first commit
This commit is contained in:
commit
8804d13f00
|
@ -0,0 +1,6 @@
|
|||
<?php
|
||||
|
||||
define('DB_SERVER', 'localhost');
|
||||
define('DB_USERNAME', 'root');
|
||||
define('DB_PASSWORD', '');
|
||||
define('DB_NAME', 'blackboard');
|
|
@ -0,0 +1,108 @@
|
|||
<?php
|
||||
require_once "../src/adverts.php";
|
||||
require_once "../src/categories.php";
|
||||
|
||||
// Überprüft ob Kategorie ID vorhanden ist
|
||||
if (!isset($_GET['id']) || !is_numeric($_GET['id'])) {
|
||||
echo "Fehler: Kategorie-ID ist erforderlich";
|
||||
exit;
|
||||
}
|
||||
|
||||
$categoryId = (int)$_GET['id'];
|
||||
|
||||
// Get category details
|
||||
$allCategories = Categories::getAllCategories();
|
||||
$categoryName = "";
|
||||
|
||||
foreach ($allCategories as $category) {
|
||||
if ($category['id'] == $categoryId) {
|
||||
$categoryName = $category['name'];
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (empty($categoryName)) {
|
||||
echo "Fehler: Kategorie nicht gefunden";
|
||||
exit;
|
||||
}
|
||||
|
||||
// Anzeigen für diese Kategorie erhalten
|
||||
$adverts = Adverts::getAdvertsByCategoryId($categoryId);
|
||||
?>
|
||||
|
||||
<!DOCTYPE html>
|
||||
<html lang="de">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Inserate in <?php echo htmlspecialchars($categoryName); ?></title>
|
||||
<style>
|
||||
body {
|
||||
font-family: Arial, sans-serif;
|
||||
max-width: 800px;
|
||||
margin: 0 auto;
|
||||
padding: 20px;
|
||||
}
|
||||
h1 {
|
||||
color: #333;
|
||||
}
|
||||
.inserat {
|
||||
border: 1px solid #ddd;
|
||||
padding: 15px;
|
||||
margin-bottom: 15px;
|
||||
border-radius: 5px;
|
||||
}
|
||||
.inserat h2 {
|
||||
margin-top: 0;
|
||||
}
|
||||
.inserat-date {
|
||||
color: #666;
|
||||
font-size: 0.8em;
|
||||
}
|
||||
.no-inserate {
|
||||
color: #666;
|
||||
font-style: italic;
|
||||
}
|
||||
.back-link {
|
||||
margin-top: 20px;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<h1>Inserate in Kategorie: <?php echo htmlspecialchars($categoryName); ?></h1>
|
||||
|
||||
<div style="margin-bottom: 20px;">
|
||||
<a href="create_advert.php" style="display: inline-block; padding: 10px 15px; background-color: #4CAF50; color: white; text-decoration: none; border-radius: 5px;">Neues Inserat erstellen</a>
|
||||
</div>
|
||||
|
||||
<?php if (empty($adverts)): ?>
|
||||
<p class="no-inserate">Keine Inserate in dieser Kategorie gefunden.</p>
|
||||
<?php else: ?>
|
||||
<?php foreach ($adverts as $advert): ?>
|
||||
<div class="inserat">
|
||||
<h2><?php echo htmlspecialchars($advert['name']); ?></h2>
|
||||
<p><?php echo htmlspecialchars($advert['description']); ?></p>
|
||||
<p class="inserat-date">Erstellt am: <?php echo htmlspecialchars($advert['date']); ?></p>
|
||||
<?php if (isset($advert['user_name']) || isset($advert['user_email']) || isset($advert['user_telephone'])): ?>
|
||||
<div class="user-contact">
|
||||
<h3>Kontaktinformationen:</h3>
|
||||
<?php if (isset($advert['user_name'])): ?>
|
||||
<p><strong>Name:</strong> <?php echo htmlspecialchars($advert['user_name']); ?></p>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($advert['user_email'])): ?>
|
||||
<p><strong>E-Mail:</strong> <?php echo htmlspecialchars($advert['user_email']); ?></p>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($advert['user_telephone'])): ?>
|
||||
<p><strong>Telefon:</strong> <?php echo htmlspecialchars($advert['user_telephone']); ?></p>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
<?php endforeach; ?>
|
||||
<?php endif; ?>
|
||||
|
||||
<div class="back-link">
|
||||
<a href="index.php">Zurück zu den Kategorien</a>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,253 @@
|
|||
<?php
|
||||
require_once "../src/adverts.php";
|
||||
require_once "../src/categories.php";
|
||||
|
||||
// Variablen Initialisieren
|
||||
$userName = '';
|
||||
$email = '';
|
||||
$telephone = '';
|
||||
$advertName = '';
|
||||
$description = '';
|
||||
$selectedCategories = [];
|
||||
$errors = [];
|
||||
$success = false;
|
||||
|
||||
// Alle Kategorien für das Formular abrufen
|
||||
$categories = Categories::getAllCategories();
|
||||
|
||||
// Process form submission
|
||||
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
|
||||
// Validate and sanitize input
|
||||
$userName = trim($_POST['userName'] ?? '');
|
||||
$email = trim($_POST['email'] ?? '');
|
||||
$telephone = trim($_POST['telephone'] ?? '');
|
||||
$advertName = trim($_POST['advertName'] ?? '');
|
||||
$description = trim($_POST['description'] ?? '');
|
||||
$selectedCategories = $_POST['categories'] ?? [];
|
||||
|
||||
// Formularübermittlung verarbeiten
|
||||
if (empty($userName)) {
|
||||
$errors['userName'] = 'Inserentname ist erforderlich';
|
||||
}
|
||||
|
||||
// E-Mail validieren
|
||||
if (empty($email)) {
|
||||
$errors['email'] = 'E-Mail ist erforderlich';
|
||||
} elseif (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
|
||||
$errors['email'] = 'Gültige E-Mail ist erforderlich';
|
||||
}
|
||||
|
||||
// Telefonnummer validieren
|
||||
if (empty($telephone)) {
|
||||
$errors['telephone'] = 'Telefon ist erforderlich';
|
||||
}
|
||||
|
||||
// Insertatsnamen validieren
|
||||
if (empty($advertName)) {
|
||||
$errors['advertName'] = 'Inserat-Name ist erforderlich';
|
||||
}
|
||||
|
||||
// Beschreibung validieren
|
||||
if (empty($description)) {
|
||||
$errors['description'] = 'Beschreibung ist erforderlich';
|
||||
} elseif (strlen($description) > 255) {
|
||||
$errors['description'] = 'Beschreibung darf maximal 255 Zeichen lang sein';
|
||||
}
|
||||
|
||||
// Kategorien validieren
|
||||
if (empty($selectedCategories)) {
|
||||
$errors['categories'] = 'Mindestens eine Kategorie ist erforderlich';
|
||||
} elseif (count($selectedCategories) > 3) {
|
||||
$errors['categories'] = 'Maximal 3 Kategorien erlaubt';
|
||||
}
|
||||
|
||||
// Wenn keine Fehler auftreten, Anzeige erstellen
|
||||
if (empty($errors)) {
|
||||
$result = Adverts::createAdvert(
|
||||
$advertName,
|
||||
$description,
|
||||
$selectedCategories,
|
||||
$userName,
|
||||
$email,
|
||||
$telephone
|
||||
);
|
||||
|
||||
if ($result) {
|
||||
$success = true;
|
||||
// Formularfelder nach erfolgreicher Übermittlung zurücksetzen
|
||||
$userName = '';
|
||||
$email = '';
|
||||
$telephone = '';
|
||||
$advertName = '';
|
||||
$description = '';
|
||||
$selectedCategories = [];
|
||||
} else {
|
||||
$errors['general'] = 'Fehler beim Erstellen des Inserats. Bitte versuchen Sie es erneut.';
|
||||
}
|
||||
}
|
||||
}
|
||||
?>
|
||||
|
||||
<!DOCTYPE html>
|
||||
<html lang="de">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Inserat erstellen - Blackboard</title>
|
||||
<style>
|
||||
body {
|
||||
font-family: Arial, sans-serif;
|
||||
max-width: 800px;
|
||||
margin: 0 auto;
|
||||
padding: 20px;
|
||||
}
|
||||
h1 {
|
||||
color: #333;
|
||||
}
|
||||
h2 {
|
||||
color: #4CAF50;
|
||||
margin-top: 20px;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
.form-group {
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
label {
|
||||
display: block;
|
||||
margin-bottom: 5px;
|
||||
font-weight: bold;
|
||||
}
|
||||
input[type="text"],
|
||||
input[type="email"],
|
||||
input[type="tel"],
|
||||
textarea,
|
||||
select {
|
||||
width: 100%;
|
||||
padding: 8px;
|
||||
border: 1px solid #ddd;
|
||||
border-radius: 4px;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
textarea {
|
||||
height: 100px;
|
||||
resize: vertical;
|
||||
}
|
||||
select[multiple] {
|
||||
height: 120px;
|
||||
}
|
||||
.error {
|
||||
color: red;
|
||||
font-size: 0.9em;
|
||||
margin-top: 5px;
|
||||
}
|
||||
.success {
|
||||
background-color: #dff0d8;
|
||||
color: #3c763d;
|
||||
padding: 10px;
|
||||
border-radius: 4px;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
.char-count {
|
||||
font-size: 0.8em;
|
||||
color: #666;
|
||||
margin-top: 5px;
|
||||
}
|
||||
.button {
|
||||
background-color: #4CAF50;
|
||||
color: white;
|
||||
padding: 10px 15px;
|
||||
border: none;
|
||||
border-radius: 4px;
|
||||
cursor: pointer;
|
||||
}
|
||||
.button:hover {
|
||||
background-color: #45a049;
|
||||
}
|
||||
.back-link {
|
||||
margin-top: 20px;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<h1>Neues Inserat erstellen</h1>
|
||||
|
||||
<?php if ($success): ?>
|
||||
<div class="success">
|
||||
Inserat erfolgreich erstellt!
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php if (isset($errors['general'])): ?>
|
||||
<div class="error"><?php echo htmlspecialchars($errors['general']); ?></div>
|
||||
<?php endif; ?>
|
||||
|
||||
<form method="post" action="">
|
||||
<h2>Inserenten-Informationen</h2>
|
||||
<div style="border: 1px solid #ddd; padding: 15px; margin-bottom: 20px; border-radius: 5px;">
|
||||
<div class="form-group">
|
||||
<label for="userName">Name:</label>
|
||||
<input type="text" id="userName" name="userName" value="<?php echo htmlspecialchars($userName); ?>">
|
||||
<?php if (isset($errors['userName'])): ?>
|
||||
<div class="error"><?php echo htmlspecialchars($errors['userName']); ?></div>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="email">E-Mail:</label>
|
||||
<input type="email" id="email" name="email" value="<?php echo htmlspecialchars($email); ?>">
|
||||
<?php if (isset($errors['email'])): ?>
|
||||
<div class="error"><?php echo htmlspecialchars($errors['email']); ?></div>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="telephone">Telefon:</label>
|
||||
<input type="tel" id="telephone" name="telephone" value="<?php echo htmlspecialchars($telephone); ?>">
|
||||
<?php if (isset($errors['telephone'])): ?>
|
||||
<div class="error"><?php echo htmlspecialchars($errors['telephone']); ?></div>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<h2>Inserat-Informationen</h2>
|
||||
<div style="border: 1px solid #ddd; padding: 15px; margin-bottom: 20px; border-radius: 5px;">
|
||||
<div class="form-group">
|
||||
<label for="advertName">Name:</label>
|
||||
<input type="text" id="advertName" name="advertName" value="<?php echo htmlspecialchars($advertName); ?>">
|
||||
<?php if (isset($errors['advertName'])): ?>
|
||||
<div class="error"><?php echo htmlspecialchars($errors['advertName']); ?></div>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="description">Beschreibung (maximal 255 Zeichen):</label>
|
||||
<textarea id="description" name="description" maxlength="255"><?php echo htmlspecialchars($description); ?></textarea>
|
||||
<?php if (isset($errors['description'])): ?>
|
||||
<div class="error"><?php echo htmlspecialchars($errors['description']); ?></div>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="categories">Kategorien (wählen Sie bis zu 3):</label>
|
||||
<select multiple id="categories" name="categories[]">
|
||||
<?php foreach ($categories as $category): ?>
|
||||
<option value="<?php echo $category['id']; ?>"
|
||||
<?php echo in_array($category['id'], $selectedCategories) ? 'selected' : ''; ?>>
|
||||
<?php echo htmlspecialchars($category['name']); ?>
|
||||
</option>
|
||||
<?php endforeach; ?>
|
||||
</select>
|
||||
<?php if (isset($errors['categories'])): ?>
|
||||
<div class="error"><?php echo htmlspecialchars($errors['categories']); ?></div>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<button type="submit" class="button">Inserat erstellen</button>
|
||||
</form>
|
||||
|
||||
<div class="back-link">
|
||||
<a href="index.php">Zurück zu den Kategorien</a>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,136 @@
|
|||
<?php
|
||||
require_once "../src/categories.php";
|
||||
require_once "../src/adverts.php";
|
||||
|
||||
// Hole alle Kategorien und Inserate
|
||||
$categories = Categories::getAllCategories();
|
||||
$adverts = Adverts::getAllAdverts();
|
||||
?>
|
||||
|
||||
<!DOCTYPE html>
|
||||
<html lang="de">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Schwarzes Brett</title>
|
||||
<style>
|
||||
body {
|
||||
font-family: Arial, sans-serif;
|
||||
max-width: 800px;
|
||||
margin: 0 auto;
|
||||
padding: 20px;
|
||||
}
|
||||
h1, h2 {
|
||||
color: #333;
|
||||
}
|
||||
ul {
|
||||
list-style-type: none;
|
||||
padding: 0;
|
||||
}
|
||||
li {
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
.category-link {
|
||||
display: block;
|
||||
padding: 10px 15px;
|
||||
background-color: #f5f5f5;
|
||||
border-radius: 5px;
|
||||
text-decoration: none;
|
||||
color: #333;
|
||||
transition: background-color 0.2s;
|
||||
}
|
||||
.category-link:hover {
|
||||
background-color: #e0e0e0;
|
||||
}
|
||||
.no-categories, .no-inserate {
|
||||
color: #666;
|
||||
font-style: italic;
|
||||
}
|
||||
.inserat {
|
||||
border: 1px solid #ddd;
|
||||
padding: 15px;
|
||||
margin-bottom: 15px;
|
||||
border-radius: 5px;
|
||||
}
|
||||
.inserat h2 {
|
||||
margin-top: 0;
|
||||
}
|
||||
.inserat-date {
|
||||
color: #666;
|
||||
font-size: 0.8em;
|
||||
}
|
||||
.filter-form {
|
||||
margin: 20px 0;
|
||||
padding: 15px;
|
||||
background-color: #f5f5f5;
|
||||
border-radius: 5px;
|
||||
}
|
||||
.filter-form select {
|
||||
padding: 8px;
|
||||
border-radius: 4px;
|
||||
border: 1px solid #ddd;
|
||||
margin-right: 10px;
|
||||
}
|
||||
.filter-form button {
|
||||
padding: 8px 15px;
|
||||
background-color: #4CAF50;
|
||||
color: white;
|
||||
border: none;
|
||||
border-radius: 4px;
|
||||
cursor: pointer;
|
||||
}
|
||||
.filter-form button:hover {
|
||||
background-color: #45a049;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<h1>Schwarzes Brett</h1>
|
||||
|
||||
<div style="margin-bottom: 20px;">
|
||||
<a href="create_advert.php" style="display: inline-block; padding: 10px 15px; background-color: #4CAF50; color: white; text-decoration: none; border-radius: 5px;">Neues Inserat erstellen</a>
|
||||
</div>
|
||||
|
||||
<h2>Kategorien</h2>
|
||||
<?php if (empty($categories)): ?>
|
||||
<p class="no-categories">Keine Kategorien gefunden.</p>
|
||||
<?php else: ?>
|
||||
<ul>
|
||||
<?php foreach ($categories as $category): ?>
|
||||
<li>
|
||||
<a class="category-link" href="category.php?id=<?php echo $category['id']; ?>">
|
||||
<?php echo htmlspecialchars($category['name']); ?>
|
||||
</a>
|
||||
</li>
|
||||
<?php endforeach; ?>
|
||||
</ul>
|
||||
<?php endif; ?>
|
||||
|
||||
<h2>Aktuelle Inserate</h2>
|
||||
<?php if (empty($adverts)): ?>
|
||||
<p class="no-inserate">Keine Inserate gefunden.</p>
|
||||
<?php else: ?>
|
||||
<?php foreach ($adverts as $advert): ?>
|
||||
<div class="inserat">
|
||||
<h2><?php echo htmlspecialchars($advert['name']); ?></h2>
|
||||
<p><?php echo htmlspecialchars($advert['description']); ?></p>
|
||||
<p class="inserat-date">Erstellt am: <?php echo htmlspecialchars($advert['date']); ?></p>
|
||||
<?php if (isset($advert['user_name']) || isset($advert['user_email']) || isset($advert['user_telephone'])): ?>
|
||||
<div class="user-contact">
|
||||
<h3>Kontaktinformationen:</h3>
|
||||
<?php if (isset($advert['user_name'])): ?>
|
||||
<p><strong>Name:</strong> <?php echo htmlspecialchars($advert['user_name']); ?></p>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($advert['user_email'])): ?>
|
||||
<p><strong>E-Mail:</strong> <?php echo htmlspecialchars($advert['user_email']); ?></p>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($advert['user_telephone'])): ?>
|
||||
<p><strong>Telefon:</strong> <?php echo htmlspecialchars($advert['user_telephone']); ?></p>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
<?php endforeach; ?>
|
||||
<?php endif; ?>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,116 @@
|
|||
<?php
|
||||
|
||||
require_once "database.php";
|
||||
require_once "users.php";
|
||||
|
||||
// Eine einfache Klasse zur Verwaltung von Anzeigen
|
||||
// Diese Klasse bietet statische Methoden zum Abrufen und Erstellen von Anzeigen in der Datenbank.
|
||||
class Adverts {
|
||||
// Holt alle Anzeigen für eine bestimmte Kategorie
|
||||
// $categoryId: Die ID der Kategorie
|
||||
// Gibt ein Array von Anzeigen zurück, die zur angegebenen Kategorie gehören
|
||||
public static function getAdvertsByCategoryId(int $categoryId): array {
|
||||
$db = new Database();
|
||||
$sql = "SELECT a.id, a.name, a.description, a.date, a.user_id
|
||||
FROM advert a
|
||||
JOIN advert_category ac ON a.id = ac.advert_id
|
||||
WHERE ac.category_id = ?
|
||||
ORDER BY a.date DESC";
|
||||
|
||||
$result = $db->query($sql, [$categoryId]);
|
||||
$adverts = $db->fetchAll($result);
|
||||
|
||||
// Füge Benutzerinformationen zu jeder Anzeige hinzu
|
||||
foreach ($adverts as &$advert) {
|
||||
if (isset($advert['user_id'])) {
|
||||
$user = Users::getUserById($advert['user_id']);
|
||||
if ($user) {
|
||||
$advert['user_name'] = $user['name'];
|
||||
$advert['user_email'] = $user['email'];
|
||||
$advert['user_telephone'] = $user['telephone'];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $adverts;
|
||||
}
|
||||
|
||||
// Holt alle Anzeigen sortiert nach Erstellungsdatum
|
||||
// Gibt ein Array aller Anzeigen zurück
|
||||
public static function getAllAdverts(): array {
|
||||
$db = new Database();
|
||||
$sql = "SELECT id, name, description, date, user_id
|
||||
FROM advert
|
||||
ORDER BY date DESC";
|
||||
|
||||
$result = $db->query($sql);
|
||||
$adverts = $db->fetchAll($result);
|
||||
|
||||
// Füge Benutzerinformationen zu jeder Anzeige hinzu
|
||||
foreach ($adverts as &$advert) {
|
||||
if (isset($advert['user_id'])) {
|
||||
$user = Users::getUserById($advert['user_id']);
|
||||
if ($user) {
|
||||
$advert['user_name'] = $user['name'];
|
||||
$advert['user_email'] = $user['email'];
|
||||
$advert['user_telephone'] = $user['telephone'];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $adverts;
|
||||
}
|
||||
|
||||
// Erstellt eine neue Anzeige in der Datenbank
|
||||
// Diese Methode erstellt eine neue Anzeige und verknüpft sie mit einem Benutzer und Kategorien.
|
||||
// Die Benutzerverwaltung wird von der Users-Klasse übernommen.
|
||||
//
|
||||
// $name: Der Name der Anzeige
|
||||
// $description: Die Beschreibung der Anzeige
|
||||
// $categoryIds: Array von Kategorie-IDs, die mit der Anzeige verknüpft werden sollen
|
||||
// $userName: Der Name des Benutzers
|
||||
// $userEmail: Die E-Mail des Benutzers
|
||||
// $userTelephone: Die Telefonnummer des Benutzers
|
||||
// Gibt die ID der erstellten Anzeige zurück oder false bei einem Fehler
|
||||
public static function createAdvert(
|
||||
string $name,
|
||||
string $description,
|
||||
array $categoryIds,
|
||||
string $userName,
|
||||
string $userEmail,
|
||||
string $userTelephone
|
||||
): int|false {
|
||||
$db = new Database();
|
||||
|
||||
try {
|
||||
// Prüfe, ob Benutzer mit der angegebenen E-Mail existiert
|
||||
$userId = Users::getUserIdByEmail($userEmail);
|
||||
|
||||
if ($userId === null) {
|
||||
// Benutzer existiert nicht, erstelle einen neuen Benutzer
|
||||
$userId = Users::createUser($userName, $userEmail, $userTelephone);
|
||||
}
|
||||
|
||||
// Erstelle die Anzeige
|
||||
$sql = "INSERT INTO advert (name, description, date, user_id) VALUES (?, ?, NOW(), ?)";
|
||||
$db->query($sql, [$name, $description, $userId]);
|
||||
|
||||
// Hole die ID der neu erstellten Anzeige
|
||||
$sql = "SELECT MAX(id) as id FROM advert WHERE name = ? AND user_id = ?";
|
||||
$result = $db->query($sql, [$name, $userId]);
|
||||
$advert = $db->fetchOne($result);
|
||||
$advertId = $advert['id'];
|
||||
|
||||
// Verknüpfe die Anzeige mit Kategorien
|
||||
foreach ($categoryIds as $categoryId) {
|
||||
$sql = "INSERT INTO advert_category (advert_id, category_id) VALUES (?, ?)";
|
||||
$db->query($sql, [$advertId, $categoryId]);
|
||||
}
|
||||
|
||||
return $advertId;
|
||||
} catch (Exception $e) {
|
||||
// Fehler protokollieren oder nach Bedarf behandeln
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,18 @@
|
|||
<?php
|
||||
|
||||
require_once "database.php";
|
||||
|
||||
// Eine einfache Klasse zur Verwaltung von Kategorien
|
||||
// Diese Klasse bietet statische Methoden zum Abrufen von Kategorien
|
||||
// aus der Datenbank.
|
||||
class Categories {
|
||||
// Holt alle Kategorien aus der Datenbank
|
||||
// Gibt ein Array von Kategorien mit ID und Namen zurück
|
||||
public static function getAllCategories(): array {
|
||||
$db = new Database();
|
||||
$sql = "SELECT id, name FROM category ORDER BY id";
|
||||
$result = $db->query($sql);
|
||||
|
||||
return $db->fetchAll($result);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,142 @@
|
|||
<?php
|
||||
|
||||
require "../config/config.php";
|
||||
|
||||
// Eine minimale Wrapper-Klasse für mysqli-Funktionen
|
||||
// Diese Klasse bietet eine einfache Schnittstelle für Datenbankoperationen
|
||||
// mit mysqli und verwendet nur Prepared Statements. Sie enthält auch
|
||||
// Methoden zum Abrufen von Abfrageergebnissen.
|
||||
class Database {
|
||||
private mysqli $connection;
|
||||
|
||||
// Konstruktor - stellt eine Datenbankverbindung her
|
||||
// Wirft eine Exception, wenn die Verbindung fehlschlägt
|
||||
public function __construct() {
|
||||
// Verbindung mit Konstanten aus der Konfiguration erstellen
|
||||
$this->connection = new mysqli(DB_SERVER, DB_USERNAME, DB_PASSWORD, DB_NAME);
|
||||
|
||||
// Verbindung überprüfen
|
||||
if ($this->connection->connect_error) {
|
||||
throw new Exception("Connection failed: " . $this->connection->connect_error);
|
||||
}
|
||||
|
||||
$this->initialize();
|
||||
}
|
||||
|
||||
// Führt eine Abfrage mit Prepared Statements aus
|
||||
// $sql: Die auszuführende SQL-Abfrage
|
||||
// $params: Parameter für das Prepared Statement
|
||||
// Gibt ein mysqli_result-Objekt oder einen booleschen Wert zurück
|
||||
// Wirft eine Exception, wenn die Abfrage fehlschlägt
|
||||
public function query(string $sql, array $params = []): mysqli_result|bool {
|
||||
// Prepared Statement mit Parametern
|
||||
$stmt = $this->connection->prepare($sql);
|
||||
|
||||
if ($stmt === false) {
|
||||
throw new Exception("Prepare failed: " . $this->connection->error);
|
||||
}
|
||||
|
||||
// Bestimme den Typen-String für bind_param
|
||||
$types = '';
|
||||
foreach ($params as $param) {
|
||||
if (is_int($param)) {
|
||||
$types .= 'i';
|
||||
} elseif (is_float($param)) {
|
||||
$types .= 'd';
|
||||
} elseif (is_string($param)) {
|
||||
$types .= 's';
|
||||
} else {
|
||||
$types .= 'b';
|
||||
}
|
||||
}
|
||||
|
||||
// Parameter binden
|
||||
if (!empty($params)) {
|
||||
$stmt->bind_param($types, ...$params);
|
||||
}
|
||||
|
||||
// Statement ausführen
|
||||
if (!$stmt->execute()) {
|
||||
throw new Exception("Execute failed: " . $stmt->error);
|
||||
}
|
||||
|
||||
$result = $stmt->get_result();
|
||||
$stmt->close();
|
||||
|
||||
return $result ?: true;
|
||||
}
|
||||
|
||||
// Holt alle Zeilen aus einem Ergebnissatz als assoziatives Array
|
||||
// $result: Der Ergebnissatz
|
||||
// Gibt ein Array von Zeilen zurück
|
||||
public function fetchAll(mysqli_result $result): array {
|
||||
return $result->fetch_all(MYSQLI_ASSOC);
|
||||
}
|
||||
|
||||
// Holt eine einzelne Zeile aus einem Ergebnissatz als assoziatives Array
|
||||
// $result: Der Ergebnissatz
|
||||
// Gibt die Zeile als assoziatives Array zurück oder null, wenn keine Zeilen vorhanden sind
|
||||
public function fetchOne(mysqli_result $result): ?array {
|
||||
$row = $result->fetch_assoc();
|
||||
return $row ?: null;
|
||||
}
|
||||
|
||||
// Initialisiert das Datenbankschema
|
||||
//
|
||||
// Erstellt die notwendigen Tabellen, falls sie nicht existieren:
|
||||
// - user: id, name, email, telephone
|
||||
// - category: id, name
|
||||
// - advert: id, name, description, date, user_id
|
||||
// - advert_category: advert_id, category_id (Viele-zu-viele-Beziehung)
|
||||
//
|
||||
// Gibt true zurück, wenn die Initialisierung erfolgreich war
|
||||
// Wirft eine Exception, wenn die Initialisierung fehlschlägt
|
||||
public function initialize(): bool {
|
||||
try {
|
||||
// Erstelle Benutzer-Tabelle, falls sie nicht existiert
|
||||
$this->query("
|
||||
CREATE TABLE IF NOT EXISTS user (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
name VARCHAR(255) NOT NULL,
|
||||
email VARCHAR(255) NOT NULL,
|
||||
telephone VARCHAR(50) NOT NULL
|
||||
)
|
||||
");
|
||||
|
||||
// Erstelle Kategorie-Tabelle, falls sie nicht existiert
|
||||
$this->query("
|
||||
CREATE TABLE IF NOT EXISTS category (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
name VARCHAR(255) NOT NULL
|
||||
)
|
||||
");
|
||||
|
||||
// Erstelle Anzeigen-Tabelle, falls sie nicht existiert
|
||||
$this->query("
|
||||
CREATE TABLE IF NOT EXISTS advert (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
name VARCHAR(255) NOT NULL,
|
||||
description VARCHAR(255) NOT NULL,
|
||||
date DATETIME NOT NULL,
|
||||
user_id INT NOT NULL,
|
||||
FOREIGN KEY (user_id) REFERENCES user(id)
|
||||
)
|
||||
");
|
||||
|
||||
// Erstelle Anzeigen-Kategorie-Tabelle, falls sie nicht existiert (Viele-zu-viele-Beziehung)
|
||||
$this->query("
|
||||
CREATE TABLE IF NOT EXISTS advert_category (
|
||||
advert_id INT NOT NULL,
|
||||
category_id INT NOT NULL,
|
||||
PRIMARY KEY (advert_id, category_id),
|
||||
FOREIGN KEY (advert_id) REFERENCES advert(id),
|
||||
FOREIGN KEY (category_id) REFERENCES category(id)
|
||||
)
|
||||
");
|
||||
|
||||
return true;
|
||||
} catch (Exception $e) {
|
||||
throw new Exception("Schema initialization failed: " . $e->getMessage());
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,45 @@
|
|||
<?php
|
||||
|
||||
require_once "database.php";
|
||||
|
||||
// Eine einfache Klasse zur Verwaltung von Benutzern
|
||||
// Diese Klasse bietet statische Methoden zur Überprüfung vorhandener Benutzer
|
||||
// und zum Erstellen neuer Benutzer in der Datenbank.
|
||||
class Users {
|
||||
// Überprüft, ob ein Benutzer mit der angegebenen E-Mail existiert und gibt dessen ID zurück
|
||||
// $email: Die E-Mail des zu überprüfenden Benutzers
|
||||
// Gibt die Benutzer-ID zurück, wenn gefunden, sonst null
|
||||
public static function getUserIdByEmail(string $email): ?int {
|
||||
$db = new Database();
|
||||
$sql = "SELECT id FROM user WHERE email = ?";
|
||||
$result = $db->query($sql, [$email]);
|
||||
$user = $db->fetchOne($result);
|
||||
|
||||
return $user ? (int)$user['id'] : null;
|
||||
}
|
||||
|
||||
// Erstellt einen neuen Benutzer in der Datenbank
|
||||
// $name: Der Name des Benutzers
|
||||
// $email: Die E-Mail des Benutzers
|
||||
// $telephone: Die Telefonnummer des Benutzers
|
||||
// Gibt die ID des neu erstellten Benutzers zurück
|
||||
public static function createUser(string $name, string $email, string $telephone): int {
|
||||
$db = new Database();
|
||||
$sql = "INSERT INTO user (name, email, telephone) VALUES (?, ?, ?)";
|
||||
$db->query($sql, [$name, $email, $telephone]);
|
||||
|
||||
// Hole die ID des neu erstellten Benutzers
|
||||
return self::getUserIdByEmail($email);
|
||||
}
|
||||
|
||||
// Holt Benutzerinformationen anhand der Benutzer-ID
|
||||
// $userId: Die ID des Benutzers
|
||||
// Gibt ein Array mit Benutzerinformationen zurück oder null, wenn nicht gefunden
|
||||
public static function getUserById(int $userId): ?array {
|
||||
$db = new Database();
|
||||
$sql = "SELECT id, name, email, telephone FROM user WHERE id = ?";
|
||||
$result = $db->query($sql, [$userId]);
|
||||
|
||||
return $db->fetchOne($result);
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue