Re: Suchfunktion
Verfasst: Montag 28. Januar 2019, 09:47
@Sirius3: Wobei man noch überlegen müsste ob man möchte das Suchbegriffe im Browserverlauf landen und verlinkbar sind.
Seit 2002 Diskussionen rund um die Programmiersprache Python
https://www.python-forum.de/
Bin mir nicht sicher ob das hier die Antwortfunktion ist ,:). Danke dir für die Antwort, wir konnten es jetzt in unsere Code einfügen und es funktioniertSirius3 hat geschrieben: Sonntag 27. Januar 2019, 22:21 @_verzweifelter_Tim: der Code hat eindeutig zu viele Leerzeilen, als dass das noch lesbar wäre.
Bei einem Verbindungsfehler ist `cursor` nicht definiert und fliegt im finally-Block mit einem NameError auf die Nase.
Statt zweimal die Suche durchzuführen und beim ersten Mal nur die Anzahl abzufragen, würde man besser gleich die richtigen Daten holen und falls die Ergebnissmenge leer ist, weiß man ja auch, dass da kein Ergebnis war.
`fetchone` liefert übrigens ein Tuple, da ist es unnötig, das in eine Liste umzuwandeln.
Benutze niemals SELECT *, sondern gib konkret die Feldnamen an, die Du eigentlich willst, dann muß man auch nicht wissen, dass in Feldnummer 22 irgendwas steht (Eine Tabelle mit so vielen Feldern ist nicht wirklich gut).
Und wenn Du mehr als ein Ergebnis anzeigen willst, dann frag auch mehr als ein Ergebnis ab (fetchall / fetchmany) und schreib Dein Template so, dass es mit einer Liste umgehen kann.Code: Alles auswählen
anfrage = request.form['inputSuche'] if not anfrage: return render_template('suche.html', ausgabe='Geben Sie einen Namen ein') cursor.execute('SELECT nickname, vorname, nachname, interessen, email FROM `schueler` WHERE Name = (%s) OR Nickname =(%s) OR Vorname = (%s);', (anfrage, anfrage, anfrage)) ergebnisse = cursor.fetchall() if not ergebnisse: return render_template('suche.html', ausgabe='Es gibt keinen Schüler mit diesem Namen') return render_template('Suchen.html', ergebnisse=ergebnisse)
Code: Alles auswählen
@app.route('/Suchen', methods = ['POST'])
def Suchen():
try:
# My SQL Verbidnung Aufbauen
conn = mysql.connect()
cursor = conn.cursor()
anfrage = request.form['inputSuche']
if not anfrage:
return render_template('suche.html', ausgabe='Geben Sie einen Namen ein')
#Durch diese Abfrage kommt die Anzahl aller Nutzer mit dem eigegebenen Nickname, im besten Fall 0>
cursor.execute(
'SELECT nickname, vorname, name FROM `schueler` WHERE Name = (%s) OR Nickname =(%s) OR Vorname = (%s);',
(anfrage, anfrage, anfrage))
#Denk daran fetchone = nur ein Datensatz, fetchall = alle mit dem Nickname
ergebnisse = cursor.fetchall()
#hier wird überprüft ob überhaupt ein Nutzer gefunden wurde
if not ergebnisse:
return render_template('suche.html', ausgabe='Es gibt keinen Schüler mit diesem Namen')
return render_template('Suchen.html', ergebnisse=ergebnisse)
finally:
cursor.close()
conn.close()Code: Alles auswählen
{% extends 'layout.html'%}
{% block body%}
<div>
<h1>Suchergebnis:</h1>
<h5><font color="red">{{ ausgabe }}</font></h5>
{{ ergebnisse }}
-----------------------------------------So wird des Ausgegeben: (('', 'Unbekannt', 'Unbeaknnt'), ('', 'Unbekannt1', 'Unbekannt_Nachnaem'))---------------
----------------------------------- Ganz gut wäre es wenn man die Einzelnen Werte so ausgeben könnte wir hier unten------------------------------------
<table>
<tr>
<td width="20%">Nickname:</td>
<td>{{ nickname }}</td>
</tr>
<tr>
<td>Vorname:</td>
<td>{{ vorname }}</td>
</tr>
<tr>
<td>Nachname:</td>
<td>{{ name }}</td>
</tr>
------------------------------Also das bei nickname, der Nickname erscheint und bei Name die Namen usw.------------------------
</table>
</div>
{% endblock %} [code]
danke nochmals das Ihr uns hilft :)Code: Alles auswählen
{% for nickname in ergebnisse %}
<li>{% block loop_nickname scoped %}{{ nickname }}{% endblock %}</li>
{% endfor %}
[code]
Des ist das was wir bisher haben
Hier bei wird es alles untereinander aufgelistet aber die Kommas und "" sind leider immer noch da.
Danke nochmals das Ihr uns versucht dabei zu helfen. Ich hätte früher in diesem Forum schreiben sollen, dann hätte ich mir über einem Monat arbeit sparen können ,:)Code: Alles auswählen
@app.route('/Suchennn', methods = ['POST'])
def Suchennn():
try:
# My SQL Verbidnung Aufbauen
conn = mysql.connect()
cursor = conn.cursor()
anfrage = request.form['inputSuche']
if not anfrage:
return render_template('suche.html', ausgabe='Geben Sie einen Namen ein')
#Durch diese Abfrage kommt die Anzahl aller Nutzer mit dem eigegebenen Nickname, im besten Fall 0>
cursor.execute(
'SELECT nickname, vorname, name FROM `schueler` WHERE Name = (%s) OR Nickname =(%s) OR Vorname = (%s);',
(anfrage, anfrage, anfrage))
#Denk daran fetchone = nur ein Datensatz, fetchall = alle mit dem Nickname
ergebnisse = list(cursor.fetchall())
#hier wird überprüft ob überhaupt ein Nutzer gefunden wurde
if not ergebnisse:
return render_template('suche.html', ausgabe='Es gibt keinen Schüler mit diesem Namen')
return render_template('Suchen.html', ergebnisse=ergebnisse)
finally:
cursor.close()
conn.close()
Code: Alles auswählen
<div>
<h1>Suchergebnis:</h1>
<h5><font color="red">{{ ausgabe }}</font></h5>
{{ ergebnisse }}
<table>
<tr>
<td width="20%">Nickname:</td>
<td>{{ nickname }}</td>
</tr>
<tr>
<td>Vorname:</td>
<td>{{ vorname }}</td>
</tr>
<tr>
<td>Nachname:</td>
<td>{{ name }}</td>
</tr>
</table>
</div>