query("SELECT * FROM tags ORDER BY name"); $allTags = $stmt->fetchAll(PDO::FETCH_ASSOC); } catch(PDOException $e) { $allTags = []; } $error = ''; $success = ''; $uploadResults = []; if ($_SERVER['REQUEST_METHOD'] === 'POST' && !empty($_FILES['images'])) { $is_public = isset($_POST['is_public']) ? 1 : 0; $uploadedFiles = $_FILES['images']; $fileCount = count($uploadedFiles['name']); $successCount = 0; $errorCount = 0; for ($i = 0; $i < $fileCount; $i++) { if ($uploadedFiles['error'][$i] === UPLOAD_ERR_NO_FILE) continue; $title = trim($_POST['titles'][$i] ?? ''); $file_tags = $_POST['tags'][$i] ?? []; $file = [ 'name' => $uploadedFiles['name'][$i], 'type' => $uploadedFiles['type'][$i], 'tmp_name' => $uploadedFiles['tmp_name'][$i], 'error' => $uploadedFiles['error'][$i], 'size' => $uploadedFiles['size'][$i] ]; if (empty($title)) $title = pathinfo($file['name'], PATHINFO_FILENAME); if ($file['error'] !== UPLOAD_ERR_OK) { $uploadResults[] = ['success' => false, 'filename' => $file['name'], 'message' => t('upload_failed')]; $errorCount++; continue; } if ($file['size'] > MAX_FILE_SIZE) { $uploadResults[] = ['success' => false, 'filename' => $file['name'], 'message' => t('max_size') . ': 5MB']; $errorCount++; continue; } $file_extension = strtolower(pathinfo($file['name'], PATHINFO_EXTENSION)); if (!in_array($file_extension, ALLOWED_TYPES)) { $uploadResults[] = ['success' => false, 'filename' => $file['name'], 'message' => t('supported_formats') . ': JPG, PNG, GIF, WebP']; $errorCount++; continue; } $filename = uniqid() . '_' . time() . '.' . $file_extension; $upload_path = 'uploads/' . $filename; if (move_uploaded_file($file['tmp_name'], $upload_path)) { try { $stmt = $pdo->prepare("INSERT INTO images (user_id, title, filename, is_public, file_size, mime_type) VALUES (?, ?, ?, ?, ?, ?)"); $stmt->execute([$_SESSION['user_id'], $title, $filename, $is_public, $file['size'], $file['type']]); $image_id = $pdo->lastInsertId(); $tagNames = []; if (!empty($file_tags)) { foreach ($file_tags as $tag_id) { $stmt = $pdo->prepare("INSERT INTO image_tags (image_id, tag_id) VALUES (?, ?)"); $stmt->execute([$image_id, $tag_id]); } $tagIds = implode(',', array_map('intval', $file_tags)); $stmt = $pdo->query("SELECT name FROM tags WHERE id IN ($tagIds)"); $tagNames = $stmt->fetchAll(PDO::FETCH_COLUMN); } $uploadResults[] = [ 'success' => true, 'filename' => $file['name'], 'title' => $title, 'tags' => $tagNames, 'url' => SITE_URL . '/uploads/' . $filename, 'view_url' => SITE_URL . '/view-image.php?id=' . $image_id ]; $successCount++; } catch(PDOException $e) { unlink($upload_path); $uploadResults[] = ['success' => false, 'filename' => $file['name'], 'message' => t('error') . ': ' . $e->getMessage()]; $errorCount++; } } else { $uploadResults[] = ['success' => false, 'filename' => $file['name'], 'message' => t('upload_failed')]; $errorCount++; } } if ($successCount > 0) { $success = t('upload_success') . " {$successCount} " . t('images') . ($errorCount > 0 ? ",{$errorCount} " . t('upload_failed') : ""); } if ($errorCount > 0 && $successCount === 0) { $error = t('upload_failed'); } } ?> <?php echo t('upload_title'); ?> - <?php echo SITE_NAME; ?>

: JPG, PNG, GIF, WebP | : 5MB

-
: | : | | - :