kratos
Goto Top

Auswahl im Options Feld anzeigen lassen mit DB Sqlite3 und PHP

Hallo zusammen,

Ich Versuche eine web Anwendung zu schreiben wo jeder seine Einsatz Tage eintragen kann über selecd Option und diese in der web Anwendung gespeichert wird wo jeder der die Anwendung aufruft sehen kann wo noch was frei ist oder der jenige sein Eintrag ändern kann.

Mein Problem ist, das ich es irgendwie nicht hinbekomme, dass die daten in die DB gespeichert werden und es kommt immer wieder der Fehler

500 - Internal server error.
There is a problem with the resource you are looking for, and it cannot be displayed.

Wäre super, wenn ihr mir helfen könnt oder Tipps geben könnt.

Vielen Dank im Voraus!

vg

Kratos


mein Code :

<?php

error_reporting(E_ALL);
ini_set('display_errors',1)  


// Initialisiere die SQLite-Datenbank
$db = new SQLite3('calendar.db');  

// Erstelle die Tabelle shared_data, falls sie nicht existiert
$db->exec('CREATE TABLE IF NOT EXISTS shared_data (id INTEGER PRIMARY KEY AUTOINCREMENT, day TEXT, date TEXT, person TEXT, auto TEXT)');  

// Funktion zum Speichern der ausgewählten Daten in der SQLite-Datenbank
function saveSelectedData($day, $date, $person, $auto, $db) {
    $stmt = $db->prepare('INSERT INTO shared_data (day, date, person, auto) VALUES (:day, :date, :person, :auto)');  
    $stmt->bindValue(':day', $day, SQLITE3_TEXT);  
    $stmt->bindValue(':date', $date, SQLITE3_TEXT);  
    $stmt->bindValue(':person', $person, SQLITE3_TEXT);  
    $stmt->bindValue(':auto', $auto, SQLITE3_TEXT);  
    $stmt->execute();
}

// Überprüfe, ob ein POST-Request erfolgt ist
if ($_SERVER['REQUEST_METHOD'] === 'POST') {  
    // Überprüfe, ob Daten gesendet wurden
    if (isset($_POST['day']) && isset($_POST['date']) && isset($_POST['person']) && isset($_POST['auto'])) {  
        // Speichere die ausgewählten Daten
        saveSelectedData($_POST['day'], $_POST['date'], $_POST['person'], $_POST['auto'], $db);  
    }
}

// Funktion zum Laden der gemeinsam genutzten Daten aus der SQLite-Datenbank
function loadSharedData($db) {
    $result = $db->query('SELECT * FROM shared_data');  
    $data = [];
    while ($row = $result->fetchArray(SQLITE3_ASSOC)) {
        $data[] = $row;
    }
    return $data;
}

// Funktion zum Laden der CSV-Daten
function loadCSVData() {
    $csvData = [];
    $csvFile = fopen('dropdown_data.csv', 'r');  
    while (($line = fgetcsv($csvFile, 0, ';')) !== FALSE) {  
        $csvData[] = ['person' => $line[0], 'auto' => $line[1]];  
    }
    fclose($csvFile);
    return $csvData;
}

// Rufe die Funktion zum Laden der gemeinsam genutzten Daten aus der SQLite-Datenbank auf
$sharedData = loadSharedData($db);

// Rufe die Funktion zum Laden der CSV-Daten auf
$csvData = loadCSVData();
?>

<!DOCTYPE html>
<html lang="de">  
<head>
    <meta charset="UTF-8">  
    <meta name="viewport" content="width=device-width, initial-scale=1.0">  
    <link rel="stylesheet" href="styles.css"> <!-- Stelle sicher, dass du den richtigen Dateinamen verwendest -->  
    <title>Monatskalender</title>
</head>

<style>
body {
    font-family: 'Arial', sans-serif;  
    margin: 0;
    padding: 0;
    background-color: #f4f4f4;
}

.row-container {
    display: flex;
    flex-wrap: wrap;
    justify-content: space-between;
}

.day-container {
    max-width: 900px;
    margin: 15px auto;
    background-color: #fff;
    border-radius: 15px;
    box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
    overflow: hidden;
    text-align: center; /* Zentriert den Text */
}

.header {
    font-size: 36px;
    font-weight: 600;
    text-align: center;
    color: #333;
    padding: 20px 0;
    background-color: #3498db;
    color: #fff;
    margin: 0;
    border-radius: 10px 10px 0 0;
}

.day-info {
    margin-left: 40%;
    width: auto;
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    gap: 10px;
    text-align: center; /* Zentriert den Text */
}

.row {
    padding: 10px;
    text-align: center;
    background-color: #fff;
    display: flex;
    flex-direction: column;
}

.row h3 {
    color: #333;
}

.dropdown {
    width: calc(50% - 15px);
    padding: 6px;
    margin-bottom: 10px;
    box-sizing: border-box;
}

@media only screen and (max-width: 600px) {
    .row {
        grid-template-columns: repeat(2, 1fr);
    }

    .dropdown {
        width: 100%;
    }

    .day-info {
        margin-left: 40%;
        width: auto;
        display: grid;
        grid-template-columns: repeat(3, 1fr);
        gap: 10px;
        text-align: center; /* Zentriert den Text */
    }
}
</style>

<body>
    <div class="header"> plan </div>  
    <div class="row-container">  
        <?php
        setlocale(LC_TIME, 'de_DE');  
        $currentDate = strtotime("first day of this month");  
        $currentMonth = date("n", $currentDate);  

        while (date("n", $currentDate) == $currentMonth) {  
            // Nur Montage erhalten die KW-Anzeige
            if (date("N", $currentDate) == 1) {  
                echo "<div class='day-container'>";  
                echo "<p class='day-info'>" . date("l", $currentDate) . "<br>" . date("d-m-Y", $currentDate) . "<br>KW " . date("W", $currentDate) . "</p>";  

                for ($i = 1; $i <= 5; $i++) {
                    echo "<div class='row'>";  
                    echo "<form method='post'>";  
                    echo "<select name='person' class='dropdown'>";  
                    foreach ($csvData as $entry) {
                        echo "<option value='{$entry['person']}'>{$entry['person']}</option>";  
                    }
                    echo "</select>";  

                    echo "<select name='auto' class='dropdown'>";  
                    foreach ($csvData as $entry) {
                        echo "<option value='{$entry['auto']}'>{$entry['auto']}</option>";  
                    }
                    echo "</select>";  

                    echo "<input type='hidden' name='day' value='" . date("j", $currentDate) . "'>";  
                    echo "<input type='hidden' name='date' value='" . date("d-m-Y", $currentDate) . "'>";  
                    echo "<input type='hidden' name='fieldNumber' value='{$i}'>";  
                    echo "</form>";  
                    echo "</div>"; // Schließe die row  
                }

                echo "</div>"; // Schließe die day-container  
            } else {
                // Überspringe Samstag und Sonntag
                if (date("N", $currentDate) <= 5) {  
                    echo "<div class='day-container'>";  
                    echo "<p class='day-info'>" . date("l", $currentDate) . "<br>" . date("d-m-Y", $currentDate) . "</p>";  

                    for ($i = 1; $i <= 5; $i++) {
                        echo "<div class='row'>";  
                        echo "<form method='post'>";  
                        echo "<select name='person' class='dropdown'>";  
                        foreach ($csvData as $entry) {
                            echo "<option value='{$entry['person']}'>{$entry['person']}</option>";  
                        }
                        echo "</select>";  

                        echo "<select name='auto' class='dropdown'>";  
                        foreach ($csvData as $entry) {
                            echo "<option value='{$entry['auto']}'>{$entry['auto']}</option>";  
                        }
                        echo "</select>";  

                        echo "<input type='hidden' name='day' value='" . date("j", $currentDate) . "'>";  
                        echo "<input type='hidden' name='date' value='" . date("d-m-Y", $currentDate) . "'>";  
                        echo "<input type='hidden' name='fieldNumber' value='{$i}'>";  
                        echo "</form>";  
                        echo "</div>"; // Schließe die row  
                    }

                    echo "</div>"; // Schließe die day-container  
                }
            }

            // Nächster Tag
            $currentDate = strtotime("+1 day", $currentDate);  

            if (date("N", $currentDate) == 5) {  
                // Neue Zeile nach Freitag
                echo "<br>";  
            }
        }
        ?>
    </div>
</body>
</html>

Content-ID: 8117156586

Url: https://administrator.de/contentid/8117156586

Ausgedruckt am: 21.11.2024 um 19:11 Uhr

Xaero1982
Xaero1982 18.01.2024 um 20:37:20 Uhr
Goto Top
Moin,

"ich versuche ganze Zeit in den Options Feldern eingetragen daten anzeigen zu lassen, die ich auswähle, egal von welchen gerät und wie viele User das machen.

Wenn du die Seite aufrufst oder den Browser schließt oder aktualisierst müssen die Einträge die du oder ein anderer ausgewählt hat zu sehen sein und veränderbar sein, dass alles muss nicht in Echtzeit sein."

Ich raff noch nichtmal was du uns damit sagen willst.

Was hast du vor?

Grüße
Kratos
Kratos 18.01.2024 um 20:50:00 Uhr
Goto Top
Habe es mir gedacht das es sich bisschen kompliziert bzw. Verwirrend anhört.

Ich Versuche eine web Anwendung zu schreiben wo jeder seine Einsatz Tage eintragen kann und diese in der web Anwendung gespeichert wird wo jeder der die Anwendung aufruft sehen kann wo noch was frei ist oder der jenige sich noch eintragen kann oder bzw. Den Eintrag ändern kann.

Und das soll immer angezeigt werden auch wenn der Browser geschlossen wird oder aktualisiert wird und egal von wo du die Anwendung aufrufst.

Ich hoffe jetzt ist es etwas verständlicherface-smile
Xaero1982
Xaero1982 18.01.2024 um 20:53:09 Uhr
Goto Top
Ganz ehrlich? Nö

Also nimm einen Kalender. Erfinde das Rad nicht neu. Weil nach mehr klingt das nicht.

Wo soll was angezeigt werden, wenn der Browser geschlossen ist? This makes no sence ...
Kratos
Kratos 18.01.2024 um 20:58:35 Uhr
Goto Top
Ich will nur wissen warum ich nicht in die Datenbank speichern kann um von da die Daten abzurufen für die Webanwendungen.
Das ist kein gewöhnlicher Kalender das soll nur eine Planung erleichtern.
Xaero1982
Xaero1982 18.01.2024 um 21:19:52 Uhr
Goto Top
Zum einem fehlen dir Submitbuttons in den Formularen.
In der 4. Zeile fehlt ein Semikolon.

Ansonsten kannst du ja mal hier und da schauen, ob in den Variablen der korrekte Inhalt steht
Kratos
Kratos 18.01.2024 um 21:31:12 Uhr
Goto Top
Dankeschön, habe total vergessen den Button zu setzten das hilft mir schon sehr, denn Rest kontrolliere ich dann auch noch.

Vielen Dank noch Mal.