HTML Formular Input in SQLite Datenbank speichern, (mit NodeJS) wie?
Hallo. Ich möchte den Input eines HTML-Formulars mit Hilfe von Node in eine SQLite Datenbank einfügen.
Mein index.html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Hello world!</title>
<script src="sqlite.js"></script>
</head>
<body>
<form action="/team_name_url/" method="post">
<label for="team_name">Enter name: </label>
<input id="team_name" type="text" name="name_field" value="Default name for team.">
<input type="submit" value="OK">
</form>
</body>
</html>
Mein sqlite.js:
const sqlite3 = require('sqlite3');
const db = new sqlite3.Database('./sqlite.db');
let express = require('express');
let app = express();
const bodyParser= require('body-parser');
app.use(bodyParser.urlencoded({extended:true}));
app.post('/',(req,res)=>{
let placeName = req.body.PlaceName;
});
db.run(`INSERT INTO places (id, name, coords) VALUES(4, ${placeName}, '1234, 5678');`, function(err) {
if (err) {
return console.log(err.message);
}
console.log(`A row has been inserted with rowid ${this.lastID}`);
});
db.close();
2 Antworten
Node.JS läuft auf Serverseite. Du bindest da gerade das Skript, welches mit der Datenbank kommunizieren soll, in ein HTML-Dokument ein, welches clientseitig interpretiert wird.
Suche dir besser ein Tutorial heraus, mit dem du in das Thema einsteigen kannst. So wie dieses: https://www.sqlitetutorial.net/sqlite-nodejs/.
Vielleicht wäre auch nochmal ein Node.JS-Tutorial im Vorfeld gar nicht schlecht. Schau bspw. hier: https://nodejs.dev/learn. Bezüglich Formularverarbeitung (mit Express.js) kannst du diese Seite (https://developer.mozilla.org/en-US/docs/Learn/Server-side/Express_Nodejs/forms) nutzen.
Gehe schrittweise vor:
Schau erst einmal, dass du eine simple Node.js-Anwendung zum Laufen bekommst (die vielleicht nur Hello zurückgibt o.ä.).
Der Folgeschritt wäre es, die Formulardaten verarbeiten zu können. Hierfür braucht der Code aus deiner sqlite.js ja nur noch etwas angepasst werden. Statt PlaceName müsstest du name_field aus dem Request Body auslesen.
Auch die Route ist noch falsch. Wenn dein Formular Daten gegen /team_name_url sendet, muss auch diese POST-Route abgefangen werden.
Die beiden Zeilen:
const bodyParser= require('body-parser');
app.use(bodyParser.urlencoded({extended:true}));
können übrigens raus und gegen
app.use(express.urlencoded());
ersetzt werden. Express hat bereits einen eigenen Parser integriert.
Für Express gibt es übrigenes auch Validator-Hilfe, lies dazu hier (nur gib dein HTML-Formular nicht über res.send aus, so wie dort gezeigt, sondern verwende stattdessen express.static oder zumindest sendFile).
Zum dritten Schritt (SQLite-Kommunikation) wiederum steht genügend auf der oben verlinkten Seite.
Da mir das gerade noch auffällt: Es wäre besser, wenn du deine Koordinaten in einzelne Tabellenspalten mit dem richtigen Typ (INTEGER) speichern würdest, statt als kompletten String. Dies verschafft dir mehr Flexibilität (in späterer Formatierung oder bei Aktionen zur Filterung oder Bearbeitung der Koordinaten).
Du willst also für jeden sichtbar den Zugriff auf deine Datenbank zeigen ?
Keine gute Idee.
Damit ist ja Tür und Tor geöffnet.
Besser du benutzt PHP das unsichtbar auf dem Server läuft.
Vielleicht wäre es sinnvoll du schaust dir mal eine Seite an wie
https://www.w3schools.com/sql/default.asp
Lerst dort erst den Umgang mit SQL und z.b. Serverseeitiger Programmierung z.b. PHP
Und auch mal ein Tutorial über HTML
Wenn du dann verstanden hast was der Unterschied von Client und Server und Datensicherheit dann schau dir nochmal an was du da gerade versuchst.
SQLite & Node Tutorial habe ich schon gemacht. Ich habe jetzt auch das Express Formularverarbeitungs-Tutorial angeguckt, checke aber immer noch nicht, wie ich das genau anstellen sollte.