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