Diese Woche am beliebtesten

Vertiefendes Material

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>
Dreamcodes Redaktion
Dreamcodes Redaktion
Jeder Inhalt auf Dreamcodes entsteht mit einem klaren Anspruch: geprüfte Praxis statt schneller Theorie. Was hier veröffentlicht wird, basiert auf Best Practices, echten Projekterfahrungen und technischem Verständnis, das über das Offensichtliche hinausgeht. Unser Ziel ist ein Fundament, auf dem du aufbauen kannst, nicht eines, das beim ersten produktiven Einsatz bricht. Wie du die Inhalte integrierst, absicherst und in deinen Kontext überträgst, liegt bei dir. Die fachliche Grundlage liefern wir, die Verantwortung für den Einsatz bleibt deine.
Vorheriges Tutorial
Nächstes Tutorial

Vielleicht einen Blick WERT?