Ver código fonte

Spiele mit unbekanntem Ergebnis können erfasst werden

erdo 16 horas atrás
pai
commit
92514314cf
2 arquivos alterados com 61 adições e 28 exclusões
  1. 15 3
      gesamtliste.php
  2. 46 25
      index.php

+ 15 - 3
gesamtliste.php

@@ -6,8 +6,10 @@ require_once 'db_config.php';
 $filterPlayerId = isset($_GET['team_filter']) ? (int)$_GET['team_filter'] : 0;
 $filterTypId = isset($_GET['typ_filter']) ? (int)$_GET['typ_filter'] : 0;
 
-// SQL Query mit Filtern und Standard-Sortierung nach Titel (A-Z)
-$sql = "SELECT sp.*, t.bezeichnung as typ_name, MAX(sc.sterne) as best_sterne, 
+// SQL Query: COUNT(sc.id) hinzugefügt, um "gespielt" ohne Sterne zu erkennen
+$sql = "SELECT sp.*, t.bezeichnung as typ_name, 
+               MAX(sc.sterne) as best_sterne,
+               COUNT(sc.id) as anzahl_scores,
                (SELECT status FROM besitzstatus WHERE spiel_id = sp.id AND spieler_id = :fid) as einzel_status,
                (SELECT GROUP_CONCAT(CONCAT(p.name, ': ', b.status) SEPARATOR '||') 
                 FROM besitzstatus b JOIN spieler p ON b.spieler_id = p.id 
@@ -158,7 +160,17 @@ $typen = $pdo->query("SELECT * FROM game_typen ORDER BY bezeichnung ASC")->fetch
                         <?= ($lvl == 'unknown') ? 'Unbekannt' : $lvl ?>
                     </span>
                 </td>
-                <td><?= $row['best_sterne'] ? "<b>{$row['best_sterne']} ★</b>" : "-" ?></td>
+                <td>
+                    <?php 
+                        if ($row['best_sterne'] > 0) {
+                            echo "<b>{$row['best_sterne']} ★</b>";
+                        } elseif ($row['anzahl_scores'] > 0) {
+                            echo "<i style='opacity:0.7'>Gespielt</i>";
+                        } else {
+                            echo "-";
+                        }
+                    ?>
+                </td>
                 <td>
                     <?php if ($filterPlayerId > 0): 
                         $st = $row['einzel_status'] ?: 'nicht besitzt';

+ 46 - 25
index.php

@@ -12,14 +12,21 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['add_player'])) {
 
 // --- LOGIK: SCORE HINZUFÜGEN ---
 if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['add_score'])) {
+    $unbekannt = isset($_POST['ergebnis_unbekannt']);
+    
+    // Wenn unbekannt, werden 0-Werte gespeichert
+    $zeit = $unbekannt ? 0 : (int)$_POST['zeit'];
+    $hilfe = $unbekannt ? 0 : (int)$_POST['hilfe'];
+    $sterne = $unbekannt ? 0 : (int)$_POST['sterne'];
+
     $sql = "INSERT INTO scores (spieler_id, spiel_id, zeit, hilfe, sterne) VALUES (?, ?, ?, ?, ?)";
     $stmt = $pdo->prepare($sql);
     $stmt->execute([
         $_POST['spieler_id'], 
         $_POST['spiel_id'], 
-        (int)$_POST['zeit'], 
-        (int)$_POST['hilfe'], 
-        (int)$_POST['sterne']
+        $zeit, 
+        $hilfe, 
+        $sterne
     ]);
     header("Location: index.php?success=score");
     exit;
@@ -75,11 +82,10 @@ $allScores = $pdo->query($sqlScores)->fetchAll();
 
         .theme-toggle { background: var(--card); border: 1px solid var(--border); color: var(--text); width: 42px; height: 34px; border-radius: 10px; cursor: pointer; display: flex; align-items: center; justify-content: center; transition: 0.3s; }
 
-        /* --- SWIPER LAYOUT MIT TRANSPARENTEN PFEILEN OHNE KREIS --- */
         .swiper-outer-wrapper {
             position: relative;
             width: 100%;
-            padding: 0 50px; /* Platz für die Pfeile neben dem Banner */
+            padding: 0 50px; 
             box-sizing: border-box;
             margin-bottom: 40px;
         }
@@ -89,41 +95,35 @@ $allScores = $pdo->query($sqlScores)->fetchAll();
         .swiper-pagination-progressbar { background: var(--border) !important; height: 4px !important; top: 0 !important; }
         .swiper-pagination-progressbar-fill { background: var(--accent) !important; }
         
-        /* Die Pfeil-Buttons angepasst */
         .swiper-button-next, .swiper-button-prev { 
-            color: var(--text); /* Nutzt Standard-Textfarbe oder Akzentfarbe */
-            background: none;   /* Kreis entfernen */
-            width: auto;        /* Breite automatisch */
-            height: auto;       /* Höhe automatisch */
-            box-shadow: none;   /* Schatten entfernen */
-            border: none;       /* Rahmen entfernen */
+            color: var(--text); 
+            background: none;   
+            width: auto;        
+            height: auto;       
+            box-shadow: none;   
+            border: none;       
             position: absolute;
             top: 50%;
             transform: translateY(-50%);
             z-index: 10;
-            margin-top: 0;
-            opacity: 0.5;       /* Transparent setzen */
+            opacity: 0.5;       
             transition: all 0.3s ease;
         }
 
-        /* Hover-Effekt: Farbe ändern und Deckkraft erhöhen */
         .swiper-button-next:hover, .swiper-button-prev:hover {
             color: var(--accent);
             opacity: 1;
-            background: none;
             transform: translateY(-50%) scale(1.1);
         }
 
         .swiper-button-prev { left: 10px; }
         .swiper-button-next { right: 10px; }
 
-        /* Pfeilspitzen-Größe (angepasst für Icon-Look) */
         .swiper-button-next:after, .swiper-button-prev:after { 
-            font-size: 40px;    /* Etwas größer, da der Kreis weg ist */
+            font-size: 40px;    
             font-weight: bold; 
         }
 
-        /* Auf kleinen Geräten Pfeile ausblenden für mehr Platz */
         @media (max-width: 768px) {
             .swiper-outer-wrapper { padding: 0 10px; }
             .swiper-button-next, .swiper-button-prev { display: none; }
@@ -161,6 +161,9 @@ $allScores = $pdo->query($sqlScores)->fetchAll();
         
         #playerModal { display: none; position: fixed; top: 50%; left: 50%; transform: translate(-50%, -50%); background: var(--card); padding: 30px; border-radius: 12px; border: 1px solid var(--accent); z-index: 2000; color: var(--text); box-shadow: 0 0 50px rgba(0,0,0,0.5); }
         .overlay { display: none; position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: rgba(0,0,0,0.7); z-index: 1500; }
+        
+        .unknown-box { margin-bottom: 15px; display: flex; align-items: center; gap: 8px; font-size: 0.9em; }
+        .unknown-box input { width: auto; margin: 0; cursor: pointer; }
     </style>
     <script>
         if (localStorage.getItem('theme') === 'dark') document.documentElement.classList.add('dark-theme');
@@ -200,8 +203,8 @@ $allScores = $pdo->query($sqlScores)->fetchAll();
                                         if ($entry['spiel_id'] == $game['id']): $found = true; ?>
                                         <tr>
                                             <td><strong><?= htmlspecialchars($entry['spieler_name']) ?></strong></td>
-                                            <td><?= $entry['zeit'] ?>'</td>
-                                            <td style="color:#f1c40f"><?= $entry['sterne'] ?>★</td>
+                                            <td><?= $entry['zeit'] > 0 ? $entry['zeit']."'" : '?' ?></td>
+                                            <td style="color:#f1c40f"><?= $entry['sterne'] > 0 ? $entry['sterne']."★" : "gespielt" ?></td>
                                         </tr>
                                     <?php endif; endforeach; 
                                     if (!$found) echo "<tr><td colspan='3' style='opacity:0.5'>Noch keine Scores.</td></tr>";
@@ -243,10 +246,16 @@ $allScores = $pdo->query($sqlScores)->fetchAll();
                         <option value="<?= $p['id'] ?>"><?= htmlspecialchars($p['name']) ?></option>
                     <?php endforeach; ?>
                 </select>
-                <div style="display: flex; gap: 10px;">
-                    <input type="number" name="zeit" placeholder="Min" required>
-                    <input type="number" name="sterne" min="1" max="10" placeholder="Sterne">
-                    <input type="number" name="hilfe" placeholder="Hilfe">
+                
+                <div class="unknown-box">
+                    <input type="checkbox" name="ergebnis_unbekannt" id="ergebnis_unbekannt" onchange="toggleInputs()">
+                    <label for="ergebnis_unbekannt">Ergebnisse unbekannt</label>
+                </div>
+
+                <div id="input-fields" style="display: flex; gap: 10px;">
+                    <input type="number" name="zeit" id="zeit" placeholder="Min" required>
+                    <input type="number" name="sterne" id="sterne" min="1" max="10" placeholder="Sterne">
+                    <input type="number" name="hilfe" id="hilfe" placeholder="Hilfe">
                 </div>
                 <button type="submit" name="add_score">Score speichern</button>
             </form>
@@ -281,6 +290,18 @@ $allScores = $pdo->query($sqlScores)->fetchAll();
     }
     if (localStorage.getItem('theme') === 'dark') themeIcon.innerText = '☀️';
 
+    function toggleInputs() {
+        const check = document.getElementById('ergebnis_unbekannt');
+        const fields = ['zeit', 'sterne', 'hilfe'];
+        fields.forEach(id => {
+            const el = document.getElementById(id);
+            el.disabled = check.checked;
+            if (check.checked) el.value = '';
+            if (id === 'zeit') el.required = !check.checked;
+        });
+        document.getElementById('input-fields').style.opacity = check.checked ? '0.5' : '1';
+    }
+
     new Swiper(".mySwiper", {
         slidesPerView: "auto", 
         spaceBetween: 20,