WBCE CMS – Way Better Content Editing.
You are not logged in.
Moin zusammen!
Zuerstmal, sorry hab mich hier Jahre nicht mehr sehen lassen. Hatte private Gründe, waren keine einfachen Zeiten...
Ich betreue noch drei Webseiten, die Updates haben auch von teils älteren Versionen ohne Probleme geklappt, großes Lob dafür den Verantwortlichen.
Zu meiner eigentlichen Frage.
Meine Schwester macht Musik, hat ihr zweites Album draussen und möchte das zum Download anbieten. Vor längerem hatte ich da nach Bakery gefragt, glaub das geht aber nicht.
Sie will das jetzt über Downloadkärtchen machen, die sie auf Konzerten verkauft. Man kann dann ein ZIP File runterladen.
Ist es möglich, dafür irgendwie Downloads zu generieren, die über diese Codes angesteuert werden? Sie hat mir was geschickt wo ein Freund das macht, der hat aber da ein festes Passwort drauf.
Liebe Grüße, Daniel
Offline
Dafür gibt's leider kein Modul.
Du könntest versuchen, dir eines mit KI-Unterstützung zu generieren. Das klingt nach einer Aufgabe, die Gemini & Co gut umsetzen könnten.
Sorgen sind wie Nudeln: man macht sich meist zu viele.
Offline
import zipfile
info_php = """<?php
$module_directory = 'secure_download';
$module_name = 'Secure Download Pro';
$module_function = 'page';
$module_version = '2.1.0';
$module_platform = 'WBCE';
$module_author = 'Gemini AI';
$module_description = 'Generiert 50 Name/Passwort Paare mit Tracking und Excel-Export (PHP 8.1+)';
"""
install_php = """<?php
$database->query("DROP TABLE IF EXISTS `".TABLE_PREFIX."mod_secure_download` ");
$database->query("CREATE TABLE `".TABLE_PREFIX."mod_secure_download` (
`section_id` INT NOT NULL DEFAULT '0',
`page_id` INT NOT NULL DEFAULT '0',
`filename` VARCHAR(255) NOT NULL DEFAULT '',
`link_title` VARCHAR(255) NOT NULL DEFAULT 'Download starten',
PRIMARY KEY (`section_id`)
)");
$database->query("DROP TABLE IF EXISTS `".TABLE_PREFIX."mod_secure_download_codes` ");
$database->query("CREATE TABLE `".TABLE_PREFIX."mod_secure_download_codes` (
`id` INT NOT NULL AUTO_INCREMENT,
`section_id` INT NOT NULL DEFAULT '0',
`nr` INT NOT NULL DEFAULT '0',
`username` VARCHAR(50) NOT NULL DEFAULT '',
`password` VARCHAR(50) NOT NULL DEFAULT '',
`used` TINYINT(1) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`)
)");
"""
uninstall_php = """<?php
$database->query("DROP TABLE IF EXISTS `".TABLE_PREFIX."mod_secure_download` ");
$database->query("DROP TABLE IF EXISTS `".TABLE_PREFIX."mod_secure_download_codes` ");
"""
save_php = """<?php
require('../../config.php');
require_once(WB_PATH.'/framework/class.admin.php');
$admin = new admin('Pages', 'pages_modify');
if (!$admin->checkFTAN()) { $admin->print_error('FTAN Error'); }
$section_id = (int)$_POST['section_id'];
$page_id = (int)$_POST['page_id'];
$filename = $_POST['filename'];
$link_title = $_POST['link_title'];
$database->query("UPDATE ".TABLE_PREFIX."mod_secure_download SET filename='$filename', link_title='$link_title' WHERE section_id='$section_id'");
if (isset($_POST['generate_codes'])) {
$database->query("DELETE FROM ".TABLE_PREFIX."mod_secure_download_codes WHERE section_id='$section_id'");
for ($i = 1; $i <= 50; $i++) {
$user = "U".bin2hex(random_bytes(3));
$pass = bin2hex(random_bytes(4));
$database->query("INSERT INTO ".TABLE_PREFIX."mod_secure_download_codes (section_id, nr, username, password, used) VALUES ('$section_id', '$i', '$user', '$pass', 0)");
}
}
$admin->print_success('Gespeichert', ADMIN_URL.'/pages/modify.php?page_id='.$page_id);
$admin->print_footer();
"""
export_php = """<?php
require('../../config.php');
require_once(WB_PATH.'/framework/class.admin.php');
$admin = new admin('Pages', 'pages_modify', false);
if(!$admin->is_authenticated()) die('Access Denied');
$section_id = (int)$_GET['section_id'];
$sql = "SELECT nr, username, password, used FROM ".TABLE_PREFIX."mod_secure_download_codes WHERE section_id='$section_id' ORDER BY nr ASC";
$res = $database->query($sql);
header('Content-Type: text/csv; charset=utf-8');
header('Content-Disposition: attachment; filename=download_codes_section_'.$section_id.'.csv');
$output = fopen('php://output', 'w');
fputcsv($output, array('Nummer', 'Benutzername', 'Passwort', 'Status'), ';');
while($row = $res->fetchRow(MYSQLI_ASSOC)) {
$row['used'] = ($row['used'] == 1) ? 'Benutzt' : 'Offen';
fputcsv($output, $row, ';');
}
fclose($output);
exit();
"""
modify_php = """<?php
$sql = "SELECT * FROM ".TABLE_PREFIX."mod_secure_download WHERE section_id = '$section_id'";
$data = $database->query($sql)->fetchRow();
$dir = WB_PATH . MEDIA_DIRECTORY . '/files/';
$files = is_dir($dir) ? scandir($dir) : [];
echo '<h2>Secure Download Pro (V2.1)</h2>';
?>
<form action="<?php echo WB_URL; ?>/modules/secure_download/save.php" method="post">
<?php echo $admin->getFTAN(); ?>
<input type="hidden" name="section_id" value="<?php echo $section_id; ?>">
<input type="hidden" name="page_id" value="<?php echo $page_id; ?>">
<p>Datei: <select name="filename">
<?php foreach($files as $f) if($f != '.' && $f != '..') echo '<option '.($data['filename']==$f?'selected':'').'>'.$f.'</option>'; ?>
</select></p>
<p>Link-Text: <input type="text" name="link_title" value="<?php echo $data['link_title']; ?>"></p>
<p><input type="checkbox" name="generate_codes" id="gc"> <label for="gc" style="color:red;"><b>50 neue Codes generieren</b> (alte Daten werden gelöscht!)</label></p>
<input type="submit" value="Speichern & Generieren">
</form>
<hr>
<a href="<?php echo WB_URL; ?>/modules/secure_download/export.php?section_id=<?php echo $section_id; ?>" style="background:#28a745; color:#fff; padding:10px; text-decoration:none; border-radius:5px; display:inline-block; margin-bottom:15px;">Excel-Liste (.csv) herunterladen</a>
<table border="1" cellpadding="5" style="border-collapse:collapse; width:100%; font-family:sans-serif;">
<tr style="background:#eee;"><th>Nr</th><th>Name</th><th>Passwort</th><th>Status</th></tr>
<?php
$codes = $database->query("SELECT * FROM ".TABLE_PREFIX."mod_secure_download_codes WHERE section_id='$section_id' ORDER BY nr ASC");
while($c = $codes->fetchRow()) {
$st = ($c['used'] == 1) ? '<b style="color:green;">Benutzt</b>' : '<span style="color:#999;">Offen</span>';
echo "<tr><td>{$c['nr']}</td><td><code>{$c['username']}</code></td><td><code>{$c['password']}</code></td><td>$st</td></tr>";
}
?>
</table>
"""
view_php = """<?php
$sql = "SELECT * FROM ".TABLE_PREFIX."mod_secure_download WHERE section_id = '$section_id'";
$data = $database->query($sql)->fetchRow();
if(!$data) return;
if (isset($_POST['sd_user'])) {
$u = $_POST['sd_user']; $p = $_POST['sd_pass'];
$check = $database->query("SELECT * FROM ".TABLE_PREFIX."mod_secure_download_codes WHERE section_id='$section_id' AND username='$u' AND password='$p'");
if ($check->numRows() > 0) {
$database->query("UPDATE ".TABLE_PREFIX."mod_secure_download_codes SET used=1 WHERE section_id='$section_id' AND username='$u' AND password='$p'");
$file = WB_PATH.MEDIA_DIRECTORY.'/files/'.$data['filename'];
if(file_exists($file)) {
if (ob_get_level()) ob_end_clean();
header("Content-type: ".mime_content_type($file));
header('Content-Disposition: attachment; filename="'.basename($file).'"');
readfile($file); exit();
}
} else { echo "<p style='color:red;'>Code ungültig!</p>"; }
}
?>
<div style="margin:20px 0;">
<a href="#" onclick="document.getElementById('f<?php echo $section_id; ?>').style.display='block'; return false;" style="background:#007bff; color:#fff; padding:10px 20px; text-decoration:none; border-radius:5px;"><?php echo $data['link_title']; ?></a>
<div id="f<?php echo $section_id; ?>" style="display:none; border:1px solid #ddd; padding:20px; margin-top:10px; max-width:300px;">
<form method="POST">
<input type="text" name="sd_user" placeholder="Benutzername" style="width:100%; padding:8px; margin-bottom:10px;" required>
<input type="password" name="sd_pass" placeholder="Passwort" style="width:100%; padding:8px; margin-bottom:10px;" required>
<button type="submit" style="width:100%; padding:10px; background:#333; color:#fff; border:none; cursor:pointer;">Anmelden & Download</button>
</form>
</div>
</div>
"""
# Create the final ZIP
zip_file = 'secure_download_v2_1.zip'
with zipfile.ZipFile(zip_file, 'w') as z:
z.writestr('secure_download/info.php', info_php)
z.writestr('secure_download/install.php', install_php)
z.writestr('secure_download/uninstall.php', uninstall_php)
z.writestr('secure_download/add.php', add_php)
z.writestr('secure_download/save.php', save_php)
z.writestr('secure_download/modify.php', modify_php)
z.writestr('secure_download/view.php', view_php)
z.writestr('secure_download/export.php', export_php)
print(f"Datei {zip_file} erfolgreich erstellt.")Moin. Hab das mal eingegeben und Gemini hat gecoded. Es gibt mir leider keine installierbare ZIP Datei. Wie kann ich aus dem Code eine machen?
Offline
Wenn man Gemini darum bittet, macht es das eigentlich. Ansonsten brauchst du einfach nur die oben aufgeführten Codeschnipsel ohne die drei Anführungszeichen davor und dahinter jeweils in eine neue Datei zu kopieren und diese dann unter dem angegebenen Namen zu speichern (info.php usw). add.php fehlt noch.
Sorgen sind wie Nudeln: man macht sich meist zu viele.
Offline
Wird bei ChatGPT im Chatfenster glaube ich schwierig. Da dort immer nur ein Teil der Dateien behalten wird. So war es jedenfalls bei meinen ersten Erfahrungen mit Vibe Coding.
Sage ChatGPT das dieser dir alle benötigten Dateien für ein installierbares Modul zur Verfügung stellen soll und packe diese in ein ZIP
Ein Tipp aus meiner Praxis: Sage das dabei die bestehenden Konventionen von WBCE und auch die best practices eingehalten werden sollen. Und das vorab dazu eine Webrecherche durchgeführt werden soll. Das kann dir das eine oder andere Problem ersparen.
Falls du etwas tiefer ins VibeCoding einsteigen willst, dann empfehle ich dir dich mal mit Codex (Open AI), Claude code (Anthropic) oder Opencode auseinander zu setzen. Das ist fast wie Claude Code nur das man viel mehr Modelle (vor allem auch zusätzlich die Chinesischen. Sind sehr viel günstiger in der Nutzung) zur Auswahl hat. Hat aber bei der Abrechnung imho ein paar Nachteile. (API Nutzung anstelle eines Paid Plan -> kann schnell teuer werden)
Vielleicht auch mit Antigravity von Google. Funktioniert glaub sogar mit dem FreePlan.
Online
Ah ok. Dann guck ich mal, dass ich den Code dann auf die Dateien verteile. Dann allles einfach Zippen reicht?
Ausgangsbasis war übrigens der Code von Dev4me:
Dynamik Download
Last edited by screamindan (09.03.2026 12:00:33)
Offline
So. Hab das mal gepackt und getestet. Scheint alles zu machen wie es soll. Das Verzeichnis muss ich noch schützen, kann aber eine .htaccess ja nicht über den Medienordner hochladen. Das mach ich dann später.
Habs mal angehängt, falls jemand Lust hat das auch zu testen.
Im Medienordner muss es einen Ordner "files" geben, der dann noch durch eine .htaccess mit "Deny from all" geschützt wird (sagt Gemini).
Offline
byteworker
Hei das funktioniert! Prima gemacht...
was mir noch fehlen täte, wenn nach erfolgtem Download irgendwas passiert im Frontend.
Eine Meldung wie "Download erfolgreich" oder sowas wie "der Download-Code wurde erfolgreich verwendet" -
Offline
Das stimmt, gute Idee.
Ich lass im Backend auch noch die Downloads pro Code hochzählen und eine Möglichkeit zum manuellen Löschen der einzelnen Codes einbauen. Automatik bringt glaub nix, wenn einer was wegen Internet aufm Lande zB mehrfach versucht. Aber so sieht man, wenn es überhand nimmt.
Offline
byteworker
Kannst Du dabei eventuell die Styleanweisungen in eine externe frontend.css auslagern? nicht Inline Styles verwenden. Wäre hilfreich um das optisch anzupassen.
Offline
Gemini sagt gute Idee. Dann direkt frontend und backend.
Offline
Wie wird normalerweise ein dateiupload in ein modul gebaut? Ist da bei wbce was generelles vorgesehen was man benutzen kann, oder ist da alles erlaubt?
Offline
Na, das geht ja wie's Katzenmachen hier...
Der Upload sollte natürlich keine scheunentorgroßen Sicherheitslücken aufreißen. Im konkreten Fall müsste er zudem mit großen Dateien zurechtkommen, also kein einfacher <input type="file">.
Habe mir das Modul noch nicht angeschaut, je nachdem, wie es funktioniert, entweder manueller Upload via elFinder oder etwas eigenes. Es gibt da keine Vorgaben, jedes Modul handhabt das leider anders (siehe Foldergallery, NWI, wbProfiles...)
Sorgen sind wie Nudeln: man macht sich meist zu viele.
Offline
Ich hab jetzt eine (sehr viel) geänderte Version. Die krieg ich installiert und deinstalliert, es erscheint aber wenn ich eine Seite anlege eine graue Seite im Backend uns "{section_module} ". Ich versuch das Gemini weiter dran arbeiten zu lassen, aber irgendwas ist da falsch... Es erscheinen auch keine Spalten in der Datenbank. 
Grad nochmal geguckt. mit der "v321" gehts...
Last edited by screamindan (09.03.2026 20:02:50)
Offline
Bei deiner secure_download.zip ist wohl die Dateistruktur falsch. Die Daten stehen nicht im Wurzelverzeichnis ´sondern in einem Unterverzeichnis. Eigentlich dachte ich das WBCE das trotzdem entpackt, aber da muß wahrscheinlich florian nochmal genauer schauen.
Ich habe das mal von Claude fixen lassen und auch gleich so zu ändern das ein Updaate über die bestehende 3.2.1 möglich ist
Datei im Anhang.
Außerdem habe ich Claude mal gebeten das Modul auf bekannte Sicherheitslücken und WBCE Standards zu prüfen.
Hier das Ergebnis:
Analyse: secure_download WBCE-Modul
Was das Modul tut
Page-Modul für geschützte Downloads: Frontend zeigt Login-Formular (User/Passwort), nach Validierung wird eine Datei
direkt ausgeliefert. Admin kann Dateien verwalten, Zugangscodes generieren (50er-Blöcke), Codes sperren und per CSV
exportieren.---
Kritische Sicherheitslücken1. SQL-Injection im Frontend (KRITISCH) — view.php:15
// $u und $p sind ungefilterte POST-Daten!
"SELECT * FROM ... WHERE section_id='$section_id' AND username='$u' AND password='$p'"
Eingabe ' OR '1'='1 als Username umgeht die Authentifizierung vollständig. Jeder Besucher kann alle Codes auslesen
oder den Download freischalten.2. Datei-Upload ohne Extension-Whitelist (KRITISCH) — save.php:22
$clean_name = preg_replace("/[^a-zA-Z0-9._-]/", "_", $_FILES['new_file']['name']);
// Kein Typ-Check! .php-Dateien werden akzeptiert!
Ein Admin kann eine PHP-Shell als Upload-Datei hochladen. Falls der Webserver PHP im media/files/-Ordner ausführt →
Remote Code Execution.3. Klartextpasswörter (KRITISCH) — install.php, save.php, export.php
Passwörter werden ungehasht in der Datenbank gespeichert und im CSV-Export im Klartext ausgegeben. Bei einem DB-Leak
sind alle Zugangsdaten sofort kompromittiert.4. Path Traversal beim Dateinamen (MITTEL) — view.php:24
$file = WB_PATH.MEDIA_DIRECTORY.'/files/'.$data['filename'];
// filename kommt aus DB, dort via $_POST['filename'] gesetzt — kein realpath()-Check
Manipulierter POST-Wert ../../config.php würde die WBCE-Konfiguration zum Download anbieten.5. Code-Löschen via GET ohne CSRF (MITTEL) — modify.php:56 / save.php:11
// Link im Admin ohne FTAN-Token:
href="...save.php?section_id=$section_id&page_id=$page_id&delete_code_id=..."
Der FTAN-Check in save.php prüft $_POST — bei einem reinen GET-Request greift er nicht korrekt. DELETE-Aktionen
gehören nicht in GET-Requests.6. export.php — unzureichende Autorisierung — export.php:5
if(!$admin->is_authenticated()) die('Unauthorized');
// Kein isAdmin()-Check! Jeder eingeloggte User kann alle Codes exportieren.---
Fehlende WBCE-Standards┌───────────────────────────────────┬──────────────────────────────────────────┬──────────────────────────────────┐
│ Problem │ Datei │ Soll │
├───────────────────────────────────┼──────────────────────────────────────────┼──────────────────────────────────┤
│ Direktzugriff-Guard fehlt │ info.php, install.php, uninstall.php, │ defined('WB_PATH') or die(...) │
│ │ add.php, modify.php, view.php │ │
├───────────────────────────────────┼──────────────────────────────────────────┼──────────────────────────────────┤
│ $module_platform = 'WBCE' │ info.php:6 │ Versionsnummer, z.B. '1.6.5' │
├───────────────────────────────────┼──────────────────────────────────────────┼──────────────────────────────────┤
│ $module_license fehlt │ info.php │ Pflichtfeld │
├───────────────────────────────────┼──────────────────────────────────────────┼──────────────────────────────────┤
│ print_success() + print_footer() │ save.php:62-63 │ Entweder autoFooter=true oder │
│ hintereinander │ │ danach exit │
├───────────────────────────────────┼──────────────────────────────────────────┼──────────────────────────────────┤
│ SQL-Injection in add.php:3 │ add.php │ Kein expliziter Cast von │
│ │ │ $section_id/$page_id │
└───────────────────────────────────┴──────────────────────────────────────────┴──────────────────────────────────┘---
Was funktioniert korrekt- FTAN-Schutz in save.php für POST-Requests vorhanden
- Integer-Cast für IDs in save.php ((int)$_POST['section_id'])
- escapeString() für Text-Felder in save.php
- Code-Generierung mit random_bytes() (kryptografisch sicher)
- auto_header=false in export.php (korrektes Muster für Binary-Output)---
FazitDas Modul hat drei kritische Schwachstellen, die es produktiv nicht einsatzfähig machen: SQL-Injection im Login,
unkontrollierter Datei-Upload und Klartext-Passwörter. Außerdem fehlen an fast allen PHP-Dateien die
WBCE-Pflicht-Guards. Das Modul wurde offensichtlich mit KI generiert ($module_author = 'Gemini AI') und nicht
sicherheitsgeprüft.
Online
Oha. Das hört sich aufwändig zu reparieren an.
Offline
Claude meinte:
Gesamtbild
┌─────────────────────────────────┬──────────────┐
│ Kategorie │ Aufwand │
├─────────────────────────────────┼──────────────┤
│ Alle kritischen/mittleren Fixes │ ~2 Stunden │
├─────────────────────────────────┼──────────────┤
│ Passwort-Hashing dazu │ +2–3 Stunden │
├─────────────────────────────────┼──────────────┤
│ Gesamt komplett │ ~4–5 Stunden │
└─────────────────────────────────┴──────────────┘---
Der Löwenanteil steckt im Passwort-Thema — nicht wegen der Implementierung, sondern wegen der konzeptionellen Frage:
Die Codes sind zufällig generiert und werden per CSV an Empfänger verteilt. Das heißt, Klartext-Export ist funktional
gewollt. Man müsste entscheiden ob man Klartext bei Generierung speichert + sofort exportiert und dann nur den Hash in
der DB behält, oder ob man das Konzept anders aufzieht.Alle anderen Fixes sind handwerklich straightforward — soll ich anfangen?
Wobei, wenn du es die KI Machen lässt, sind es wahrscheinlich eher Minuten als Stunden 
Evtl wäre es HIlfreich wenn die Passwörter und User nicht Passwort und User heißen würden sondern vielleicht "code" und "token" Dann sieht die KI es wahrscheinlich als wengier problematisch an ob diese so gespeichert werden.
Allerdings, wenn ich mal einen Download anlege und mir keinen Haken bei +50 codes setze, dann taucht das was ich angelegt habe nirgendwo auf. WEnn ich dann das Frontend aufrufe, bekomme ich folgende Fehlermeldungen im Errorlog:
2026-03-09T20:47:33+00:00 [Visitor Request] http://localhost/WBCE/wbce/admin/pages/modify.php?page_id=7
2026-03-09T20:47:33+00:00 [Warning] \modules\secure_download\modify.php:[14] from \admin\pages\modify.php:[167] "Trying to access array offset on null"
2026-03-09T20:47:33+00:00 [Warning] \modules\secure_download\modify.php:[20] from \admin\pages\modify.php:[167] "Trying to access array offset on null"
2026-03-09T20:47:33+00:00 [Warning] \modules\secure_download\modify.php:[49] from \admin\pages\modify.php:[167] "Trying to access array offset on null"
2026-03-09T20:47:33+00:00 [Warning] \modules\secure_download\modify.php:[49] from \admin\pages\modify.php:[167] "Trying to access array offset on null"
2026-03-09T20:47:33+00:00 [Warning] \modules\secure_download\modify.php:[49] from \admin\pages\modify.php:[167] "Trying to access array offset on null"
2026-03-09T20:47:33+00:00 [Warning] \modules\secure_download\modify.php:[49] from \admin\pages\modify.php:[167] "Trying to access array offset on null"
2026-03-09T20:47:33+00:00 [Warning] \modules\secure_download\modify.php:[49] from \admin\pages\modify.php:[167] "Trying to access array offset on null"
2026-03-09T20:47:33+00:00 [Warning] \modules\secure_download\modify.php:[49] from \admin\pages\modify.php:[167] "Trying to access array offset on null"
2026-03-09T20:47:33+00:00 [Warning] \modules\secure_download\modify.php:[49] from \admin\pages\modify.php:[167] "Trying to access array offset on null"
2026-03-09T20:47:33+00:00 [Warning] \modules\secure_download\modify.php:[49] from \admin\pages\modify.php:[167] "Trying to access array offset on null"
2026-03-09T20:47:33+00:00 [Warning] \modules\secure_download\modify.php:[49] from \admin\pages\modify.php:[167] "Trying to access array offset on null"
2026-03-09T20:47:33+00:00 [Warning] \modules\secure_download\modify.php:[49] from \admin\pages\modify.php:[167] "Trying to access array offset on null"
2026-03-09T20:47:33+00:00 [Warning] \modules\secure_download\modify.php:[49] from \admin\pages\modify.php:[167] "Trying to access array offset on null"
2026-03-09T20:47:33+00:00 [Warning] \modules\secure_download\modify.php:[49] from \admin\pages\modify.php:[167] "Trying to access array offset on null"
2026-03-09T20:47:33+00:00 [Warning] \modules\secure_download\modify.php:[49] from \admin\pages\modify.php:[167] "Trying to access array offset on null"
2026-03-09T20:47:33+00:00 [Warning] \modules\secure_download\modify.php:[49] from \admin\pages\modify.php:[167] "Trying to access array offset on null"
2026-03-09T20:47:33+00:00 [Warning] \modules\secure_download\modify.php:[49] from \admin\pages\modify.php:[167] "Trying to access array offset on null"
2026-03-09T20:47:33+00:00 [Warning] \modules\secure_download\modify.php:[49] from \admin\pages\modify.php:[167] "Trying to access array offset on null"
2026-03-09T20:47:33+00:00 [Warning] \modules\secure_download\modify.php:[49] from \admin\pages\modify.php:[167] "Trying to access array offset on null"
2026-03-09T20:47:33+00:00 [Warning] \modules\secure_download\modify.php:[49] from \admin\pages\modify.php:[167] "Trying to access array offset on null"
2026-03-09T20:47:33+00:00 [Warning] \modules\secure_download\modify.php:[49] from \admin\pages\modify.php:[167] "Trying to access array offset on null"
2026-03-09T20:47:33+00:00 [Warning] \modules\secure_download\modify.php:[49] from \admin\pages\modify.php:[167] "Trying to access array offset on null"
2026-03-09T20:47:33+00:00 [Warning] \modules\secure_download\modify.php:[49] from \admin\pages\modify.php:[167] "Trying to access array offset on null"
2026-03-09T20:47:33+00:00 [Warning] \modules\secure_download\modify.php:[49] from \admin\pages\modify.php:[167] "Trying to access array offset on null"
2026-03-09T20:47:33+00:00 [Warning] \modules\secure_download\modify.php:[49] from \admin\pages\modify.php:[167] "Trying to access array offset on null"
2026-03-09T20:47:33+00:00 [Warning] \modules\secure_download\modify.php:[49] from \admin\pages\modify.php:[167] "Trying to access array offset on null"
2026-03-09T20:47:33+00:00 [Warning] \modules\secure_download\modify.php:[49] from \admin\pages\modify.php:[167] "Trying to access array offset on null"
2026-03-09T20:47:33+00:00 [Warning] \modules\secure_download\modify.php:[49] from \admin\pages\modify.php:[167] "Trying to access array offset on null"
2026-03-09T20:47:33+00:00 [Warning] \modules\secure_download\modify.php:[49] from \admin\pages\modify.php:[167] "Trying to access array offset on null"
2026-03-09T20:47:33+00:00 [Warning] \modules\secure_download\modify.php:[49] from \admin\pages\modify.php:[167] "Trying to access array offset on null"
2026-03-09T20:47:33+00:00 [Warning] \modules\secure_download\modify.php:[49] from \admin\pages\modify.php:[167] "Trying to access array offset on null"
2026-03-09T20:47:33+00:00 [Warning] \modules\secure_download\modify.php:[49] from \admin\pages\modify.php:[167] "Trying to access array offset on null"
2026-03-09T20:47:33+00:00 [Warning] \modules\secure_download\modify.php:[49] from \admin\pages\modify.php:[167] "Trying to access array offset on null"
2026-03-09T20:47:33+00:00 [Warning] \modules\secure_download\modify.php:[49] from \admin\pages\modify.php:[167] "Trying to access array offset on null"
2026-03-09T20:47:33+00:00 [Warning] \modules\secure_download\modify.php:[49] from \admin\pages\modify.php:[167] "Trying to access array offset on null"
2026-03-09T20:47:33+00:00 [Warning] \modules\secure_download\modify.php:[49] from \admin\pages\modify.php:[167] "Trying to access array offset on null"
2026-03-09T20:47:33+00:00 [Warning] \modules\secure_download\modify.php:[49] from \admin\pages\modify.php:[167] "Trying to access array offset on null"
2026-03-09T20:47:33+00:00 [Warning] \modules\secure_download\modify.php:[49] from \admin\pages\modify.php:[167] "Trying to access array offset on null"
2026-03-09T20:47:33+00:00 [Warning] \modules\secure_download\modify.php:[49] from \admin\pages\modify.php:[167] "Trying to access array offset on null"
2026-03-09T20:47:33+00:00 [Warning] \modules\secure_download\modify.php:[49] from \admin\pages\modify.php:[167] "Trying to access array offset on null"
2026-03-09T20:47:33+00:00 [Warning] \modules\secure_download\modify.php:[49] from \admin\pages\modify.php:[167] "Trying to access array offset on null"
2026-03-09T20:47:33+00:00 [Warning] \modules\secure_download\modify.php:[49] from \admin\pages\modify.php:[167] "Trying to access array offset on null"
2026-03-09T20:47:33+00:00 [Warning] \modules\secure_download\modify.php:[49] from \admin\pages\modify.php:[167] "Trying to access array offset on null"
2026-03-09T20:47:33+00:00 [Warning] \modules\secure_download\modify.php:[49] from \admin\pages\modify.php:[167] "Trying to access array offset on null"
2026-03-09T20:47:33+00:00 [Warning] \modules\secure_download\modify.php:[49] from \admin\pages\modify.php:[167] "Trying to access array offset on null"
2026-03-09T20:47:33+00:00 [Warning] \modules\secure_download\modify.php:[49] from \admin\pages\modify.php:[167] "Trying to access array offset on null"
2026-03-09T20:47:33+00:00 [Warning] \modules\secure_download\modify.php:[49] from \admin\pages\modify.php:[167] "Trying to access array offset on null"
2026-03-09T20:47:33+00:00 [Warning] \modules\secure_download\modify.php:[49] from \admin\pages\modify.php:[167] "Trying to access array offset on null"
2026-03-09T20:47:33+00:00 [Warning] \modules\secure_download\modify.php:[49] from \admin\pages\modify.php:[167] "Trying to access array offset on null"
2026-03-09T20:47:33+00:00 [Warning] \modules\secure_download\modify.php:[49] from \admin\pages\modify.php:[167] "Trying to access array offset on null"
2026-03-09T20:47:33+00:00 [Warning] \modules\secure_download\modify.php:[49] from \admin\pages\modify.php:[167] "Trying to access array offset on null"
2026-03-09T20:47:33+00:00 [Warning] \modules\secure_download\modify.php:[49] from \admin\pages\modify.php:[167] "Trying to access array offset on null"
Last edited by beach (09.03.2026 22:58:39)
Online
Gemini und ich haben nochmal gearbeitet.Funktioniert das meiste. Modify.php kanner nich gut. In der Spalte Aktion gibt es Sicherheitsverletzungen und neben den Buttons steht Code. CSV Export funktioniert, neben dem Button steht Code. Unter dem Feld Titel war noch ein Feld Beschreibung, hatter wegrationalisiert. Abgesichert is jetzt alles behauptet Gemini...
Morgen is auch noch ein Tag.
Offline
Gib Gemini die Anweisungen das Alle Dateien mit Logik kein CSS Design haben sollen
Hoster: ALL-INKL *** Grundsätzliche WBCE Konfig ***
WBCE: 1.6.5 • BE: 2.1.0 • PHP: 8.x * Alle • BE: Argos
Status Projekt 1-4: OK
Online
Versuch ich mal...
Kurz zur Erklärung was das alles machen soll.
Oben gibt man die Anzahl maximal möglicher Downloads mit dem selben Code an. Bei Erreichen wird der Code automatisch gesperrt. Falls jemand dann nur Probleme beim Download hatte kann man den Code manuell entsperren. Erfüllte Codes können auch einzeln gelöscht werden.
Der Upload funktioniert. Ich hab das Gefühl beim Nachbessern macht Gemini das oft noch schlimmer und vergisst auch, was vorher festgelegt wurde. Vielleicht muss ich mir mal genau sortiert aufschreiben was es alles machen soll und dann am Block "bestellen".
Reparieren müsste es die Sperren / Löschen Knöpfe. Titel und eine Beschreibung war auch schon übers Backend einstellbar, muss ich ma gucken wie das in ner früheren Version eingebaut wurde. Auch die Erfolgsmeldung war im Backend hinterlegt, die findet man aber zur Not ja auch in den Dateien...
Der CSV Export war so gewünscht. Kann man im Backend Codes manuell abschreiben oder (wie eigentlich vorgesehen) exportieren und auf Aufkleber drucken. Is dann auch ne gute Kontrollliste...
Last edited by screamindan (10.03.2026 08:02:50)
Offline
Auf meinem Testsystem XAMPP unter Win11 gibt es viele, viele Fehlermeldungen im Errorlog und in der Übersicht im Backend. Immer noch keine Anzeige im Frontend.
Online
Hast Du einen Download im Ordner media?
Offline
Ich bin leider nur, wie Florian es glaube ich nennt, Nutzy. Ich hab keine Ahnung was Gemini da macht. Ich kopier die Dateien auf dem Handy, schick mir die als Mail und mach die dann mit Notepad++ fertig. Fehler rausmachen geht dann nur über nochmaliges neu Besprechen mit Gemini...
Grade hat es nochmal was Neues gebaut, werd ich später mal fertig machen und auf ner Testinstanz installieren. Vielleicht klappt es ja diesmal.
Ich fand den Vorschlag von Florian interessant, das mit einer KI zu probieren. Hat mich gestern den ganzen Abend gekostet, obwohl ich eigentlich noch Sachen für ein Konzert am WE zu Üben habe 
Last edited by screamindan (10.03.2026 09:11:26)
Offline
florian
Man braucht Gelduld und Hartnäckigkeit. Das habe ich gemerkt, als ich mit Gemini-Hilfe einen Widerrufsbuttonmodul für Bakery erstellt habe. Da war ich auch mal kurz davor, den Kram hinzuwerfen, weil Gemini gerne mit dem Hintern einreißt, was es vorher mühsam mit den Händen erschaffen hat. Auch Dialoge sehen bei jeder Iteration anders (und nicht unbedingt besser) aus, das Ding hat echt kein Langzeitgedächtnis.
Zur Inspiration hier mal der Link zu meinem "Kampf" mit der KI. https://gemini.google.com/share/7cabc0d72b2f
Sorgen sind wie Nudeln: man macht sich meist zu viele.
Offline
screamindan, beach
Gemini ist, meiner Bescheidenen Meinung nach, auch nicht das beste Modell für Vibe Coding.
Ich nutze es nur für Design/Kreative Sachen.
Für Code ist, von den großen bekannten, Claude mein Favorit. Aber auch damit braucht es ein wenig Erfahrung.
@screamindian: Wenn das für dich OK ist, dann setze ich mal Claude Code darauf an das er das wenigstens mal entfehlert und etwas aufräumt. Dann hast du vielleicht eine einfachere Grundlage an der du weiter arbeiten kannst.
Auch solltest du deinen Workflow überdenken. mit dem vielen Hin und herschicken tust du dir keinen Gefallen.
Trotzdem. Laß dich nicht entmutigen. Gemeinsam bekommen wir das hin und du wirst sehen das es Spaß macht wenn man die eigenen Ideen plötzlich verhältnismäßig einfach umsetzen kann.
@florian: Deine Gemini Story... FullACK but mmD
Last edited by beach (10.03.2026 10:00:27)
Online
florian, screamindan, awuest