prüfen was passiert, wenn mehrere dateien mit dem gleichen dateinamen hochgeladen werden

This commit is contained in:
Troy grunt
2026-02-13 23:12:15 +01:00
parent 74509fbc77
commit 42541f5603

View File

@@ -351,8 +351,10 @@ if ($action === 'identity_edit') {
if ($safeName === '') { if ($safeName === '') {
$safeName = 'file'; $safeName = 'file';
} }
$storedName = bin2hex(random_bytes(12)) . '_' . $safeName; do {
$destination = $uploadDir . $storedName; $storedName = bin2hex(random_bytes(12)) . '_' . $safeName;
$destination = $uploadDir . $storedName;
} while (is_file($destination));
if (!move_uploaded_file($tmpName, $destination)) { if (!move_uploaded_file($tmpName, $destination)) {
$fileUploadErrors[] = sprintf('Speichern von %s fehlgeschlagen.', $originalName); $fileUploadErrors[] = sprintf('Speichern von %s fehlgeschlagen.', $originalName);
@@ -482,6 +484,18 @@ if ($action === 'identity_edit') {
if ($identityFiles === false) { if ($identityFiles === false) {
$identityFiles = []; $identityFiles = [];
} }
$duplicateFilenameCounts = [];
foreach ($identityFiles as $file) {
$filename = $file['filename'] ?? '';
if ($filename === '') {
continue;
}
$duplicateFilenameCounts[$filename] = ($duplicateFilenameCounts[$filename] ?? 0) + 1;
}
$duplicateFileNames = array_keys(array_filter(
$duplicateFilenameCounts,
static fn (int $count): bool => $count > 1
));
?> ?>
<!doctype html> <!doctype html>
<html> <html>
@@ -586,10 +600,18 @@ if ($action === 'identity_edit') {
<?php if ($fileDeleteMessage !== ''): ?> <?php if ($fileDeleteMessage !== ''): ?>
<p style="color:#22c55e; margin-top:.25rem;"><?= htmlspecialchars($fileDeleteMessage) ?></p> <p style="color:#22c55e; margin-top:.25rem;"><?= htmlspecialchars($fileDeleteMessage) ?></p>
<?php endif; ?> <?php endif; ?>
<?php if (!empty($duplicateFileNames)): ?>
<p style="color:#fbbf24; margin-top:.25rem;">
Dateien mit identischem Dateinamen bleiben getrennt und können einzeln gelöscht.
</p>
<?php endif; ?>
<ul> <ul>
<?php foreach ($identityFiles as $file): ?> <?php foreach ($identityFiles as $file): ?>
<li> <li>
<?= htmlspecialchars($file['filename']) ?> (ID <?= (int)$file['id'] ?>) <?= htmlspecialchars($file['filename']) ?> (ID <?= (int)$file['id'] ?>)
<?php if (!empty($duplicateFileNames) && in_array($file['filename'], $duplicateFileNames, true)): ?>
<span style="color:#fbbf24; margin-left:.5rem; font-size:.85rem;">mehrfach vorhanden</span>
<?php endif; ?>
<form method="post" style="display:inline; margin-left:.75rem;"> <form method="post" style="display:inline; margin-left:.75rem;">
<input type="hidden" name="file_id" value="<?= (int)$file['id'] ?>"> <input type="hidden" name="file_id" value="<?= (int)$file['id'] ?>">
<button name="delete_file" type="submit" <button name="delete_file" type="submit"
@@ -879,8 +901,6 @@ $identities = $sql->get("SELECT * FROM identities ORDER BY id DESC");
//TODO im bereich UUID bearbeiten sollen files mit dem dateinamen und einem link (target=_blank) dargestellt werden und nicht mit der id //TODO im bereich UUID bearbeiten sollen files mit dem dateinamen und einem link (target=_blank) dargestellt werden und nicht mit der id
//TODO prüfen was passiert, wenn mehrere dateien mit dem gleichen dateinamen hochgeladen werden
//TODO option schaffen eine bestehende datei zu überschreiben ??? bzw prüfen ob das notwendig ist //TODO option schaffen eine bestehende datei zu überschreiben ??? bzw prüfen ob das notwendig ist
//TODO anzeige von einer gelöschten oder leeren datei ausblenden, bei vollzogenem löschvorgang //TODO anzeige von einer gelöschten oder leeren datei ausblenden, bei vollzogenem löschvorgang