I want to create a program to registrar guests at a office. The thing I get stuck on is sending the input from the registration form to the database.
When I runt my program I get the following error:
Traceback (most recent call last):
File "/home/ronny/Desktop/registratieinc/app.py", line 59, in <module>
main()
File "/home/ronny/Desktop/registratieinc/app.py", line 52, in main
create_table(conn, sql_create_guests_table)
File "/home/ronny/Desktop/registratieinc/app.py", line 32, in create_table
c.execute(sql,guests)
sqlite3.ProgrammingError: Incorrect number of bindings supplied. The current statement uses 4, and there are 402 supplied.
My Python code:
from flask import Flask, render_template, url_for, request, redirect
from datetime import datetime
import sqlite3
from sqlite3 import Error
app = Flask(__name__)
# hier maak ik de db aan en een connectie
def create_connection(db_file):
connection = None;
try:
conn = sqlite3.connect(db_file)
print(sqlite3.version)
except Error as e:
print(e)
return conn
# hier roep ik de functie voor de db aan en maak ik een db file "gast.db"
if __name__ == '__main__':
create_connection("gast.db")
# hier maak ik de table aan voor de db (moet ik nog aanpassen voor sqlite3)
def create_table(conn, guests):
sql = """ INSERT INTO guests(voor_naam,achter_naam,bedrijfs_naam,datum)
VALUES(?,?,?,?) """
c = conn.cursor()
c.execute(sql,guests)
return cur.lastrowid
def main():
database = r"gast.db"
sql_create_guests_table = """ CREATE TABLE IF NOT EXISTS guests (
id integer PRIMARY KEY,
voor_naam text NOT NULL,
achter_naam text NOT NULL,
bedrijfs_naam text NOT NULL,
datum date NOT NULL
); """
conn = create_connection(database)
if conn is not None:
# maak gast table
create_table(conn, sql_create_guests_table)
else:
print("Error! cannot create the database connection.")
if __name__ == '__main__':
main()
# hier zorg ik ervoor dat
@app.route('/')
def index():
return render_template("index.html")
# hier zorg ik ervoor dat de input uit het formulier naar de db gaat
@app.route('/my_form', methods=['POST'])
def my_form():
if request.method == 'POST':
c = conn.cursor()
guest_vnaam = request.form.get('Voornaam')
guest_anaam = request.form.get('Achternaam')
guest_cnaam = request.form.get('Bedrijfsnaam')
guest_datum = request.form.get('Datum')
try:
sql = ("INSERT INTO databasename.tablename (columnName,columnName,columnName,columnName Ci) VALUES (%s, %s, %s, %s)")
c.execute(sql,(guest_vnaam, guest_anaam, guest_cnaam, guest_datum))
conn.commit()
#or "conn.commit()" (one of the two)
return redirect('/')
except:
return 'Er ging iets fout met het opslaan van uw gegevens'
# hier run ik de app
if __name__ == '__main__':
app.run(debug=True)
And my HTML code:
{% block body %}
<form action="{{ url_for('my_form') }}" method="POST">
<div class="container">
<h1>Gasten registratie</h1>
<p>Vul dit formulier in om te registreren</p>
<hr>
<label for="First-Name"><b>Voornaam</b></label>
<input type="text" id="First-Name" placeholder="Vul hier uw voornaam in" name="Voornaam" required>
<label for="Last-Name"><b>Achternaam</b></label>
<input type="text" id="Last-Name" placeholder="Vul hier uw achternaam in" name="Achternaam" required>
<label for="Company-name"><b>Bedrijfsnaam</b></label>
<input type="text" id="Company-name" placeholder="Vul hier uw bedrijfsnaam in" name="Bedrijfsnaam" required>
<label for="Date"><b>Datum</b></label>
<input type="date" id="Date" placeholder="Selecteer de Datum" name="Datum" required />
<hr>
<p>In het kader van onze ISAE certificering registreren wij uw gegevens.</p>
<p>Wij verwerken uw gegevens volgends de regels van het AVG.</p>
<button type="submit" class="registerbtn">Registreren</button>
</div>
</form>
{% endblock %}
If someone can help me, that'll be great.
Thanks in Advance.
Kind regards, Ronny
Here is a working copy of your Python Code : I also stylized this app for you and used CSS Grid. I also retrieve a guest listing when you register a new guest, to enhance this app for you. If you like please give me credit for answer. Thanks for your question.
from flask import Flask, render_template, url_for, request, redirect
from datetime import datetime
import sqlite3
from sqlite3 import Error
app = Flask(__name__)
# hier maak ik de db aan en een connectie
def insertGuest(guest_vnaam, guest_anaam, guest_cnaam, guest_datum):
database = "gast.db"
tablename = "guests"
con = sqlite3.connect(database)
cur = con.cursor()
cur.execute("INSERT INTO guests (voor_naam,achter_naam,bedrijfs_naam,datum) VALUES (?,?,?,?)", (guest_vnaam, guest_anaam, guest_cnaam, guest_datum))
#sql = ("INSERT INTO database.tablename (columnName,columnName,columnName,columnName Ci) VALUES (%s, %s, %s, %s)")
#cur.execute(sql,(guest_vnaam, guest_anaam, guest_cnaam, guest_datum))
con.commit()
con.close()
def retrieveGuests():
database = "gast.db"
tablename = "guests"
con = sqlite3.connect(database)
cur = con.cursor()
cur.execute("SELECT * FROM guests")
guests = cur.fetchall()
con.close()
return guests
def create_connection(db_file):
connection = None;
try:
conn = sqlite3.connect(db_file, check_same_thread=False)
#conn = sqlite3.connect(db_file)
print(sqlite3.version)
except Error as e:
print(e)
return conn
# hier roep ik de functie voor de db aan en maak ik een db file "gast.db"
if __name__ == '__main__':
conn = create_connection("gast.db")
c = conn.cursor()
# hier maak ik de table aan voor de db (moet ik nog aanpassen voor sqlite3)
def create_table(conn, guests):
v1="test1"
v2="test2"
v3="test3"
v4="dateTest4"
c = conn.cursor()
c.execute("CREATE TABLE IF NOT EXISTS guests (id INTEGER PRIMARY KEY, voor_naam TEXT NOT NULL,achter_naam TEXT NOT NULL,bedrijfs_naam TEXT NOT NULL,datum TEXT NOT NULL)")
conn.commit()
#c.close()
#uncomment out the following lines of code if you want to insert test data
#c.execute("INSERT INTO guests(voor_naam,achter_naam,bedrijfs_naam,datum) VALUES (?,?,?,?)",(v1,v2,v3,v4))
#conn.commit()
#conn.close()
return c.lastrowid
def main():
database = r"gast.db"
conn = create_connection(database)
c = conn.cursor()
sql_create_guests_table = """ CREATE TABLE IF NOT EXISTS guests (
id INTEGER PRIMARY KEY,
voor_naam TEXT NOT NULL,
achter_naam TEXT NOT NULL,
bedrijfs_naam TEXT NOT NULL,
datum TEXT NOT NULL
); """
if conn is not None:
# maak gast table
create_table(conn, sql_create_guests_table)
else:
print("Error! cannot create the database connection.")
if __name__ == '__main__':
main()
@app.route('/')
def index():
return render_template("index.html")
@app.route('/my_form', methods=['POST', 'GET'])
def my_form():
if request.method=='POST':
guest_vnaam = request.form['Voornaam']
guest_anaam = request.form['Achternaam']
guest_cnaam = request.form['Bedrijfsnaam']
guest_datum = request.form['Datum']
try:
insertGuest(guest_vnaam, guest_anaam, guest_cnaam, guest_datum)
guests = retrieveGuests()
return render_template("index.html",guests = guests)
#redirect('/')
except:
return 'Er ging iets fout met het opslaan van uw gegevens'
# hier run ik de app
if __name__ == '__main__':
app.run(debug=True)
Here is a retake of your Index.html also I put this file under a templates directory. Flask will locate it here.
<style>
body{
width:95%;
}
input{
margin-top: 15;
margin-bottom: 10;
}
h1 h2 h3 h4{
font-size: 26px;
font-weight: 700;
color: #4c4c4c;
text-align: center;
padding-top: 10px;
margin-top: 5px;
margin-bottom: 5px;
}
.grid-container {
display: grid;
grid-template-columns: repeat(6, 1fr);
grid-auto-rows: minmax(100px, auto);
grid-gap: 1rem;
grid-template-areas:
'header header header header header header'
'main main main right right right '
'footer footer footer footer footer footer';
background-color: rgb(75, 84, 91);
padding: 10px;
border-radius: 5%;
}
.grid-container > .item1 {
grid-area: header;
background-color: rgba(239, 241, 74, 0.85);
text-align: center;
padding: 10px 10px ;
font-size: 1em;
box-shadow: 1px 1px 1px grey;
border: solid 2px rgb(0, 0, 0);
border-radius: 5%;
/* height:15rem; */
}
.grid-container > .item2 {
grid-area: main;
background-color: rgba(187, 231, 172, 0.85);
text-align: center;
padding: 10px 0;
font-size: 1em;
box-shadow: 1px 1px 1px grey;
border: solid 2px rgb(0, 0, 0);
border-radius: 5%;
/* height:35rem; */
}
.grid-container > .item3 {
grid-area: right;
background-color: rgba(55, 238, 199, 0.85);
text-align: center;
/* margin: auto auto auto auto; */
padding: 10px 0;
font-size: 1em;
box-shadow: 1px 1px 1px grey;
border: solid 2px black;
border-radius: 5%;
/* height:35rem; */
}
.grid-container > .item4 {
grid-area: footer;
background-color: rgba(26, 104, 238, 0.85);
text-align: center;
/* margin: auto auto auto auto; */
padding: 10px 0;
font-size: 1em;
-webkit-border-radius: 8px/7px;
-moz-border-radius: 8px/7px;
border-radius: 8px/7px;
-webkit-box-shadow: 1px 1px 1px rgb(144, 102, 102);
-moz-box-shadow: 1px 1px 1px grey;
box-shadow: 1px 1px 1px grey;
border: solid 2px black;
color:white;
/* height:5rem; */
}
.Glist{
background-color: grey;
color:white;
border-radius: 5%;
}
table, th, td {
border: 1px solid black;
}
</style>
{% block body %}
<form action="{{ url_for('my_form') }}" method="POST">
<div class="grid-container">
<div class="item1">
<h1 style="text-align:center">Gasten registratie</h1>
<p style="text-align:center">Vul dit formulier in om te registreren</p>
<!-- <hr> -->
</div>
<div class="item2">
<label for="First-Name"><b>Voornaam : </b></label>
<input type="text" id="First-Name" placeholder="Vul hier uw voornaam in" name="Voornaam" required>
<label for="Last-Name"><b>Achternaam : </b></label>
<input type="text" id="Last-Name" placeholder="Vul hier uw achternaam in" name="Achternaam" required>
</div>
<div class="item3">
<label for="Company-name"><b>Bedrijfsnaa : </b></label>
<input type="text" id="Company-name" placeholder="Vul hier uw bedrijfsnaam in" name="Bedrijfsnaam" required>
<label for="Date"><b>Datum : </b></label>
<input type="date" id="Date" placeholder="Selecteer de Datum" name="Datum" required />
</div>
<!-- <hr> -->
<div class="item4">
<p>In het kader van onze ISAE certificering registreren wij uw gegevens.</p>
<p>Wij verwerken uw gegevens volgends de regels van het AVG.</p>
<button type="submit" class="registerbtn">Registreren</button>
</div>
</div>
</form>
<div class="Glist" >
{%if guests%}
<div class="guests" style="text-align:center;">
<h2>Guests List</h2>
<table style="width:100%;">
{%for guest in guests%}
<tr>
<td>{{guest[0]}}</td><td>{{guest[1]}}</td><td>{{guest[2]}}</td><td>{{guest[3]}}</td><td>{{guest[4]}}</td>
</tr>
{%endfor%}
</table>
</div>
{%endif%}
</div>
{% endblock %}
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.