Hallo zusammen,
ich Versuche schon seit einiger zeit ein Tool zu schreiben, zum teil mithilfe von ChatGPT, der mir auch nützliche Codes ausgegeben hat die funktionieren. doch der Abschluss des Projekts scheint irgendwie nicht zu funktionieren.
Kurz über das Projekt:
Ich versuche ein Upload Formular zu schreiben, welche meinen Benutzern die Möglichkeit bietet, eine csv Datei, die mit NoLimits 2 (PC Programm zum erstellen von Achterbahnstrecken) erstellt wurde hochzuladen, die daten in eine Datenbank zu speichern, und am ende mithilfe von in einem Formular eingegebenen werten zu berechnen und wie gewünscht als Dateien zu speichern.
Der Upload und das Speichern der Daten in die Datenbank funktioniert bereits.
Jetzt können in einem bereits bestehendem Formular die umrechnungswerte und Bedingungen eingegeben werden. Leider geht ab dem Moment wenn man die Daten übermittelt nichts mehr.
Hier ein Link zum Formular: https://nl2spline.coastermodellbau.d...p?project_id=5
ab jetzt sollte eigentlich die umrechnung der Spline Punkte für jeden gewählten Spline berechnet werden.
Das sollte eigentlich die berechnung bewerkstelligen. leider scheint das irgendwie alles nicht so zu funktionieren.
zuerst wollte ich mal tabellen mit allen berechnungen anzeigen lassen, so wie mir das script eigentlich die einzelnen dateien für die gewählten splines erstellt und gespeichert hätte. aber hier geht einfach nichts mehr so wie es soll.
Leider bin ich mit meinem Wissensstand von php (älter als 16 Jahre) wohl überfordert, bzw aus der übung. daher suche ich hier für das projekt jemanden der mir etwas behilflich sein kann, dessen wissenstand in php auf dem aktuellen standard liegt und weiß wie man am ende die berechnungen in das gewünschte datei format exportiert und in eine zip datei zum speichern bereit stellen kann.
Ich würde mich sehr freuen wenn sich jemand dazu bereit erklären würde.
ich Versuche schon seit einiger zeit ein Tool zu schreiben, zum teil mithilfe von ChatGPT, der mir auch nützliche Codes ausgegeben hat die funktionieren. doch der Abschluss des Projekts scheint irgendwie nicht zu funktionieren.
Kurz über das Projekt:
Ich versuche ein Upload Formular zu schreiben, welche meinen Benutzern die Möglichkeit bietet, eine csv Datei, die mit NoLimits 2 (PC Programm zum erstellen von Achterbahnstrecken) erstellt wurde hochzuladen, die daten in eine Datenbank zu speichern, und am ende mithilfe von in einem Formular eingegebenen werten zu berechnen und wie gewünscht als Dateien zu speichern.
Der Upload und das Speichern der Daten in die Datenbank funktioniert bereits.
Jetzt können in einem bereits bestehendem Formular die umrechnungswerte und Bedingungen eingegeben werden. Leider geht ab dem Moment wenn man die Daten übermittelt nichts mehr.
Hier ein Link zum Formular: https://nl2spline.coastermodellbau.d...p?project_id=5
ab jetzt sollte eigentlich die umrechnung der Spline Punkte für jeden gewählten Spline berechnet werden.
PHP-Code:
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$project_id = $_POST['project_id'] ?? 0;
$scale = $_POST['scale'] ?? 1;
$unit = $_POST['exportUnit'] ?? 'mm';
$file_format = $_POST['exportFormat'] ?? 'csv';
$connect_start_end = isset($_POST['connect_start_end']);
$selected_splines = $_POST['splines'] ?? [];
$split_option = $_POST['divideOption'] ?? 'none';
$split_value = 0;
if ($split_option === 'points') {
$split_value = $_POST['dividePoints'] ?? 0;
} elseif ($split_option === 'pieces') {
$split_value = $_POST['dividePieces'] ?? 0;
}
if (($split_option === 'points' || $split_option === 'pieces') && $split_value <= 0) {
die("Fehler: Bei der gewählten Teilungsoption muss ein Wert größer als 0 angegeben werden.");
}
// Umrechnungsfaktor
$unit_factor = match ($unit) {
'mm' => 1000,
'cm' => 100,
'dm' => 10,
'm' => 1,
default => 1000
};
$output_dir = "exports/project_$project_id";
if (!is_dir($output_dir)) {
mkdir($output_dir, 0777, true);
}
// Spline-Daten aus der Datenbank abrufen (verwende Tabelle "spline_data")
$sql = "SELECT * FROM spline_data WHERE project_id = :project_id ORDER BY point_number ASC";
$stmt = $pdo->prepare($sql);
$stmt->execute(['project_id' => $project_id]);
$splines = $stmt->fetchAll(PDO::FETCH_ASSOC);
if (!$splines) {
die("Keine Spline-Daten gefunden.");
}
if ($connect_start_end && count($splines) > 0) {
$splines[] = $splines[0];
}
$total_points = count($splines);
// Aufteilen in Abschnitte, falls benötigt
$split_sizes = [];
if ($split_option === 'points') {
$split_sizes = array_fill(0, ceil($total_points / $split_value), $split_value);
} elseif ($split_option === 'pieces') {
$base_size = intdiv($total_points, $split_value);
$remainder = $total_points % $split_value;
for ($i = 0; $i < $split_value; $i++) {
$split_sizes[] = $base_size + ($i < $remainder ? 1 : 0);
}
}
// Funktion zur Transformation eines Spline-Punktes
function transformSpline($spline, $type, $factor) {
return match (strtolower($type)) {
'center' => [($spline['posX'] * $factor), ($spline['posY'] * $factor), ($spline['posZ'] * $factor)],
'left' => [(($spline['posX'] + $spline['leftX']) * $factor), (($spline['posY'] + $spline['leftY']) * $factor), (($spline['posZ'] + $spline['leftZ']) * $factor)],
'right' => [(($spline['posX'] - $spline['leftX']) * $factor), (($spline['posY'] - $spline['leftY']) * $factor), (($spline['posZ'] - $spline['leftZ']) * $factor)],
'top' => [(($spline['posX'] + $spline['upX']) * $factor), (($spline['posY'] + $spline['upY']) * $factor), (($spline['posZ'] + $spline['upZ']) * $factor)],
'bottom' => [(($spline['posX'] - $spline['upX']) * $factor), (($spline['posY'] - $spline['upY']) * $factor), (($spline['posZ'] - $spline['upZ']) * $factor)],
};
}
$split_files = [];
// Für jeden ausgewählten Spline-Typ: Dateien erzeugen
foreach ($selected_splines as $spline_type) {
$folder = "$output_dir/$spline_type";
if (!is_dir($folder)) mkdir($folder, 0777, true);
$data_parts = [];
if ($split_option === 'none') {
$data_parts[] = $splines;
} else {
$index = 0;
foreach ($split_sizes as $size) {
$data_parts[] = array_slice($splines, $index, $size + 1);
$index += $size;
}
}
foreach ($data_parts as $i => $data_set) {
$file_name = "$folder/{$spline_type}" . ($split_option !== 'none' ? ($i + 1) : '') . ".$file_format";
if ($file_format === 'csv' || $file_format === 'txt') {
$separator = ",";
$lines = array_map(fn($s) => implode($separator, transformSpline($s, $spline_type, $unit_factor / $scale)), $data_set);
file_put_contents($file_name, implode("\n", $lines));
} elseif ($file_format === 'xlsx' || $file_format === 'xls') {
$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
$row = 1;
foreach ($data_set as $s) {
$sheet->fromArray(transformSpline($s, $spline_type, $unit_factor / $scale), NULL, "A$row");
$row++;
}
$writer = ($file_format === 'xlsx') ? new Xlsx($spreadsheet) : new Xls($spreadsheet);
$writer->save($file_name);
}
$split_files[] = $file_name;
}
}
// Nach der Generierung: Weiterleiten zur Dateiliste
header("Location: save_splines.php?project_id=$project_id");
exit;
}
zuerst wollte ich mal tabellen mit allen berechnungen anzeigen lassen, so wie mir das script eigentlich die einzelnen dateien für die gewählten splines erstellt und gespeichert hätte. aber hier geht einfach nichts mehr so wie es soll.
Leider bin ich mit meinem Wissensstand von php (älter als 16 Jahre) wohl überfordert, bzw aus der übung. daher suche ich hier für das projekt jemanden der mir etwas behilflich sein kann, dessen wissenstand in php auf dem aktuellen standard liegt und weiß wie man am ende die berechnungen in das gewünschte datei format exportiert und in eine zip datei zum speichern bereit stellen kann.
Ich würde mich sehr freuen wenn sich jemand dazu bereit erklären würde.
Kommentar