def index(req): req.content_type = "text/html" sess = Session.Session(req) login = req.form['login'] password = req.form['password'] conn = fonctions.connexionBD() cur = conn.cursor() sql = "select * from util where login=%s and mdp =%s;" cur.execute(sql, ( login, password, )) data = cur.fetchall() if not data: sess.delete() req.write( fonctions.codeHTML( "Erreur !", """<h3>Identifiants invalides</h3>""" + fonctions.lien( 'form-connexion.py', "Retour à la page de connexion"))) else: id_util = data[0] sess["login"] = login sess["id_util"] = id_util[0] sess.save() req.write( fonctions.codeHTML( "Connexion", """<h3>Identifiants valides</h3>""" + fonctions.lien('menu.py', "Menu du site")))
def index(req): req.content_type = "text/html" sess = Session.Session(req) #recup session redirectionSiNonConnecte(req, sess) #redirige si la session est nouvelle id_util = sess["id_util"] #recup l'id_util #start sql check que l'util est root conn = connexionBD() cur = conn.cursor() sql = "select login from util where util.id_util={} and util.login='******';".format( id_util, 'root') cur.execute(sql) conn.commit() data = cur.fetchall() if not data: req.write( codeHTML( "Erreur !", """ <h3><g>Seul l'utilisateur root a le droit d'ajouter un utilisateur.</g></h3> """ + lien('menu.py', "Retour au menu"))) #end sql check util root else: req.write( codeHTML( "Ajout d'un utilisateur", """ <p><b>Ajout d'un utilisateur</b></p> <form method="POST" action="ajout-util.py" onsubmit="return isItGood()"> <table> <tr> <td>Login</td> <td><input type="text" name="login" id="login" onkeyup="alreadyUsed()"/></td> <td></td> </tr> <tr> <td>Mot de passe</td> <td><input type="password" name="motdepasse" id="motdepasse"/></td> <td></td> </tr> <tr> <td>Confirmation du mot de passe</td> <td><input type="password" name="conf" id="conf"/></td> <td></td> </tr> </table> <div id="used"></div> </form> """ + lien("menu.py", "Retour au menu principal") + """ <script src="form-ajout-util.js"></script> """))
def index(req): req.content_type = "text/html" req.write( fonctions.codeHTML( "Formulaire de connexion", """<form action="connexion.py" method="post"> <table> <tr> <th></th> <th></th> <th></th> </tr> <tr> <td> <label for="login">Login</label> </td> <td> <input type="text" id="login" name="login" /> </td> <td></td> </tr> <tr> <td> <label for="password">Mot de passe</label> </td> <td> <input type="password" id="password" name="password" /> </td> <td> <input type="submit" value="Valider" /> </td> </tr> </table> </form> """))
def index(req): req.content_type="text/html" sess = Session.Session(req) fonctions.redirectionSiNonConnecte(req,sess) req.write(fonctions.codeHTML("Ajout d'un contact",""" <p><b>Ajout d'un contact</b></p> <form method="POST" action="ajout.py" onsubmit="return isItGood()"> <table> <tr> <td>Nom</td> <td><input type="text" name="nom" id="nom"/></td> <td></td> </tr> <tr> <td>Adresse</td> <td><input type="text" name="adresse"/></td> <td></td> </tr> <tr> <td>Email</td> <td><input type="text" name="email" id="email"/></td> <td></td> </tr> <tr> <td>Téléphone</td> <td><input type="text" name="telephone" id="telephone"/></td> <td><input type="submit" value="Valider" id="submit"></td> </tr> </table> </form> """ + fonctions.lien("menu.py","Retour au menu principal") + """ <script src="form-ajout.js"></script> """))
def index(req): req.content_type = "text/html" sess = Session.Session(req) #recup session redirectionSiNonConnecte(req, sess) #redirige si la session est nouvelle id_util = sess["id_util"] #recup l'id_util login = req.form['login'] mdp = req.form['motdepasse'] conn = connexionBD() cur = conn.cursor() sql = "insert into util (login,mdp) values (%s,%s);" cur.execute(sql, ( login, mdp, )) conn.commit() conn.close() req.write( codeHTML( "", """ <p><b>Nouvel utilisateur</b></p> <p>""" + login + """ a bien été ajouté</p> """ + lien('menu.py', "Retour au menu principal")))
def index(req): req.content_type = "text/html" sess = Session.Session(req) fonctions.redirectionSiNonConnecte(req, sess) req.write( fonctions.codeHTML( "Liste des contacts", """<b> Liste des contacts </b> <br/> Rechercher un nom : <input type="text" onkeyup="chargementContacts(this.value)"/> <div id="liste"></div>""" + fonctions.lien("menu.py", "Retour au menu")) + """ <script> function chargementContacts(value) { if(value == null){ value = ""; } var xhttp = new XMLHttpRequest(); xhttp.onreadystatechange = function() { if (this.readyState == 4 && this.status == 200) { document.getElementById("liste").innerHTML = this.responseText; } }; xhttp.open("GET", "affiche-liste.py?nom=" + value, true); xhttp.send(); } chargementContacts(); </script>""")
def index(req): req.content_type = "text/html" sess = Session.Session(req) redirectionSiNonConnecte(req, sess) id_util = sess["id_util"] id_contact = req.form["id_contact"] conn = connexionBD() cur = conn.cursor() sql = "select * from contact where id_contact={} and id_util={};".format( id_contact, id_util) cur.execute(sql) conn.commit() data = cur.fetchall() if not data: req.write( codeHTML( "Erreur !", """ <p>Ce contact ne vous appartient pas.</p> """ + lien('menu.py', "Retour au menu"))) conn.close() else: sql = "delete from contact where id_contact={};".format(id_contact) cur.execute(sql) conn.commit() conn.close() util.redirect(req, "liste.py")
def index(req): req.content_type = "text/html" _cursor.execute("SELECT mdp, id_util FROM UTIL WHERE login = %s", (req.form['login'], )) query = _cursor.fetchone() if (query == None or req.form["password"] != query[0]): req.write( fonctions.codeHTML( "Erreur", "Login ou mot de passe incorrects. " + fonctions.lien("form-connexion.py", "Connexion"))) else: sess = Session.Session(req) sess["id_util"] = query[1] sess["login"] = req.form['login'] sess.save() req.write( fonctions.codeHTML( "Connexion réussie", fonctions.lien("menu.py", "Connexion réussie, allez au menu")))
def index(req): req.content_type = "text/html" sess = Session.Session(req) fonctions.redirectionSiNonConnecte(req, sess) _db = fonctions.connexionBD() _cursor = _db.cursor() _cursor.execute("SELECT * FROM CONTACT WHERE id_util = %s AND id_contact = %s", (sess['id_util'], req.form["id_contact"],)) user = _cursor.fetchone() if user is None: req.write(fonctions.codeHTML("Erreur utilisateur", "Utilisateur introuvable. <br/> " + fonctions.lien('menu.py','Retour au menu principal'))) else: table_contents = "<tr> <td>Nom</td> <td>" + user[1] + "</td></tr>" if user[2]: table_contents += "<tr> <td>Email</td> <td>" + fonctions.lien("mailto:" + user[2], user[2]) + "</td></tr>" if user[3]: table_contents += "<tr> <td>Téléphone</td> <td>" + user[3] + "</td></tr>" if user[4]: table_contents += "<tr> <td>Adresse</td> <td>" + user[4] + "</td></tr>" if user[5] != 0 and user[6] != 0: map_contents = """ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/leaflet/1.5.1/leaflet.css" /> <div id="carte" style="width: 600px; height: 400px;"> </div> <script src="https://cdnjs.cloudflare.com/ajax/libs/leaflet/1.5.1/leaflet.js"></script> <script> var map = L.map("carte"); map.setView({lat: """ + str(user[5]) + """, lon: """ + str(user[6]) + """}, 10); url = 'http://{s}.tile.osm.org/{z}/{x}/{y}.png'; var layer = L.tileLayer(url); layer.addTo(map); var m = L.marker ({lat: """ + str(user[5]) + """ , lon: """ + str(user[6]) + """}); m.addTo(map); </script>""" else: map_contents = "<p>Adresse du contact introuvable</p>" req.write(fonctions.codeHTML("Fiche d'un contact","""<b> Fiche d'un contact </b> <br/> <table>""" + table_contents + """</table>""" + map_contents + fonctions.lien("suppression.py?id_contact=" + str(user[0]) ,"Supprimer l'utilisateur") + "<br/>" + fonctions.lien("menu.py","Retour au menu principal"))) _db.close()
def index(req): session = Session.Session(req) # fonctions.redirectionSiNonConnecte(req, session) req.content_type = "text/html" body = """<h1>Menu principal</h1> <br/>Vous êtes connecté en tant que <b>""" """</b>. <ul> <li><a href="form-ajout.py">Ajouter un contact</a></li> <li><a href="liste.py">Liste des contacts</a></li> <li><a href="deconnexion.py">Déconexion</a></li> </ul>""" req.write(fonctions.codeHTML("Menu principal", body))
def index(req): req.content_type="text/html" sess = Session.Session(req) #recup session redirectionSiNonConnecte(req,sess) #redirige si la session est nouvelle id_util=sess["id_util"] #recup l'id_util #sqlstart conn = connexionBD() cur = conn.cursor() sql = "select * from contact where id_util={} and latitude is not null and longitude is not null;".format(id_util) #ajout des deux (lon et lat) pour être sur si jamais il y a un bug avec un seul des deux renseigné cur.execute(sql) conn.commit() data = cur.fetchall() conn.close() #sqlend #mapstart maps=""" <link rel="stylesheet" href="leaflet.css"/> <script src="leaflet.js"></script> <div id="carte" style="width: 600px; height: 400px"></div> <script> var map = L.map("carte"); map.setView({lat: 0 , lon: 0}, 1); url="https://{s}.tile.openstreetmap.org" + "/{z}/{x}/{y}.png"; var layer = L.tileLayer(url); layer.addTo(map); """#initialise tous ce qui ne changera pas #debut prise donné par contact for i in range(len(data)): lat=str(data[i][5]) lon=str(data[i][6]) id_contact=str(data[i][0]) nom=str(data[i][1]) maps+=""" var m = L.marker({lat: """ + lat + """, lon: """ + lon + """}); m.addTo(map); m.bindPopup('<a href="fiche.py?id_contact=""" + id_contact + """">""" + nom + """</a>'); """ #fin prise donné par contact maps+="</script>" #mapsend req.write(codeHTML("Localisation",""" <p><b>Localisation des contacts</b></p> <br/> """ + maps + lien("menu.py","Retour au menu")))
def index(req): req.content_type = "text/html" sess = Session.Session(req) fonctions.redirectionSiNonConnecte(req, sess) _db = fonctions.connexionBD() _cursor = _db.cursor() _cursor.execute( "SELECT longitude, latitude, nom, id_contact FROM CONTACT WHERE id_util = %s", (sess['id_util'], )) markers = "" _db.close() req.write( fonctions.codeHTML( "Localisation", """ <label for="search">Rechercher un contact :</label> <input type="text" id="search" onkeyup="chargementMarqueurs(this.value)"/> <br><br> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/leaflet/1.5.1/leaflet.css" /> <div id="carte" style="width: 600px; height: 400px;"> </div> <script src="https://cdnjs.cloudflare.com/ajax/libs/leaflet/1.5.1/leaflet.js"></script> <script> var map = L.map("carte"); url = 'http://{s}.tile.osm.org/{z}/{x}/{y}.png'; var layer = L.tileLayer(url); var layerGroup = L.layerGroup().addTo(map); layer.addTo(map); chargementMarqueurs(); function chargementMarqueurs(filter) { if(filter == null){ filter = ""; } var xhttp = new XMLHttpRequest(); xhttp.onreadystatechange = function() { if (this.readyState == 4 && this.status == 200) { eval(this.responseText); } }; xhttp.open("GET", "affiche-markers.py?nom=" + filter, true); xhttp.send(); } </script> """))
def index(req): req.content_type = "text/html" sess=Session.Session(req) fonctions.redirectionSiNonConnecte(req, sess) _db=fonctions.connexionBD() _cursor=_db.cursor() _cursor.execute("INSERT INTO UTIL (login, mdp) VALUES (%s , %s)", (req.form['login'], req.form['password'],)) _db.commit() req.write(fonctions.codeHTML("Menu principal",""" <b> Nouvel utilisateur </b> <br/> <p>""" + req.form['login'] + """ a bien été ajouté à la base de données. </p> """ + fonctions.lien('menu.py','Retour au menu principal'))) _db.close()
def index(req): req.content_type = "text/html" sess = Session.Session(req) redirectionSiNonConnecte(req, sess) req.write( codeHTML( "Liste des contacts", """ <p><b>Liste des contacts</b></p> <b>Rechercher un nom :</b> <input type="text" id="nom" onkeyup="cherche()"/><br/> <div id="liste"></div> """ + lien("menu.py", "Retour au menu") + """ <script src="liste.js"></script> """))
def index(req): req.content_type = "text/html" titre = "exo10" body = """ <h4>Ajout d'un contact</h4> <form action="ajout.py" method="post"> <label for="nom">Nom</label> <input name="nom" type="text" maxlenght="100" /><br /> <label for="adresse">Adresse</label> <input name="adresse" type="text" maxlenght="100" /><br /> <label for="email">Email</label> <input name="email" type"text" maxlenght="100" /><br /> <label for="tel">Téléphone</label> <input name="tel" type="text" maxlenght="10" /> <input type="submit" value="valider" /><br /> <a href="menu.py">Retour au menu principal</a> """ req.write(fonctions.codeHTML(titre, body))
def index(req): req.content_type = "text/html" sess = Session.Session(req) fonctions.redirectionSiNonConnecte(req, sess) if sess['id_util'] == 1: create_util = "<li>" + fonctions.lien('form-ajout-util.py', 'Ajout d\'un utilisateur') + "</li>" else: create_util = "" req.write(fonctions.codeHTML("Menu principal","""<b> Menu principal </b> <br/> Vous êtes connecté en tant que <b> """ + sess['login'] + """. </b><ul> <li>"""+fonctions.lien('form-ajout.py', 'Ajout d\'un contact')+"""</li> <li>"""+fonctions.lien('liste.py', 'Liste de contacts')+"""</li> <li>"""+fonctions.lien('localisation.py', 'Carte des contacts')+"""</li> """ + create_util + """ <li>"""+fonctions.lien('deconnexion.py', 'Déconnexion')+"""</li> </ul> """))
def index(req): req.content_type = "text/html" sess = Session.Session(req) fonctions.redirectionSiNonConnecte(req, sess) nom = req.form['nom'] adresse = req.form['adresse'] email = req.form['email'] telephone = req.form['telephone'] id_util = sess["id_util"] conn = fonctions.connexionBD() cur = conn.cursor() #debut geocodage # geo=geocodage.geocodageIUTV(adresse) #decommentez pour utilisation IUT geo = geocodage.geocodage(adresse) #decommentez pour utilisation home if not geo: lat = None lon = None else: lat = geo[0] lon = geo[1] #fin geocodage sql = "insert into contact (nom,email,tel,adresse,latitude,longitude,id_util) values (%s,%s,%s,%s,%s,%s,%s);" cur.execute(sql, ( nom, email, telephone, adresse, lat, lon, id_util, )) conn.commit() conn.close() req.write( fonctions.codeHTML( "Nouveau contact", """ <p><b>Nouveau contact</b></p> <p>""" + nom + """ a bien été ajouté à vos contacts</p> """ + fonctions.lien('menu.py', "Retour au menu principal")))
def index(req): req.content_type = "text/html" sess = Session.Session(req) redirectionSiNonConnecte(req, sess) req.write( codeHTML( "Menu principal", """ <p><b>Menu principal</b><br/> Vous êtes connecté en tant que <b>""" + sess["login"] + """</b> </p> <ul> <li>""" + lien("form-ajout.py", "Ajout d'un contact") + """</li> <li>""" + lien("liste.py", "Liste des contacts") + """</li> <li>""" + lien("localisation.py", "Localisation des contacts") + """</li> <li>""" + lien("form-ajout-util.py", "Ajout d'un utilisateur") + """</li> <li>""" + lien("deconnexion.py", "Déconnexion") + """</li> </ul> """))
def index(req): req.content_type = "text/html" sess = Session.Session(req) fonctions.redirectionSiNonConnecte(req, sess) _db = fonctions.connexionBD() _cursor = _db.cursor() _cursor.execute( "DELETE FROM CONTACT WHERE id_util = %s AND id_contact = %s", ( sess['id_util'], req.form["id_contact"], )) if _cursor.rowcount == 0: req.write( fonctions.codeHTML( "Erreur utilisateur", "Utilisateur introuvable. <br/> " + fonctions.lien('menu.py', 'Retour au menu principal'))) else: _db.commit() util.redirect(req, 'liste.py') _db.close()
def index(req): req.content_type = "text/html" req.write( fonctions.codeHTML( "Page de connexion", """ <h2>Veuillez vous connectez pour accéder à nos services.</h2> <form method="POST" action="connexion.py"> <table> <tr> <td>Login</td> <td><input type="text" name="login"/></td> <td></td> </tr> <tr> <td>Mot de passe</td> <td><input type="password" name="password"/></td> <td><input type="submit" value="Valider"/></td> </tr> </table> </form> """))
def index(req): req.content_type = "text/html" sess=Session.Session(req) fonctions.redirectionSiNonConnecte(req, sess) _db=fonctions.connexionBD() _cursor=_db.cursor() geocode = geocodage.geocodage(req.form['address']) if geocode != None: lat = geocode[0] lon = geocode[1] else: lat = 0 lon = 0 _cursor.execute("INSERT INTO CONTACT (id_util, nom, email, tel, adresse, latitude, longitude) VALUES (%s , %s, %s, %s, %s, %s, %s)", (sess['id_util'],req.form['nom'], req.form['email'], req.form['telephone'], req.form['address'], lat, lon)) _db.commit() req.write(fonctions.codeHTML("Menu principal",""" <b> Nouveau contact </b> <br/> <p>""" + req.form['nom'] + """ a bien été ajouté à vos contacts. </p> """ + fonctions.lien('menu.py','Retour au menu principal'))) _db.close()
def index(req): req.content_type = "text/html" titre = "exo5" corps = "<form action=\"test.html\" method=\"post\"><input name=\"login\" type=\"text\" maxlength=\"20\" placeholder=\"Login\" /><input name=\"pwd\" type=\"password\" maxlength=\"20\" placeholder=\"Password\" /><input type=\"submit\"</form><a href=\"menu.py\">Redirection manuelle</a>" req.write(fonctions.codeHTML(titre, corps))
def index(req): req.content_type = "text/html" sess = Session.Session(req) fonctions.redirectionSiNonConnecte(req, sess) fonctions.redirectionSiNonRoot(req, sess) req.write( fonctions.codeHTML( "Ajout d'un utilisateur", """<b>Ajout d'un utilisateur</b> <br/> <form action="ajout-util.py" method="post" name="form" onsubmit="return validate()"> <table> <tr> <th></th> <th></th> <th></th> </tr> <tr> <td> <label for="login">Login</label> </td> <td> <input type="text" id="login" name="login" onblur="checkLogin(this.value)"/> </td> <td></td> </tr> <tr> <td> <label for="password">Mot de passe</label> </td> <td> <input type="password" id="password" name="password" /> </td> <td> </td> </tr> <tr> <td> <label for="password-again">Confirmation du mot de passe</label> </td> <td> <input type="password" id="password-again" name="password-again" /> </td> <td> <input type="submit" value="Valider" /> </td> </tr> </table> </form> <script> function validate(){ var login = document.forms["form"]["login"].value; if (login == "") { alert("Le login ne doit pas être vide !"); return false; } var password = document.forms["form"]["password"].value; if (password.length < 8) { alert("Le mot de passe doit faire plus de 8 caractères"); return false; } var password_again = document.forms["form"]["password-again"].value; if (password != password_again) { alert("Les mots de passe ne correspondent pas"); return false; } var login = document.forms["form"]["login"]; if(login.getAttribute("available") == "no"){ alert("Nom d'utilisateur déjà existant"); return false; } } function checkLogin(login){ var xhttp = new XMLHttpRequest(); xhttp.onreadystatechange = function() { if (this.readyState == 4 && this.status == 200) { response = JSON.parse(this.responseText); if(response.taken){ document.forms["form"]["login"].setAttribute("available", "no"); } else { document.forms["form"]["login"].setAttribute("available", "yes"); } } }; xhttp.open("GET", "verif-util.py?login="******""" + fonctions.lien('menu.py', 'Retour au menu principal')))
def index(req): req.content_type = "text/html" sess = Session.Session(req) fonctions.redirectionSiNonConnecte(req, sess) req.write( fonctions.codeHTML( "Ajout d'un contact", """<b>Ajout d'un contact</b> <br/> <form action="ajout.py" method="post" name="form" onsubmit="return validate()"> <table> <tr> <th></th> <th></th> <th></th> </tr> <tr> <td> <label for="nom">Nom</label> </td> <td> <input type="text" id="nom" name="nom" /> </td> <td></td> </tr> <tr> <td> <label for="address">Adresse</label> </td> <td> <input type="address" id="address" name="address" /> </td> <td> </td> </tr> <tr> <td> <label for="email">Mail</label> </td> <td> <input type="email" id="email" name="email" /> </td> <td> </td> </tr> <tr> <td> <label for="telephone">Téléphone</label> </td> <td> <input type="telephone" id="telephone" name="telephone" /> </td> <td> <input type="submit" value="Valider" /> </td> </tr> </table> </form> <script> function validate(){ var nom = document.forms["form"]["nom"].value; if (nom == "") { alert("Le nom ne doit pas être vide !"); return false; } var email = document.forms["form"]["email"].value; if(email.indexOf("@") == "-1"){ alert("L'email doit contenir un @ !"); return false; } else { var pos = email.indexOf("@") } if(email.indexOf(".", pos) == "-1"){ alert("L'email doit contenir un . !"); return false; } var address = document.forms["form"]["address"].value; if (address == "") { alert("L'adresse ne doit pas être vide !"); return false; } var telephone = document.forms["form"]["telephone"].value; if(! /^\d+$/.test(telephone)){ alert("Le numéro de téléphone doit être composé de chiffres"); return false; } if(telephone.length != 10){ alert("Le numéro de téléphone doit être une suite de 10 chiffres"); return false; } } </script> """ + fonctions.lien('menu.py', 'Retour au menu principal')))
def index(req): req.content_type = "text/html" req.write( fonctions.codeHTML("Mon premier script", "Voici mon premier script de web dynamique!"))
def index(req): req.content_type = "text/html" sess = Session.Session(req) #recup session redirectionSiNonConnecte(req, sess) #redirige si la session est nouvelle id_util = sess["id_util"] #recup l'id_util id_contact = req.form["id_contact"] #recup l'id_contact #debut sql conn = connexionBD() cur = conn.cursor() sql = "select * from contact where id_contact={} and id_util={};".format( id_contact, id_util) cur.execute(sql) conn.commit() data = cur.fetchall() conn.close() #fin sql if not data: req.write( codeHTML( "Erreur !", """ <p>Ce contact ne vous appartient pas.</p> """ + lien('menu.py', "Retour au menu"))) #si le resultat de la req sql est vide #alors le contact n'appartient pas à l'utilisateur connecté else: #début prise info dans les var data = data[0] nom = str(data[1]) email = str(data[2]) tel = str(data[3]) addr = str(data[4]) lat = str(data[5]) lon = str(data[6]) #fin prise infos content = "" #ou tout le surplus va être ajouté (en plus du nom) if email != "": content += """ <tr> <td>Email</td> <td>""" + lien("mailto:" + email, email) + """</td> </tr> """ #check si l'email est donné if tel != "": content += """ <tr> <td>Telephone</td> <td>""" + tel + """</td> </tr> """ #check si le num est donné if addr != "": content += """ <tr> <td>Adresse</td> <td>""" + addr + """</td> </tr> """ #check si l'addresse est donné #debut affiche map if addr == "": #si pas d'adresse maps = "<b>Adresse non précisé</b>" elif lat == "None" and lon == "None": #si le geocodage ne renvoit rien maps = "<b>Emplacement indisponible</b>" else: #créé la map avec lat et lon de geocodage maps = """ <link rel="stylesheet" href="leaflet.css"/> <script src="leaflet.js"></script> <div id="carte" style="width: 600px; height: 400px"></div> <script> var map = L.map("carte"); map.setView({lat: """ + lat + """, lon: """ + lon + """}, 10); url="https://{s}.tile.openstreetmap.org" + "/{z}/{x}/{y}.png"; var layer = L.tileLayer(url); layer.addTo(map); var m = L.marker({lat: """ + lat + """, lon: """ + lon + """}); m.addTo(map); </script> """ #fin affichage maps #la suite écrit la page avec les différentes variables données req.write( codeHTML( "Fiche d'un contact", """ <b>Fiche d'un contact</b><br/> <table> <tr> <td>Nom</td> <td>""" + nom + """</td> </tr> """ + content + """ </table> """ + maps + """ <br/> """ + lien("supression.py?id_contact=" + id_contact, "Supression du contact") + """ <br/> """ + lien("menu.py", "Retour au menu")))