dreh-mich

prefix . self::TABLE_SUFFIX;
$charset_collate = $wpdb->get_charset_collate();

$sql = "CREATE TABLE IF NOT EXISTS $table_name (
id BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
zeitpunkt DATETIME NOT NULL,
ip_hash VARCHAR(64) NOT NULL,
gewonnen TINYINT(1) NOT NULL DEFAULT 0,
code VARCHAR(50) DEFAULT NULL,
PRIMARY KEY (id)
) $charset_collate;";

require_once ABSPATH . 'wp-admin/includes/upgrade.php';
dbDelta($sql);
}

/**
* Erzeugt einen zufälligen, gut lesbaren Gewinncode.
*/
private function code_erzeugen() {
$zeichen = 'ABCDEFGHJKLMNPQRSTUVWXYZ23456789'; // ohne verwechselbare Zeichen (O/0, I/1)
$code = 'FLAMES-';
for ($i = 0; $i < 6; $i++) { $code .= $zeichen[random_int(0, strlen($zeichen) - 1)]; } return $code; } /** * Loggt eine Teilnahme in der Datenbank. */ private function teilnahme_loggen($gewonnen, $code = null) { global $wpdb; $table_name = $wpdb->prefix . self::TABLE_SUFFIX;

$ip = $_SERVER['REMOTE_ADDR'] ?? 'unbekannt';
$ip_hash = hash('sha256', $ip . wp_salt());

$wpdb->insert($table_name, [
'zeitpunkt' => current_time('mysql'),
'ip_hash' => $ip_hash,
'gewonnen' => $gewonnen ? 1 : 0,
'code' => $code,
]);
}

/**
* Der eigentliche Shortcode-Output. Einfach z.B. auf einer eigenen Seite
* per [gewinncode_qr] einfügen und diese Seite in den QR-Code verlinken.
*/
public function shortcode_ausgabe($atts) {

// Falls dieser Besucher (Cookie) schon ein Ergebnis hat, dieses erneut anzeigen
if (isset($_COOKIE[self::COOKIE_NAME])) {
$gespeichert = json_decode(stripslashes($_COOKIE[self::COOKIE_NAME]), true);
if (is_array($gespeichert) && isset($gespeichert['gewonnen'])) {
return $this->ergebnis_html($gespeichert['gewonnen'], $gespeichert['code'] ?? null, true);
}
}

// Neues Los ziehen: 1 von 50 gewinnt
$gewonnen = (random_int(1, self::CHANCE_NENNER) === 1);
$code = $gewonnen ? $this->code_erzeugen() : null;

// Ergebnis protokollieren
$this->teilnahme_loggen($gewonnen, $code);

// Ergebnis im Cookie speichern, damit Neuladen kein neues Los erzeugt
$cookie_wert = wp_json_encode(['gewonnen' => $gewonnen, 'code' => $code]);
setcookie(self::COOKIE_NAME, $cookie_wert, time() + self::COOKIE_DAUER, '/');

return $this->ergebnis_html($gewonnen, $code, false);
}

/**
* Baut das sichtbare HTML für Gewinn/Niete.
*/
private function ergebnis_html($gewonnen, $code, $bereits_gespielt) {
ob_start();
?>

Du hast bereits teilgenommen – hier dein Ergebnis:

🎉 Herzlichen Glückwunsch!

Du hast gewonnen! Dein Gewinncode:


Bitte Screenshot machen und am Infostand vorzeigen.

Leider kein Gewinn 😔

Diesmal war es nicht der große Treffer – aber danke fürs Mitmachen!

prefix . self::TABLE_SUFFIX;

$gesamt = $wpdb->get_var("SELECT COUNT(*) FROM $table_name");
$gewinne = $wpdb->get_var("SELECT COUNT(*) FROM $table_name WHERE gewonnen = 1");

echo '

Gewinncode Aktion – Übersicht

';
echo '

Gesamt-Teilnahmen: ' . intval($gesamt) . '

';
echo '

Davon Gewinne: ' . intval($gewinne) . '

';

$eintraege = $wpdb->get_results("SELECT * FROM $table_name ORDER BY id DESC LIMIT 100");
echo '

';
foreach ($eintraege as $eintrag) {
echo '

';
echo '

';
echo '

';
echo '

';
echo '

';
}
echo '

Zeitpunkt Gewonnen Code
' . esc_html($eintrag->zeitpunkt) . ' ' . ($eintrag->gewonnen ? 'Ja' : 'Nein') . ' ' . esc_html($eintrag->code ?? '-') . '

';
}
}

new QR_Gewinncode_Plugin();