close Warning: Can't synchronize with repository "keplertools" (/srv/svn/keplertools does not appear to be a Subversion repository.). Look in the Trac log for more information.

Opened 7 years ago

Closed 7 years ago

#3419 closed Defekt (erledigt)

Eingabe der Schülernummer im Anmeldeformular schlägt fehl

Reported by: Rüdiger Kupper Owned by: bau
Priority: unverzüglich erledigen Milestone: Schuljahr 2019/20
Component: Ich kenne die passende Komponente nicht. Severity: beeinträchtigt den Unterricht vieler Lehrer
Keywords: Cc:

Description (last modified by Rüdiger Kupper)

Wählt man die Option "Schülernummer" aus und gibt eine Nummer ein, erhält man beim Absenden des Formulars die Fehlermeldung:

Mysql-Abfragefehler [SELECT Rufname, Name FROM logindata WHERE Schülernummer=<Nummer>;] (1300/Invalid utf8 character string: 'Sch\xFClernr')

Offenbar machst Du eine SQL-Abfrage mit einem Feld namens "Schülernummer" und der Umlaut macht Probleme. Kannst Du danach schauen?

Change History (6)

comment:1 by Rüdiger Kupper, 7 years ago

Description: modified (diff)

comment:2 by Rüdiger Kupper, 7 years ago

Owner: changed from netzwerk to bau
Status: new → assigned

comment:3 by Rüdiger Kupper, 7 years ago

Das Feld in der Datenbank logindata heißt tatsächlich "Schülernummer" mit "ü" – ziemlich gefährlich …

comment:4 by Rüdiger Kupper, 7 years ago

\xFC scheint der UTF-16-Code für "ü" zu sein.
Der UTF-8-Code müsste "\xc3\xbc" lauten.

comment:5 by Rüdiger Kupper, 7 years ago

Das Problem könnte mit der Codierung der Datei "index.php" zu tun haben:

# file index.php
index.php: PHP script, ISO-8859 text

Die Datei ist im ISO-8859-Format, der SQL-Server erwartet aber offenbar UTF-8-Strings.
(Mensch, Jens, man verwendet doch keine Umlaute im Code!)

Vielleicht gelingt es mir, das umzucodieren.

comment:6 by Rüdiger Kupper, 7 years ago

Resolution: → erledigt
Status: assigned → closed

Gelöst: Ich habe in index.php die Zeile

$erg=$C->get1QueryResult("SELECT Rufname, Name FROM logindata WHERE Schülernr=".$C->escape($_POST["SGeschwister"])."\
;");

ersetzt durch

$erg=$C->get1QueryResult("SELECT Rufname, Name FROM logindata WHERE Sch\xc3\xbclernr=".$C->escape($_POST["SGeschwister"])."\
;");

Jetzt läuft die Abfrage durch.

Sicherheitstests:

  • Schülernummer von baumgaert1 wird akzeptiert
  • Schülernummer "9999999999999999999999999" liefert Fehlermeldung, das diese Nummer nicht existiert
  • Kleines Problem: Man kann das Feld Schülernummer leer lassen, ohne eine Fehlermeldung zu erhalten. Laut Deinem Code müsste es sich da einfach beschweren. Da bastele ich jetzt aber nicht dran rum.
Note: See TracTickets for help on using tickets.