package main import ( "database/sql" "fmt" "log" "net/http" "strconv" "strings" _ "github.com/lib/pq" ) func insertToDB(w http.ResponseWriter, r *http.Request) { w.Header().Set("Access-Control-Allow-Origin", "*") w.Header().Set("Access-Control-Allow-Methods", "GET, POST, OPTIONS") w.Header().Set("Access-Control-Allow-Headers", "Content-Type") if r.Method == "OPTIONS" { w.WriteHeader(http.StatusNoContent) return } if r.Method != http.MethodPost { http.Error(w, "Nur POST-Methode erlaubt.", http.StatusMethodNotAllowed) return } err := r.ParseForm() if err != nil { http.Error(w, "Fehler beim Parsen des Formulars", http.StatusBadRequest) return } if len(r.PostForm) == 0 { http.Error(w, "Kein POST-Formular gesendet", http.StatusBadRequest) return } name := r.PostForm.Get("name") hobbies := r.PostForm["hobby"] // Umwandlung in einen String mit Komma-Trennung hobbiesAsString := strings.Join(hobbies, ", ") alter, err := strconv.Atoi(r.PostForm.Get("alter")) if err != nil { log.Println("Parameter konnte nicht korrekt verarbeitet werden:", err) http.Error(w, "Benutzereingabe fehlerhaft.", http.StatusBadRequest) return } // Verbindungszeichenfolge: Benutzername, Passwort, DB-Name, Host, Port connStr := "user=devuser password=devpass dbname=devdb host=localhost port=5432 sslmode=disable" // Verbindung zur Datenbank öffnen db, err := sql.Open("postgres", connStr) if err != nil { log.Println("Fehler beim Öffnen der Verbindung:", err) http.Error(w, "Interner Server-Fehler.", http.StatusInternalServerError) return } defer db.Close() // Verbindung testen err = db.Ping() if err != nil { log.Println("Datenbank nicht erreichbar:", err) http.Error(w, "Interner Server-Fehler.", http.StatusInternalServerError) return } log.Println("Verbindung erfolgreich hergestellt.") // INSERT-Anweisung vorbereiten query := `INSERT INTO personen (name, hobbies, alter) VALUES ($1, $2, $3)` // INSERT-Anweisung ausführen _, err = db.Exec(query, name, hobbiesAsString, alter) if err != nil { log.Println("Fehler beim Einfügen:", err) http.Error(w, "Datensatz konnte nicht gespeichert werden.", http.StatusInternalServerError) return } log.Println("Datensatz erfolgreich eingefügt.") fmt.Fprintln(w, "Ihre Hobbies wurden erfolgreich gespeichert.") } func updateInDB(w http.ResponseWriter, r *http.Request) { w.Header().Set("Access-Control-Allow-Origin", "*") w.Header().Set("Access-Control-Allow-Methods", "GET, POST, OPTIONS") w.Header().Set("Access-Control-Allow-Headers", "Content-Type") if r.Method == "OPTIONS" { w.WriteHeader(http.StatusNoContent) return } if r.Method != http.MethodPost { http.Error(w, "Nur POST-Methode erlaubt.", http.StatusMethodNotAllowed) return } err := r.ParseForm() if err != nil { http.Error(w, "Fehler beim Parsen des Formulars", http.StatusBadRequest) return } if len(r.PostForm) == 0 { http.Error(w, "Kein POST-Formular gesendet", http.StatusBadRequest) return } name := r.PostForm.Get("name") hobbies := r.PostForm["hobby"] // Umwandlung in einen String mit Komma-Trennung hobbiesAsString := strings.Join(hobbies, ", ") alter, err := strconv.Atoi(r.PostForm.Get("alter")) if err != nil { log.Println("Parameter konnte nicht korrekt verarbeitet werden:", err) http.Error(w, "Benutzereingabe fehlerhaft.", http.StatusBadRequest) return } // Verbindungszeichenfolge: Benutzername, Passwort, DB-Name, Host, Port connStr := "user=devuser password=devpass dbname=devdb host=localhost port=5432 sslmode=disable" // Verbindung zur Datenbank öffnen db, err := sql.Open("postgres", connStr) if err != nil { log.Println("Fehler beim Öffnen der Verbindung:", err) http.Error(w, "Interner Server-Fehler.", http.StatusInternalServerError) return } defer db.Close() // Verbindung testen err = db.Ping() if err != nil { log.Println("Datenbank nicht erreichbar:", err) http.Error(w, "Interner Server-Fehler.", http.StatusInternalServerError) return } log.Println("Verbindung erfolgreich hergestellt.") // UPDATE-Anweisung vorbereiten query := `UPDATE personen SET hobbies = $1, alter = $2 WHERE name = $3` // UPDATE-Anweisung ausführen _, err = db.Exec(query, hobbiesAsString, alter, name) if err != nil { log.Println("Fehler beim Aktualisieren:", err) http.Error(w, "Datensatz konnte nicht aktualisiert werden.", http.StatusInternalServerError) return } log.Println("Datensatz erfolgreich aktualisiert.") fmt.Fprintln(w, "Ihre Hobbies wurden erfolgreich aktualisiert.") } func main() { http.HandleFunc("/insert", insertToDB) http.HandleFunc("/update", updateInDB) fmt.Println("Server läuft auf localhost:8080...") log.Fatal(http.ListenAndServe(":8080", nil)) }