Ankündigung

Einklappen
Keine Ankündigung bisher.

PhP Projekt mit chatgpt angefangen, aber bekomme keinen vernünftigen abschluss hin.

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • PhP Projekt mit chatgpt angefangen, aber bekomme keinen vernünftigen abschluss hin.

    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.

    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_dir0777true);
        }

        
    // 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(0ceil($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 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($folder0777true);
            
    $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($separatortransformSpline($s$spline_type$unit_factor $scale)), $data_set);
                    
    file_put_contents($file_nameimplode("\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;

    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.

  • #2
    leider scheint das irgendwie alles nicht so zu funktionieren
    ... ist leider keine Fehlerbeschreibung, mit der man arbeiten könnte.

    Da fehlen jede Menge Infos zu deiner Datenbank, den exakten Fehlermeldungen, den erwarteten Ergebnissen und den tatsächlichen (falschen) Ergebnissen.

    Good programming is 5% knowledge, 5% skill, 20% caffeine, 30% attention to detail and 40% RTFM
    Kapazitäten frei: Einfach per PN ein Angebot einholen.

    Kommentar

    Lädt...
    X