Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Redundanz war versehentlich wieder da. |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | master | trunk |
Files: | files | file ages | folders |
SHA3-256: |
8907e4df679796ea090b7d71999a288a |
User & Date: | git@tuxproject.de 2019-08-12 19:27:50 |
Context
2019-08-13
| ||
15:33 | Datenbank vergessen check-in: eb3632f11c user: git@tuxproject.de tags: master, trunk | |
2019-08-12
| ||
19:27 | Redundanz war versehentlich wieder da. check-in: 8907e4df67 user: git@tuxproject.de tags: master, trunk | |
19:17 | Wir haben jetzt eine Straßensuche! check-in: 7d0c6ad749 user: git@tuxproject.de tags: master, trunk | |
Changes
Changes to src/plakateapp.go.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | package main import ( "encoding/json" "encoding/xml" "fmt" "html/template" "io/ioutil" "log" "net/http" // Bibliotheken aus GitHub: _ "github.com/mattn/go-sqlite3" "github.com/jmoiron/sqlx" "github.com/gorilla/mux" ) type Plakat struct { // Mapping DB <-> Go-Datentypen: ID int `db:"id"` Latitude float32 `db:"lat"` Longitude float32 `db:"lon"` Location string `db:"location"` } // Reverse-Geocoding via Nominatim: type ReverseGeoCode struct { XMLName xml.Name `xml:"reversegeocode"` AdressParts AdressParts `xml:"addressparts"` } type AdressParts struct { XMLName xml.Name `xml:"addressparts"` HouseNumber string `xml:"house_number"` Road string `xml:"road"` Suburb string `xml:"suburb"` District string `xml:"city_district"` City string `xml:"city"` State string `xml:"state"` Postcode string `xml:"postcode"` Country string `xml:"country"` CountryCode string `xml:"country_code"` } // ---------------------------------------- func CheckError(err error) { if err != nil { panic(err) } } func GetXML(url string) ([]byte, error) { // XML herunterladen: | > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | package main import ( "encoding/json" "encoding/xml" "fmt" "html/template" "io/ioutil" "log" "net/http" "strconv" // Bibliotheken aus GitHub: _ "github.com/mattn/go-sqlite3" "github.com/jmoiron/sqlx" "github.com/gorilla/mux" ) type Plakat struct { // Mapping DB <-> Go-Datentypen: ID int `db:"id"` Latitude float32 `db:"lat"` Longitude float32 `db:"lon"` Location string `db:"location"` } // Reverse-Geocoding via Nominatim: type ReverseGeoCode struct { // Bildet <reversegeocode> ab. XMLName xml.Name `xml:"reversegeocode"` AdressParts AdressParts `xml:"addressparts"` } type AdressParts struct { // Bildet <reversegeocode><adressparts> ab. XMLName xml.Name `xml:"addressparts"` HouseNumber string `xml:"house_number"` Road string `xml:"road"` Suburb string `xml:"suburb"` District string `xml:"city_district"` City string `xml:"city"` State string `xml:"state"` Postcode string `xml:"postcode"` Country string `xml:"country"` CountryCode string `xml:"country_code"` } // ---------------------------------------- func CheckError(err error) { // Bei Fehlern schreiend im Kreis rennen: if err != nil { panic(err) } } func GetXML(url string) ([]byte, error) { // XML herunterladen: |
︙ | ︙ | |||
65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 | data, err := ioutil.ReadAll(resp.Body) CheckError(err) return data, nil } func FetchPlakate() []Plakat { db, err := sqlx.Open("sqlite3", "./plakate.db") CheckError(err) defer db.Close() // Liste erzeugen: plakate := []Plakat{} db.Select(&plakate, "SELECT * FROM plakate") return plakate } // ---------------------------------------- func HomeHandler(w http.ResponseWriter, r *http.Request) { // Startseite aufrufen: tmpl := template.Must(template.ParseFiles("templates/index.htm")) tmpl.Execute(w, "") | > > > > > > > > > > > > > | 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 | data, err := ioutil.ReadAll(resp.Body) CheckError(err) return data, nil } func FetchPlakate() []Plakat { // Liste von Plakaten aus der DB in ein Plakat-Array schieben: db, err := sqlx.Open("sqlite3", "./plakate.db") CheckError(err) defer db.Close() // Liste erzeugen: plakate := []Plakat{} db.Select(&plakate, "SELECT * FROM plakate") return plakate } func DeletePlakat(id string) { // Datenbank aufrufen: db, err := sqlx.Open("sqlite3", "./plakate.db") CheckError(err) defer db.Close() // Löschen, falls möglich: stmt, err := db.Prepare("delete from plakate where id = ?") _, err = stmt.Exec(strconv.Atoi(id)) CheckError(err) } // ---------------------------------------- func HomeHandler(w http.ResponseWriter, r *http.Request) { // Startseite aufrufen: tmpl := template.Must(template.ParseFiles("templates/index.htm")) tmpl.Execute(w, "") |
︙ | ︙ | |||
142 143 144 145 146 147 148 | // Datenbank aufrufen: db, err := sqlx.Open("sqlite3", "./plakate.db") CheckError(err) defer db.Close() stmt, err := db.Prepare("insert into plakate (lat, lon, location) values (?, ?, ?)") | < | < < < < < < < < < | < > | < < < < < < < < < < | 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 | // Datenbank aufrufen: db, err := sqlx.Open("sqlite3", "./plakate.db") CheckError(err) defer db.Close() stmt, err := db.Prepare("insert into plakate (lat, lon, location) values (?, ?, ?)") _, err = stmt.Exec(lat, lon, location) CheckError(err) fmt.Fprintf(w, "Plakat erfolgreich eingetragen!") } func DelHandler(w http.ResponseWriter, r *http.Request) { // Plakat mit URL-Parameter "id" löschen: vars := mux.Vars(r) DeletePlakat(vars["id"]) // Falls kein Fehler aufgetreten ist, umleiten auf /manageplakate: http.Redirect(w, r, "/manageplakate", http.StatusMovedPermanently) } func DelPostHandler(w http.ResponseWriter, r *http.Request) { // Plakat mit POST-Parameter "id" löschen: data := r.FormValue("id") DeletePlakat(data) // Falls kein Fehler aufgetreten ist, umleiten auf /manageplakate: http.Redirect(w, r, "/manageplakate", http.StatusMovedPermanently) } func main() { // Routing: |
︙ | ︙ |