【问题标题】:I can't view all my MySQL table data on HTML我无法在 HTML 上查看我的所有 MySQL 表数据
【发布时间】:2021-05-19 20:27:18
【问题描述】:

我从 MySQL 表中获取了所有数据,并使用“日志”功能打印了它,但我需要在 HTML 页面上打印它。我只能打印一列。我想打印所有产品数据。我该怎么做?

简而言之:我想列出商店页面的所有产品,但我只能列出一种产品。 (我将添加数百个产品。目前,我的表中只有 3 个产品。)

我已经2天没有解决它,如果您能提供帮助,我将非常高兴。非常感谢... 转到文件

package main

import ( "database/sql" "fmt" "log" "net/http" "text/template"

_ "github.com/go-sql-driver/mysql"
)

type product struct { ID int Name string Stock int Price float32 }

var products product

func handler(w http.ResponseWriter, r *http.Request) {

products = product{
    ID:    products.ID,
    Name:  products.Name,
    Stock: products.Stock,
    Price: products.Price,
}

appointment, _ := template.ParseFiles("ot.html")
appointment.Execute(w, products)
}

func main() { fmt.Println("Go MySQL Tutorial")

sqlType := "mysql"
sqlUsn := "root"
sqlPass := "2582064"
sqlDatabase := "gowdb"

db, err := sql.Open(sqlType, sqlUsn+":"+sqlPass+"@/"+sqlDatabase)
if err != nil {
    panic(err.Error())
}

defer db.Close()

results, err := db.Query("SELECT * FROM products")
if err != nil {
    panic(err.Error())
}

for results.Next() {

    err = results.Scan(&products.ID, &products.Stock, &products.Price, &products.Name)
    if err != nil {
        panic(err.Error())
    }

    log.Println(products.Name)
}

if err != nil {
    panic(err.Error())
}

http.HandleFunc("/", handler)
http.ListenAndServe(":8080", nil)
}

HTML 页面

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <h1>PRODUCT 1</h1>
    <div>NAME: {{.Name}}</div>
    <div>PRICE: {{.Price}}</div>
    <div>STOCK: {{.Stock}}</div>
    <div>ID: {{.ID}}</div>
    <div>BUY FROM: xxx.com</div>

<h1>PRODUCT 2</h1>
<div>NAME: {{.Name}}</div>
<div>PRICE: {{.Price}}</div>
<div>STOCK: {{.Stock}}</div>
<div>ID: {{.ID}}</div>
<div>BUY FROM: xxx.com</div>

<h1>PRODUCT 3</h1>
<div>NAME: {{.Name}}</div>
<div>PRICE: {{.Price}}</div>
<div>STOCK: {{.Stock}}</div>
<div>ID: {{.ID}}</div>
<div>BUY FROM: xxx.com</div>
</body>
</html>

输出日志(没关系)

电子面具 过滤面膜 防空面具

在 HTML 页面上输出

产品 1 名称:Aircrop Mask 价格:19 库存:2 ID:2 购买自:xxx.com

产品 2 名称:Aircrop Mask 价格:19 库存:2 ID:2 购买自:xxx.com

产品 3 名称:Aircrop Mask 价格:19 库存:2 ID:2 购买自:xxx.com

【问题讨论】:

标签: html mysql go


【解决方案1】:

所以我已经修复了你的代码,但是我没有对其进行测试,所以对它持保留态度。请记住,您的原始代码中有几处是完全错误的。顺便提一下,处理程序正在从全局变量中获取响应。这是灾难的根源,您需要“不习惯”这样做,否则会给您带来更多麻烦。

我能说的最好的办法就是让你的老师审查这段代码。

main.go

package main

import (
    "database/sql"
    "net/http"
    "text/template"

    _ "github.com/go-sql-driver/mysql"
)

type product struct {
    ID    int
    Name  string
    Stock int
    Price float32
}

func handler(w http.ResponseWriter, r *http.Request) {
    appointment, _ := template.ParseFiles("ot.html")
    appointment.Execute(w, GetProducts())
}

func main() {

    http.HandleFunc("/", handler)
    http.ListenAndServe(":8080", nil)
}

func GetProducts() []product {
    var out = make([]product, 0, 10)
    sqlType := "mysql"
    sqlUsn := "root"
    sqlPass := "2582064"
    sqlDatabase := "gowdb"

    db, err := sql.Open(sqlType, sqlUsn+":"+sqlPass+"@/"+sqlDatabase)
    if err != nil {
        panic(err.Error())
    }

    defer db.Close()

    results, err := db.Query("SELECT * FROM products")
    if err != nil {
        panic(err.Error())
    }

    for results.Next() {
        var p product
        err = results.Scan(&p.ID, &p.Stock, &p.Price, &p.Name)
        if err != nil {
            panic(err.Error())
        }
        out = append(out, p)
    }

    if err != nil {
        panic(err.Error())
    }
    return out
}

html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    {{ range $i, $e := . }}
        <h1>PRODUCT $i</h1>
        <div>NAME: {{.Name}}</div>
        <div>PRICE: {{.Price}}</div>
        <div>STOCK: {{.Stock}}</div>
        <div>ID: {{.ID}}</div>
        <div>BUY FROM: xxx.com</div>
    {{end}}
</body>
</html>

【讨论】:

  • 成功了。非常感谢。你救了我:),我想知道为什么我们要在 "range" "{{ range $i, $e := >.
  • 您需要遍历从数据库中获得的产品,此外,您还需要获取该产品的索引。如果此答案对您有用,请将其标记为正确。 @梅丽莎
  • 是的,它对我有用,但我是堆栈溢出的新手,我投票但没有显示。下一次吧。真诚的!
猜你喜欢
  • 2012-02-21
  • 1970-01-01
  • 2020-08-22
  • 1970-01-01
  • 2021-01-31
  • 1970-01-01
  • 2016-02-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多