package main import ( "database/sql" "fmt" "log" "net/http" "strings" _ "github.com/lib/pq" ) // INSERT type insertHandler int func (ihandler insertHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { // auf Post prüfen if r.Method != http.MethodPost { http.Error(w, "Nur Post ist erlaubt", http.StatusMethodNotAllowed) return } //Formulardaten einlesen err := r.ParseForm() if err != nil { http.Error(w, "gesendetes Formular ungültig", http.StatusBadRequest) return } name := r.FormValue("name") alter := r.FormValue("alter") hobbies := r.Form["hobby"] // alter und name sollten vorhanden sein if name == "" { http.Error(w, "Name fehlt", http.StatusBadRequest) return } if alter == "" { http.Error(w, "Alter fehlt", http.StatusBadRequest) return } // Hobbies mit Komma separiert zusammenfügen alleHobbies := strings.Join(hobbies, ", ") //DB Verbindung öffnen connStr := "user=devuser password=devpass dbname=devdb host=localhost port=5432 sslmode=disable" db, err := sql.Open("postgres", connStr) if err != nil { log.Println("Datenbank nicht erreichbar", err) http.Error(w, "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 Error", http.StatusInternalServerError) return } log.Println("Verbindung erfolgreich hergestellt") //Insert query := `INSERT INTO personen (name, hobbies, alter) VALUES ($1, $2, $3)` _, err = db.Exec(query, name, alleHobbies, alter) if err != nil { log.Println("Fehler beim Einfügen der Daten", err) http.Error(w, "Interner Server Fehler", http.StatusInternalServerError) return } fmt.Fprintln(w, "Datensatz erfolgreich eingefügt") } // UPDATE type updateHandler int func (uhandler updateHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { // nur POST erlauben if r.Method != http.MethodPost { http.Error(w, "Nur Post ist erlaubt", http.StatusMethodNotAllowed) return } // Formulardaten einlesen err := r.ParseForm() if err != nil { http.Error(w, "gesendetes Formular ungültig", http.StatusBadRequest) return } name := r.FormValue("name") alter := r.FormValue("alter") hobbies := r.Form["hobby"] if name == "" { http.Error(w, "Name fehlt", http.StatusBadRequest) return } if alter == "" { http.Error(w, "Alter fehlt", http.StatusBadRequest) return } // Hobbies zusammenfügen alleHobbies := strings.Join(hobbies, ", ") // DB-Verbindung connStr := "user=devuser dbname=devdb host=localhost port=5432 sslmode=disable" db, err := sql.Open("postgres", connStr) if err != nil { log.Println("Datenbank nicht erreichbar", err) http.Error(w, "Server Fehler", http.StatusInternalServerError) return } defer db.Close() err = db.Ping() if err != nil { log.Println("Datenbank nicht erreichbar", err) http.Error(w, "Interner Server Fehler", http.StatusInternalServerError) return } // Update-Query query := `UPDATE personen SET hobbies = $1, alter = $2 WHERE name = $3` res, err := db.Exec(query, alleHobbies, alter, name) if err != nil { log.Println("Fehler beim Update", err) http.Error(w, "Interner Server Fehler", http.StatusInternalServerError) return } rowsAffected, _ := res.RowsAffected() if rowsAffected == 0 { http.Error(w, "Kein Datensatz mit diesem Namen gefunden", http.StatusNotFound) return } fmt.Fprintln(w, "Datensatz erfolgreich aktualisiert") } func main() { var ihandler insertHandler var uhandler updateHandler http.Handle("/insert", ihandler) // Insert-Endpunkt http.Handle("/update", uhandler) // Update-Endpunkt log.Println("Server startet auf http://localhost:8080") log.Fatal(http.ListenAndServe("localhost:8080", nil)) }