forked from WEB-IB-SS26/development-ib
Implemented Labor 09
parent
051d7fad01
commit
06b7e711e3
|
|
@ -0,0 +1,120 @@
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"database/sql"
|
||||||
|
"fmt"
|
||||||
|
"log"
|
||||||
|
"net/http"
|
||||||
|
"strconv"
|
||||||
|
|
||||||
|
_ "github.com/lib/pq"
|
||||||
|
)
|
||||||
|
|
||||||
|
var db *sql.DB
|
||||||
|
|
||||||
|
type User struct {
|
||||||
|
Name string `json:"name"`
|
||||||
|
Hobbies string `json:"hobby"`
|
||||||
|
Alter int `json:"alter"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func insertData(w http.ResponseWriter, r *http.Request) {
|
||||||
|
// Parse Formulardaten
|
||||||
|
err := r.ParseForm()
|
||||||
|
if err != nil {
|
||||||
|
log.Println("Fehler beim Parsen der Formulardaten: ", err)
|
||||||
|
http.Error(w, "Fehler beim Lesen der Formulardaten", http.StatusBadRequest)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
name := r.FormValue("name")
|
||||||
|
hobby := r.FormValue("hobby")
|
||||||
|
alter, err := strconv.Atoi(r.FormValue("alter"))
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
log.Println("Fehler beim konvertieren des Alters: ", err)
|
||||||
|
http.Error(w, "Fehler beim Einfügen in die Datenbank: "+err.Error(), http.StatusInternalServerError)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Printf("Füge ein: Name=%s, Hobbies=%s, Alter=%s\n", name, hobby, alter)
|
||||||
|
|
||||||
|
query := `INSERT INTO personen (name, hobbies, alter) VALUES ($1, $2, $3)`
|
||||||
|
_, err = db.Exec(query, name, hobby, alter)
|
||||||
|
if err != nil {
|
||||||
|
log.Println("Fehler beim einfügen: ", err)
|
||||||
|
http.Error(w, "Fehler beim Einfügen in die Datenbank: "+err.Error(), http.StatusInternalServerError)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Println("Daten erfolgreich eingefügt.")
|
||||||
|
w.Header().Set("Content-Type", "text/html; charset=utf-8")
|
||||||
|
w.WriteHeader(http.StatusOK)
|
||||||
|
fmt.Fprintf(w, "<html><body><h2>✓ Daten erfolgreich eingefügt!</h2><a href='Aufgabe_03.html'>Zurück zum Formular</a></body></html>")
|
||||||
|
}
|
||||||
|
|
||||||
|
func updateData(w http.ResponseWriter, r *http.Request) {
|
||||||
|
// Parse Formulardaten
|
||||||
|
err := r.ParseForm()
|
||||||
|
if err != nil {
|
||||||
|
log.Println("Fehler beim Parsen der Formulardaten: ", err)
|
||||||
|
http.Error(w, "Fehler beim Lesen der Formulardaten", http.StatusBadRequest)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
name := r.FormValue("name")
|
||||||
|
hobby := r.FormValue("hobby")
|
||||||
|
alter, err := strconv.Atoi(r.FormValue("alter"))
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
log.Println("Fehler beim konvertieren des Alters: ", err)
|
||||||
|
http.Error(w, "Fehler beim Einfügen in die Datenbank: "+err.Error(), http.StatusInternalServerError)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Printf("Aktualisiere: Name=%s, Hobbies=%s, Alter=%s\n", name, hobby, alter)
|
||||||
|
|
||||||
|
query := `UPDATE personen SET hobbies = $2, alter = $3 WHERE name = $1`
|
||||||
|
result, err := db.Exec(query, name, hobby, alter)
|
||||||
|
if err != nil {
|
||||||
|
log.Println("Fehler beim aktualisieren: ", err)
|
||||||
|
http.Error(w, "Fehler beim Aktualisieren: "+err.Error(), http.StatusInternalServerError)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
rowsAffected, err := result.RowsAffected()
|
||||||
|
if err != nil {
|
||||||
|
log.Println("Fehler beim Abrufen der betroffenen Zeilen: ", err)
|
||||||
|
http.Error(w, "Fehler beim Abrufen der Änderungen", http.StatusInternalServerError)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Printf("Daten erfolgreich aktualisiert. Betroffene Zeilen: %d\n", rowsAffected)
|
||||||
|
w.Header().Set("Content-Type", "text/html; charset=utf-8")
|
||||||
|
w.WriteHeader(http.StatusOK)
|
||||||
|
fmt.Fprintf(w, "<html><body><h2>✓ Daten erfolgreich aktualisiert! (%d Zeilen)</h2><a href='Aufgabe_03.html'>Zurück zum Formular</a></body></html>", rowsAffected)
|
||||||
|
}
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
connStr := "user=devuser password=devpass dbname=devdb host=localhost port=5432 sslmode=disable"
|
||||||
|
|
||||||
|
var err error
|
||||||
|
db, err = sql.Open("postgres", connStr)
|
||||||
|
if err != nil {
|
||||||
|
log.Println("Fehler bein öffen der Verbindung:", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
defer db.Close()
|
||||||
|
|
||||||
|
err = db.Ping()
|
||||||
|
if err != nil {
|
||||||
|
log.Println("Datenbank nicht erreichbar:", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Println("Datenbank Verbindung erfolgreich hergestellt!")
|
||||||
|
|
||||||
|
http.HandleFunc("/insert", insertData)
|
||||||
|
http.HandleFunc("/update", updateData)
|
||||||
|
http.ListenAndServe("localhost:8080", nil)
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,52 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="de">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<title>Hobbies</title>
|
||||||
|
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h2>Hobbies Einfügen:</h2>
|
||||||
|
<form method="POST", action="http://localhost:8080/insert">
|
||||||
|
<legend>Persönliche Angaben:</legend>
|
||||||
|
<label>
|
||||||
|
Vor- und Nachanme:
|
||||||
|
<input type="text" name="name" required>
|
||||||
|
</label>
|
||||||
|
<br>
|
||||||
|
<label>
|
||||||
|
Hobbies:
|
||||||
|
<input type="text" name="hobby">
|
||||||
|
</label>
|
||||||
|
<br>
|
||||||
|
<label>
|
||||||
|
Alter:
|
||||||
|
<input type="number" name="alter" required>
|
||||||
|
</label>
|
||||||
|
<br>
|
||||||
|
<input type="submit" value="Jetzt Absenden">
|
||||||
|
</form>
|
||||||
|
|
||||||
|
<br><br>
|
||||||
|
<h2>Hobbies aktualisieren:</h2>
|
||||||
|
<form method="POST", action="http://localhost:8080/update">
|
||||||
|
<legend>Persönliche Angaben:</legend>
|
||||||
|
<label>
|
||||||
|
Vor- und Nachanme:
|
||||||
|
<input type="text" name="name" required>
|
||||||
|
</label>
|
||||||
|
<br>
|
||||||
|
<label>
|
||||||
|
Hobbies:
|
||||||
|
<input type="text" name="hobby">
|
||||||
|
</label>
|
||||||
|
<br>
|
||||||
|
<label>
|
||||||
|
Alter:
|
||||||
|
<input type="number" name="alter" required>
|
||||||
|
</label>
|
||||||
|
<br>
|
||||||
|
<input type="submit" value="Jetzt Absenden">
|
||||||
|
</form>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
Loading…
Reference in New Issue