This topic is locked
[SOLVED]

Multiple File Upload Creating Multiple Database Records

10/7/2025 20:42:30
PHPRunner General questions
S
salus2 author

Is there a setting or event functions that will separate multiple uploaded files (selected with the advanced file selector) into multiple database records rather into a single record? Files are being uploaded to folder on server, not into database fields.

Sergey Kornilov admin 10/8/2025

This would require some custom coding. We do something similar in DocManager template.

Check this article for inspiration:
https://xlinesoft.com/phprunner/docs/rename_uploaded_file.htm

S
salus2 author 10/10/2025

Thanks for this info. GPT produced the following code for After record added and After record updated events that seperates multi-file uploads into multiple database records. This code additionally creates a url that points back to images, for use with PHPRunners most-excellent image viewer.

$files = json_decode($values["File"], true);
$defaultImage = "https://asprunner.com/forums/file.php?topicimage=1&fieldname=reply&id=100599&image=1&table=forumreplies";

// If there's only one file, handle it directly
if (count($files) === 1) {
$file = $files[0];
$filename = basename($file["name"]);
$filetype = isset($file["type"]) ? $file["type"] : "";

$fileURL = (strpos($filetype, "image/") === 0 || empty($filetype))
? "https://calcforms.com/FileProcessor/files/'>https://calcforms.com/FileProcessor/files/'>https://calcforms.com/FileProcessor/files/'>https://calcforms.com/FileProcessor/files/" . $filename
: $defaultImage;

DB::Exec("
UPDATE filelist
SET FileURL = '" . db_addslashes($fileURL) . "'
WHERE RecordID = " . $values["RecordID"]
);

}

// If there are multiple files, fan them out
if (count($files) > 1) {
// Update original record to hold only the first file
$firstFile = $files[0];
$firstName = basename($firstFile["name"]);
$firstType = isset($firstFile["type"]) ? $firstFile["type"] : "";

$firstURL = (strpos($firstType, "image/") === 0 || empty($firstType))
? "https://calcforms.com/FileProcessor/files/'>https://calcforms.com/FileProcessor/files/'>https://calcforms.com/FileProcessor/files/'>https://calcforms.com/FileProcessor/files/" . $firstName
: $defaultImage;

DB::Exec("
UPDATE filelist
SET File = '" . db_addslashes(json_encode([$firstFile])) . "',
FileURL = '" . db_addslashes($firstURL) . "'
WHERE RecordID = " . $values["RecordID"]
);

// Insert remaining files as new records
for ($i = 1; $i < count($files); $i++) {
$file = $files[$i];
$filename = basename($file["name"]);
$filetype = isset($file["type"]) ? $file["type"] : "";

$fileURL = (strpos($filetype, "image/") === 0 || empty($filetype))
? "https://calcforms.com/FileProcessor/files/'>https://calcforms.com/FileProcessor/files/'>https://calcforms.com/FileProcessor/files/'>https://calcforms.com/FileProcessor/files/" . $filename
: $defaultImage;

DB::Insert("filelist", [
"File" => json_encode([$file]),
"FileURL" => $fileURL,
"FileStatus" => $values["FileStatus"],
"FileText" => $values["FileText"],
// Add other fields to preserve as needed
]);
}

}

Screenshot_1.png