Formulaire html/python/sql

Bonsoir,

Je dois rendre un projet où l'on doit seulement utiliser python, html/css et une base de donnée SQL. Malheureusement, je n'arrive pas à enregistrer les donnée soumises par l'utilisateur dans ma base de donnée.

Voici mon code python :

import sqlite3

connexion = sqlite3.connect('repertoire.db')

cursor = connexion.cursor()
cursor.execute("""
    CREATE TABLE IF NOT EXISTS REPERT(
    Nom TEXT,
    Prenom TEXT,
    Numero INT,
    PRIMARY KEY (Numero))
    """)
connexion.commit()


from flask import Flask, render_template, request
app = Flask(__name__)



@app.route('/')
def index():
    return render_template("index.html")

@app.route('/EnrgNum', methods = ['GET'])
def EnrgNum():
    return render_template("EnrgNum.html")
    Nom = request.form['Nom'],
    Prenom = request.form['Prenom'],
    Numero = request.form['Numero']
    print('Nom :',Nom,'prenom :', Prenom, 'num :',Numero)
    data =(Nom,Prenom,Numero)
    cursor.execute("INSERT INTO REPERT(Nom,Prenom,Numero) VALUES(?,?,?)", data)
    connexion.commit()
    cursor.close()

app.run(debug=True)

connexion.close()

voici mon code html :

<!doctype html>
<html lang="fr">
<head>
    <meta charset="utf-8">
    <title>Repertoire</title>
    <link rel="stylesheet" href="{{url_for('static',filename='EnrgNum.css')}}">
    <link href="http://fonts.cdnfonts.com/css/jk-abode" rel="stylesheet">

</head>
<body>
    <div class="container">
        <form>
            <form action="http://localhost:5000/resultat" method="get">
            <h1>Enregistrer un numero</h1>
            <input type="text" placeholder="Nom: Doe" name="Nom" required><br>
            <input type="text" placeholder="Prenom: John" name="Prenom" required><br>
            <input type="tel" placeholder="Numéro de télephone: 00-00-00-00-00" pattern="[0-9]{2}-[0-9]{2}-[0-9]{2}-[0-9]{2}-[0-9]{2}" name="Numero" required><br>
            <p><div class="Envoyer"><input type="submit" value="Envoyer"></div>
            <p><br><a href="{{ url_for('index')}}">Retour vers la première page</a></p>

        </form>
    </div>

</body>
</html>

Merci d'avance !

5 réponses

  1. Modérateur

    Bonjour,

    Je n'ai jamais fait de flask, mais quelque chose me paraît étrange dans ton code.

    En effet, ta fonction EnrgNum retourne à la ligne 27, et donc tu n'évalues jamais la ligne 33 responsable de l'insertion en base d'un nouvel enregistrement. Je suppose donc que la ligne 27 devrait être déplacée à la ligne 36.

    Bonne chance

    1. Modérateur

      Hello

      J'ai pensé la même chose .. mais comme il nous a indiqué que son print affichait bien les bonnes données...... je n'ai pas poussé plus loin.

  2. Modérateur

    Essaie d'ajouter un bloc try catch pour voir les éventuels erreurs.

    Un truc du genre : (en remplaçant par tes variables bien entendu)

        try:
            cur.execute(sql_query, sql_data)
            con.commit()
        except sqlite3.Error as er:
            print('SQLite error: %s' % (' '.join(er.args)))
            print("Exception class is: ", er.__class__)
            print('SQLite traceback: ')
            exc_type, exc_value, exc_tb = sys.exc_info()
            print(traceback.format_exception(exc_type, exc_value, exc_tb))
        

    1. Ah oui j’avais pas vu pour le form en trop

      et pour le print oui il affiche les informations ;)

      1. Modérateur

        Bonjour

        Pour commencer, tu as une balise form en trop dans ton code HTML.

        Ensuite, peux-tu nous dire si ton print affiche les informations de ton formulaire ou pas ?