Compare commits

..

No commits in common. "ddac93a5500e058f51e9632e01e29933032c443f" and "5de5373aff72ccfb780331d62b7ef9fd5024c65c" have entirely different histories.

2 changed files with 171 additions and 174 deletions

View File

@ -29,6 +29,7 @@
</table>
</div>
<!-- Link the dark mode toggle script -->
<script src="/static/theme.js"></script>
</body>
</html>

54
main.go
View File

@ -6,10 +6,10 @@ import (
"html/template"
"log"
"net/http"
_ "github.com/mattn/go-sqlite3"
)
type Question struct {
ID int
QuestionText string
@ -19,7 +19,7 @@ type Question struct {
var db *sql.DB
func renderForm(w http.ResponseWriter, r *http.Request) {
rows, err := db.Query("SELECT id, question_text, question_type FROM questions ORDER BY question_order")
rows, err := db.Query("SELECT question_text, question_type FROM questions ORDER BY question_order")
if err != nil {
log.Printf("Error fetching questions: %v\n", err)
http.Error(w, "Failed to fetch form questions", http.StatusInternalServerError)
@ -31,7 +31,7 @@ func renderForm(w http.ResponseWriter, r *http.Request) {
for rows.Next() {
var question Question
err := rows.Scan(&question.ID, &question.QuestionText, &question.QuestionType)
err := rows.Scan(&question.QuestionText, &question.QuestionType)
if err != nil {
log.Printf("Error scanning question: %v\n", err)
continue
@ -49,49 +49,43 @@ func handleFormSubmit(w http.ResponseWriter, r *http.Request) {
return
}
err := r.ParseForm()
r.ParseForm()
rows, err := db.Query("SELECT id FROM questions")
if err != nil {
log.Printf("Error parsing form: %v\n", err)
http.Error(w, "Failed to parse form", http.StatusInternalServerError)
log.Printf("Error fetching questions: %v\n", err)
http.Error(w, "Failed to fetch questions", http.StatusInternalServerError)
return
}
insertAnswerQuery := `INSERT INTO answers (question_id, answer) VALUES (?, ?)`
defer rows.Close()
tx, err := db.Begin()
if err != nil {
log.Printf("Error starting transaction: %v\n", err)
http.Error(w, "Failed to save answers", http.StatusInternalServerError)
return
}
defer func() {
if err != nil {
tx.Rollback()
} else {
tx.Commit()
}
}()
for key, values := range r.Form {
if len(key) > 7 && key[:7] == "custom_" {
var questionID int
_, err := fmt.Sscanf(key, "custom_%d", &questionID)
for rows.Next() {
err := rows.Scan(&questionID)
if err != nil {
log.Printf("Error parsing question ID from field name %s: %v\n", key, err)
log.Printf("Error scanning question ID: %v\n", err)
continue
}
fieldName := fmt.Sprintf("custom_%d", questionID)
fieldValue := r.FormValue(fieldName)
answer := values[0]
_, err = tx.Exec(insertAnswerQuery, questionID, answer)
if fieldValue != "" {
insertQuery := `INSERT INTO answers (question_id, answer) VALUES (?, ?)`
_, err = db.Exec(insertQuery, questionID, fieldValue)
if err != nil {
log.Printf("Error saving answer for question %d: %v\n", questionID, err)
http.Error(w, "Failed to save answers", http.StatusInternalServerError)
log.Printf("Error saving answer: %v\n", err)
http.Error(w, "Failed to save answer", http.StatusInternalServerError)
return
}
} else {
log.Printf("No answer found for question %d", questionID)
}
}
fmt.Fprintf(w, "Thank you for your submission!")
}
func handleAdmin(w http.ResponseWriter, r *http.Request) {
rows, err := db.Query(`
SELECT q.question_text, a.answer
@ -148,6 +142,7 @@ func handleAddQuestion(w http.ResponseWriter, r *http.Request) {
http.Redirect(w, r, "/manage", http.StatusSeeOther)
}
func handleManage(w http.ResponseWriter, r *http.Request) {
rows, err := db.Query("SELECT id, question_text, question_type FROM questions ORDER BY question_order")
if err != nil {
@ -194,6 +189,7 @@ func handleRemoveQuestion(w http.ResponseWriter, r *http.Request) {
http.Redirect(w, r, "/manage", http.StatusSeeOther)
}
func main() {
var err error