erster Commit draft Dateien
This commit is contained in:
parent
3820e6a809
commit
0ea116052d
14 changed files with 435 additions and 1 deletions
11
README.md
11
README.md
|
|
@ -1,3 +1,12 @@
|
||||||
# FSCash
|
# FSCash
|
||||||
|
|
||||||
Dokumentiere Ausgaben on-the-go als Webapp
|
Dokumentiere Ausgaben on-the-go als Webapp
|
||||||
|
Das erste Release soll enthalten:
|
||||||
|
- mariadb setup
|
||||||
|
- apache2 setup
|
||||||
|
- Auswahl des UI frameworks
|
||||||
|
- login
|
||||||
|
- Anzeige bestehender Ausgaben des aktuellen Monats
|
||||||
|
- "+" Button zum Aufruf der Eingabemaske
|
||||||
|
- Eingabemaske für Ausgaben
|
||||||
|
- Speichern der Ausgaben in mariadb
|
||||||
|
|
|
||||||
104
html/assets/css/style.css
Normal file
104
html/assets/css/style.css
Normal file
|
|
@ -0,0 +1,104 @@
|
||||||
|
/* Basis-Stile */
|
||||||
|
body {
|
||||||
|
font-family: Arial, sans-serif;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
background-color: #f4f4f4;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Cookie-Hinweis */
|
||||||
|
.cookie-notice {
|
||||||
|
position: fixed;
|
||||||
|
bottom: 0;
|
||||||
|
left: 0;
|
||||||
|
right: 0;
|
||||||
|
background: #333;
|
||||||
|
color: #fff;
|
||||||
|
padding: 10px;
|
||||||
|
text-align: center;
|
||||||
|
z-index: 1000;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Modal */
|
||||||
|
.modal {
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
position: fixed;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
right: 0;
|
||||||
|
bottom: 0;
|
||||||
|
background: rgba(0,0,0,0.5);
|
||||||
|
z-index: 1001;
|
||||||
|
}
|
||||||
|
.modal-content {
|
||||||
|
background: #fff;
|
||||||
|
padding: 20px;
|
||||||
|
border-radius: 5px;
|
||||||
|
width: 90%;
|
||||||
|
max-width: 400px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Navigation */
|
||||||
|
.nav {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
padding: 10px;
|
||||||
|
background: #333;
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
.nav-list {
|
||||||
|
display: none;
|
||||||
|
list-style: none;
|
||||||
|
padding: 0;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
.nav-list li {
|
||||||
|
padding: 5px 0;
|
||||||
|
}
|
||||||
|
.hamburger {
|
||||||
|
display: block;
|
||||||
|
background: none;
|
||||||
|
border: none;
|
||||||
|
color: #fff;
|
||||||
|
font-size: 24px;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
.logout {
|
||||||
|
color: #fff;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Tabelle */
|
||||||
|
table {
|
||||||
|
width: 100%;
|
||||||
|
border-collapse: collapse;
|
||||||
|
}
|
||||||
|
th, td {
|
||||||
|
padding: 8px;
|
||||||
|
text-align: left;
|
||||||
|
border-bottom: 1px solid #ddd;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Button */
|
||||||
|
.btn-new {
|
||||||
|
display: block;
|
||||||
|
background: #4CAF50;
|
||||||
|
color: white;
|
||||||
|
padding: 10px;
|
||||||
|
text-align: center;
|
||||||
|
text-decoration: none;
|
||||||
|
margin: 20px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Responsive */
|
||||||
|
@media (min-width: 768px) {
|
||||||
|
.nav-list {
|
||||||
|
display: flex;
|
||||||
|
}
|
||||||
|
.hamburger {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
9
html/assets/js/script.js
Normal file
9
html/assets/js/script.js
Normal file
|
|
@ -0,0 +1,9 @@
|
||||||
|
// Cookie-Hinweis ausblenden
|
||||||
|
document.getElementById('accept-cookies').addEventListener('click', function() {
|
||||||
|
document.getElementById('cookie-notice').style.display = 'none';
|
||||||
|
});
|
||||||
|
|
||||||
|
// Hamburger-Menü
|
||||||
|
document.querySelector('.hamburger').addEventListener('click', function() {
|
||||||
|
document.querySelector('.nav-list').classList.toggle('show');
|
||||||
|
});
|
||||||
21
html/config.php
Normal file
21
html/config.php
Normal file
|
|
@ -0,0 +1,21 @@
|
||||||
|
<?php
|
||||||
|
session_start();
|
||||||
|
$host = 'localhost';
|
||||||
|
$db = 'finanzapp';
|
||||||
|
$user = 'root'; // Anpassen!
|
||||||
|
$pass = ''; // Anpassen!
|
||||||
|
$charset = 'utf8mb4';
|
||||||
|
|
||||||
|
$dsn = "mysql:host=$host;dbname=$db;charset=$charset";
|
||||||
|
$options = [
|
||||||
|
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
|
||||||
|
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
|
||||||
|
PDO::ATTR_EMULATE_PREPARES => false,
|
||||||
|
];
|
||||||
|
|
||||||
|
try {
|
||||||
|
$pdo = new PDO($dsn, $user, $pass, $options);
|
||||||
|
} catch (\PDOException $e) {
|
||||||
|
throw new \PDOException($e->getMessage(), (int)$e->getCode());
|
||||||
|
}
|
||||||
|
?>
|
||||||
83
html/dashboard.php
Normal file
83
html/dashboard.php
Normal file
|
|
@ -0,0 +1,83 @@
|
||||||
|
<?php
|
||||||
|
require 'config.php';
|
||||||
|
if (!isset($_SESSION['user_id'])) {
|
||||||
|
header('Location: index.php');
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Login-Logik
|
||||||
|
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
|
||||||
|
$stmt = $pdo->prepare("SELECT * FROM users WHERE username = ?");
|
||||||
|
$stmt->execute([$_POST['username']]);
|
||||||
|
$user = $stmt->fetch();
|
||||||
|
if ($user && password_verify($_POST['password'], $user['password'])) {
|
||||||
|
$_SESSION['user_id'] = $user['id'];
|
||||||
|
} else {
|
||||||
|
header('Location: index.php');
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Daten abrufen
|
||||||
|
$stmt = $pdo->prepare("SELECT * FROM entries WHERE user_id = ?");
|
||||||
|
$stmt->execute([$_SESSION['user_id']]);
|
||||||
|
$entries = $stmt->fetchAll();
|
||||||
|
?>
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="de">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<title>FinanzApp - Dashboard</title>
|
||||||
|
<link rel="stylesheet" href="assets/css/style.css">
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div class="container">
|
||||||
|
<!-- Navigation -->
|
||||||
|
<nav class="nav">
|
||||||
|
<button class="hamburger">☰</button>
|
||||||
|
<ul class="nav-list">
|
||||||
|
<li><a href="menu1.php">Menüpunkt 1</a></li>
|
||||||
|
<li><a href="menu2.php">Menüpunkt 2</a></li>
|
||||||
|
<li><a href="menu3.php">Menüpunkt 3</a></li>
|
||||||
|
<li><a href="menu4.php">Menüpunkt 4</a></li>
|
||||||
|
<li><a href="menu5.php">Menüpunkt 5</a></li>
|
||||||
|
</ul>
|
||||||
|
<a href="logout.php" class="logout">Logout</a>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<!-- Tabelle -->
|
||||||
|
<table>
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>Datum</th>
|
||||||
|
<?php if (!isset($_COOKIE['mobile'])): ?>
|
||||||
|
<th>Kategorie</th>
|
||||||
|
<th>Zahlweise</th>
|
||||||
|
<?php endif; ?>
|
||||||
|
<th>Betreff</th>
|
||||||
|
<th>Betrag</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<?php foreach ($entries as $entry): ?>
|
||||||
|
<tr>
|
||||||
|
<td><?= htmlspecialchars($entry['date']) ?></td>
|
||||||
|
<?php if (!isset($_COOKIE['mobile'])): ?>
|
||||||
|
<td><?= htmlspecialchars($entry['category'] ?? '') ?></td>
|
||||||
|
<td><?= htmlspecialchars($entry['payment_method'] ?? '') ?></td>
|
||||||
|
<?php endif; ?>
|
||||||
|
<td><?= htmlspecialchars($entry['subject']) ?></td>
|
||||||
|
<td><?= htmlspecialchars($entry['amount']) ?></td>
|
||||||
|
</tr>
|
||||||
|
<?php endforeach; ?>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<!-- Neu-Button -->
|
||||||
|
<a href="new_entry.php" class="btn-new">Neu</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<script src="assets/js/script.js"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
37
html/index.php
Normal file
37
html/index.php
Normal file
|
|
@ -0,0 +1,37 @@
|
||||||
|
<?php
|
||||||
|
require 'config.php';
|
||||||
|
if (isset($_SESSION['user_id'])) {
|
||||||
|
header('Location: dashboard.php');
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="de">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<title>FinanzApp - Login</title>
|
||||||
|
<link rel="stylesheet" href="assets/css/style.css">
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<!-- Cookie-Hinweis -->
|
||||||
|
<div id="cookie-notice" class="cookie-notice">
|
||||||
|
<p>Diese Website verwendet nur technisch notwendige Cookies.</p>
|
||||||
|
<button id="accept-cookies">OK</button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Modal Login Dialog -->
|
||||||
|
<div id="login-modal" class="modal">
|
||||||
|
<div class="modal-content">
|
||||||
|
<h2>Login</h2>
|
||||||
|
<form action="dashboard.php" method="post">
|
||||||
|
<input type="text" name="username" placeholder="Benutzername" required>
|
||||||
|
<input type="password" name="password" placeholder="Passwort" required>
|
||||||
|
<button type="submit">Einloggen</button>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<script src="assets/js/script.js"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
6
html/logout.php
Normal file
6
html/logout.php
Normal file
|
|
@ -0,0 +1,6 @@
|
||||||
|
<?php
|
||||||
|
session_start();
|
||||||
|
session_destroy();
|
||||||
|
header('Location: index.php');
|
||||||
|
exit;
|
||||||
|
?>
|
||||||
22
html/menu1.php
Normal file
22
html/menu1.php
Normal file
|
|
@ -0,0 +1,22 @@
|
||||||
|
<?php
|
||||||
|
require 'config.php';
|
||||||
|
if (!isset($_SESSION['user_id'])) {
|
||||||
|
header('Location: index.php');
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="de">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<title>FinanzApp - Menüpunkt X</title>
|
||||||
|
<link rel="stylesheet" href="assets/css/style.css">
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div class="container">
|
||||||
|
<h1>Menüpunkt X</h1>
|
||||||
|
<p>Hier kommt der Inhalt für Menüpunkt X.</p>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
22
html/menu2.php
Normal file
22
html/menu2.php
Normal file
|
|
@ -0,0 +1,22 @@
|
||||||
|
<?php
|
||||||
|
require 'config.php';
|
||||||
|
if (!isset($_SESSION['user_id'])) {
|
||||||
|
header('Location: index.php');
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="de">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<title>FinanzApp - Menüpunkt X</title>
|
||||||
|
<link rel="stylesheet" href="assets/css/style.css">
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div class="container">
|
||||||
|
<h1>Menüpunkt X</h1>
|
||||||
|
<p>Hier kommt der Inhalt für Menüpunkt X.</p>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
22
html/menu3.php
Normal file
22
html/menu3.php
Normal file
|
|
@ -0,0 +1,22 @@
|
||||||
|
<?php
|
||||||
|
require 'config.php';
|
||||||
|
if (!isset($_SESSION['user_id'])) {
|
||||||
|
header('Location: index.php');
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="de">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<title>FinanzApp - Menüpunkt X</title>
|
||||||
|
<link rel="stylesheet" href="assets/css/style.css">
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div class="container">
|
||||||
|
<h1>Menüpunkt X</h1>
|
||||||
|
<p>Hier kommt der Inhalt für Menüpunkt X.</p>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
22
html/menu4.php
Normal file
22
html/menu4.php
Normal file
|
|
@ -0,0 +1,22 @@
|
||||||
|
<?php
|
||||||
|
require 'config.php';
|
||||||
|
if (!isset($_SESSION['user_id'])) {
|
||||||
|
header('Location: index.php');
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="de">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<title>FinanzApp - Menüpunkt X</title>
|
||||||
|
<link rel="stylesheet" href="assets/css/style.css">
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div class="container">
|
||||||
|
<h1>Menüpunkt X</h1>
|
||||||
|
<p>Hier kommt der Inhalt für Menüpunkt X.</p>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
22
html/menu5.php
Normal file
22
html/menu5.php
Normal file
|
|
@ -0,0 +1,22 @@
|
||||||
|
<?php
|
||||||
|
require 'config.php';
|
||||||
|
if (!isset($_SESSION['user_id'])) {
|
||||||
|
header('Location: index.php');
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="de">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<title>FinanzApp - Menüpunkt X</title>
|
||||||
|
<link rel="stylesheet" href="assets/css/style.css">
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div class="container">
|
||||||
|
<h1>Menüpunkt X</h1>
|
||||||
|
<p>Hier kommt der Inhalt für Menüpunkt X.</p>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
29
html/new_entry.php
Normal file
29
html/new_entry.php
Normal file
|
|
@ -0,0 +1,29 @@
|
||||||
|
<?php
|
||||||
|
require 'config.php';
|
||||||
|
if (!isset($_SESSION['user_id'])) {
|
||||||
|
header('Location: index.php');
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="de">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<title>FinanzApp - Neuer Eintrag</title>
|
||||||
|
<link rel="stylesheet" href="assets/css/style.css">
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div class="container">
|
||||||
|
<h1>Neuer Eintrag</h1>
|
||||||
|
<form action="dashboard.php" method="post">
|
||||||
|
<input type="date" name="date" required>
|
||||||
|
<input type="text" name="category" placeholder="Kategorie">
|
||||||
|
<input type="text" name="subject" placeholder="Betreff" required>
|
||||||
|
<input type="number" step="0.01" name="amount" placeholder="Betrag" required>
|
||||||
|
<input type="text" name="payment_method" placeholder="Zahlweise">
|
||||||
|
<button type="submit">Speichern</button>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
26
init_sql.sql
Normal file
26
init_sql.sql
Normal file
|
|
@ -0,0 +1,26 @@
|
||||||
|
-- Datenbank erstellen
|
||||||
|
CREATE DATABASE IF NOT EXISTS finanzapp;
|
||||||
|
USE finanzapp;
|
||||||
|
|
||||||
|
-- Tabelle für Benutzer
|
||||||
|
CREATE TABLE IF NOT EXISTS users (
|
||||||
|
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||||
|
username VARCHAR(50) NOT NULL UNIQUE,
|
||||||
|
password VARCHAR(255) NOT NULL
|
||||||
|
);
|
||||||
|
|
||||||
|
-- Tabelle für Einträge
|
||||||
|
CREATE TABLE IF NOT EXISTS entries (
|
||||||
|
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||||
|
user_id INT NOT NULL,
|
||||||
|
date DATE NOT NULL,
|
||||||
|
category VARCHAR(50),
|
||||||
|
subject VARCHAR(255) NOT NULL,
|
||||||
|
amount DECIMAL(10,2) NOT NULL,
|
||||||
|
payment_method VARCHAR(50),
|
||||||
|
FOREIGN KEY (user_id) REFERENCES users(id)
|
||||||
|
);
|
||||||
|
|
||||||
|
-- Testbenutzer einfügen (Passwort: "test123")
|
||||||
|
INSERT INTO users (username, password) VALUES ('testuser', '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi');
|
||||||
|
|
||||||
Loading…
Add table
Reference in a new issue