Montag, 25 August 2025

Top 5 diese Woche

Ähnliche Tutorials

Witze Portal

Erstellen Sie Ihre eigene Witze-Plattform – sofort einsatzbereit und komplett in einer Datei!

Highlights:

  • Alles-in-einem Script: PHP, MySQL und Installation in einer Datei
  • Automatische DB-Erstellung: Einfach hochladen, Script erledigt den Rest
  • Interaktive Features: Witze liken, kommentieren und durchsuchen
  • Kategorien & Filter: Ordnung und Übersicht für Ihre Nutzer
  • AJAX-Funktionalität: Schnelle Interaktionen ohne Seitenreload
  • Modernes Design: Sauberes, responsives Layout – perfekt für Agenturen und Hobby-Websites
  • Einfach zu installieren: Keine komplizierten Konfigurationen nötig

Perfekt für:

  • Webseitenbetreiber, die ein sofort funktionierendes Witze-Portal möchten
  • Entwickler und Agenturen, die schnell ein interaktives Portal bereitstellen wollen
  • Hobbyprojekte oder Testumgebungen

Systemanforderungen:

  • PHP 7+
  • MySQL oder MariaDB
  • Webserver mit Schreibrechten auf das Script-Verzeichnis
<?php
// ---------------------------
// CONFIG
// ---------------------------
$dbHost = 'localhost';
$dbUser = 'root';
$dbPass = '';
$dbName = 'witzesammlung';

// ---------------------------
// CONNECT & CREATE DB IF NOT EXISTS
// ---------------------------
$mysqli = new mysqli($dbHost, $dbUser, $dbPass);
if ($mysqli->connect_error) die('DB Connection Fehler: '.$mysqli->connect_error);

$mysqli->query("CREATE DATABASE IF NOT EXISTS $dbName CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci");
$mysqli->select_db($dbName);

// ---------------------------
// CREATE TABLES IF NOT EXISTS
// ---------------------------
$mysqli->query("
CREATE TABLE IF NOT EXISTS jokes (
    id INT AUTO_INCREMENT PRIMARY KEY,
    text TEXT NOT NULL,
    category VARCHAR(50) DEFAULT 'Allgemein',
    likes INT DEFAULT 0
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
");

$mysqli->query("
CREATE TABLE IF NOT EXISTS comments (
    id INT AUTO_INCREMENT PRIMARY KEY,
    joke_id INT NOT NULL,
    username VARCHAR(50) NOT NULL,
    comment TEXT NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (joke_id) REFERENCES jokes(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
");

// ---------------------------
// FILL TABLE WITH SAMPLE DATA IF EMPTY
// ---------------------------
$res = $mysqli->query("SELECT COUNT(*) as cnt FROM jokes");
$count = $res->fetch_assoc()['cnt'];
if ($count == 0) {
    $sampleJokes = [
        ['Warum können Geister so schlecht lügen? Weil man durch sie hindurchsieht!', 'Allgemein'],
        ['Treffen sich zwei Jäger. Beide tot.', 'Wortspiele'],
        ['Warum ging der Pilz auf die Party? Weil er ein Champignon war.', 'Allgemein'],
        ['Was macht ein Pirat am Computer? Er drückt die Enter-Taste.', 'Allgemein'],
        ['Warum können Seeräuber kein Alphabet lernen? Weil sie immer auf dem C stecken bleiben.', 'Wortspiele'],
        ['Ich habe gestern einen Witz über einen Zauberer gehört… Aber der war verschwunden.', 'Allgemein'],
        ['Warum dürfen Geister keine Lügen erzählen? Weil man durch sie hindurchsieht.', 'Allgemein']
    ];
    $stmt = $mysqli->prepare("INSERT INTO jokes (text, category) VALUES (?, ?)");
    foreach($sampleJokes as $j){
        $stmt->bind_param("ss", $j[0], $j[1]);
        $stmt->execute();
    }
    $stmt->close();
}

// ---------------------------
// AJAX: Like
// ---------------------------
if(isset($_POST['action']) && $_POST['action']=='like'){
    $id = intval($_POST['id']);
    $mysqli->query("UPDATE jokes SET likes=likes+1 WHERE id=$id");
    $res = $mysqli->query("SELECT likes FROM jokes WHERE id=$id");
    echo $res->fetch_assoc()['likes'];
    exit;
}

// AJAX: Kommentar
if(isset($_POST['action']) && $_POST['action']=='comment'){
    $id = intval($_POST['id']);
    $user = $mysqli->real_escape_string($_POST['username']);
    $comment = $mysqli->real_escape_string($_POST['comment']);
    $mysqli->query("INSERT INTO comments (joke_id, username, comment) VALUES($id,'$user','$comment')");
    echo json_encode([
        'username'=>$user,
        'comment'=>$comment,
        'created_at'=>date('Y-m-d H:i')
    ]);
    exit;
}

// ---------------------------
// Kategorie Filter
// ---------------------------
$categoryFilter = $_GET['category'] ?? '';
$where = $categoryFilter ? "WHERE category='".$mysqli->real_escape_string($categoryFilter)."'" : '';
$jokes = $mysqli->query("SELECT * FROM jokes $where ORDER BY id DESC");
?>
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Dreamcodes Witze Portal</title>
<style>
body{font-family:Arial,sans-serif;margin:0;background:#f4f4f4;color:#333;}
header{background:#4caf50;color:#fff;text-align:center;padding:1rem;}
.container{max-width:800px;margin:2rem auto;padding:1rem;background:#fff;border-radius:8px;box-shadow:0 4px 8px rgba(0,0,0,0.1);}
.joke{border-bottom:1px solid #ddd;padding:1rem 0;}
.joke:last-child{border:none;}
button.like{background:#4caf50;color:#fff;border:none;padding:5px 10px;border-radius:4px;cursor:pointer;margin-left:1rem;}
.comment-box{margin-top:0.5rem;}
.comment-box input, .comment-box textarea{width:100%;padding:5px;margin:2px 0;border-radius:4px;border:1px solid #ccc;}
.comment-box button{background:#2196f3;color:#fff;border:none;padding:5px 10px;border-radius:4px;cursor:pointer;margin-top:5px;}
.comments{margin-top:10px;padding-left:10px;font-size:0.9rem;}
.comment{border-top:1px solid #eee;padding:5px 0;}
.category{margin-bottom:1rem;}
.category a{margin-right:10px;text-decoration:none;color:#2196f3;}
.category a.active{font-weight:bold;}
footer{text-align:center;padding:1rem;margin-top:2rem;color:#777;font-size:0.9rem;}
</style>
</head>
<body>
<header><h1>Dreamcodes Witze Portal</h1></header>
<div class="container">
<div class="category">
<a href="?" class="<?= $categoryFilter==''?'active':'' ?>">Alle</a>
<?php
$cats = $mysqli->query("SELECT DISTINCT category FROM jokes");
while($c=$cats->fetch_assoc()){
    echo '<a href="?category='.urlencode($c['category']).'"'.($categoryFilter==$c['category']?' class="active"':'').'>'.$c['category'].'</a>';
}
?>
</div>
<?php while($row=$jokes->fetch_assoc()): ?>
<div class="joke" data-id="<?= $row['id'] ?>">
    <p><?= htmlspecialchars($row['text']) ?></p>
    <button class="like">Gefällt mir (<span class="likes"><?= $row['likes'] ?></span>)</button>
    <div class="comment-box">
        <input type="text" placeholder="Name" class="username">
        <textarea placeholder="Kommentar" class="comment-text"></textarea>
        <button class="add-comment">Kommentar hinzufügen</button>
    </div>
    <div class="comments">
    <?php
    $cmts = $mysqli->query("SELECT * FROM comments WHERE joke_id=".$row['id']." ORDER BY id ASC");
    while($c=$cmts->fetch_assoc()){
        echo '<div class="comment"><strong>'.htmlspecialchars($c['username']).'</strong>: '.htmlspecialchars($c['comment']).'</div>';
    }
    ?>
    </div>
</div>
<?php endwhile; ?>
</div>
<footer class="max-w-6xl mx-auto text-center text-slate-400 py-6">
© <?=date('Y')?> <a href="https://dreamcodes.de" target="_blank" class="text-blue-500 hover:underline">Dreamcodes</a>
</footer>
<script>
document.querySelectorAll('.like').forEach(btn=>{
    btn.addEventListener('click',()=>{
        let joke = btn.closest('.joke');
        let id = joke.getAttribute('data-id');
        fetch('',{method:'POST',headers:{'Content-Type':'application/x-www-form-urlencoded'},body:'action=like&id='+id})
        .then(res=>res.text())
        .then(like=>{joke.querySelector('.likes').textContent=like;});
    });
});
document.querySelectorAll('.add-comment').forEach(btn=>{
    btn.addEventListener('click',()=>{
        let joke = btn.closest('.joke');
        let id = joke.getAttribute('data-id');
        let user = joke.querySelector('.username').value;
        let comment = joke.querySelector('.comment-text').value;
        if(!user || !comment) return alert('Name und Kommentar eingeben');
        fetch('',{method:'POST',headers:{'Content-Type':'application/x-www-form-urlencoded'},body:'action=comment&id='+id+'&username='+encodeURIComponent(user)+'&comment='+encodeURIComponent(comment)})
        .then(res=>res.json())
        .then(c=>{
            let div = document.createElement('div');
            div.classList.add('comment');
            div.innerHTML='<strong>'+c.username+'</strong>: '+c.comment;
            joke.querySelector('.comments').appendChild(div);
            joke.querySelector('.username').value='';
            joke.querySelector('.comment-text').value='';
        });
    });
});
</script>
</body>
</html>
Vorheriges Tutorial
Nächstes Tutorial

Hier etwas für dich dabei?