WinFuture-Forum.de: HTML Fehlermeldung ausgeben. - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
Seite 1 von 1

HTML Fehlermeldung ausgeben. Ich möchte bei besimmten Zeicheneingabe ,eine Fehlermeldung ausgegeben


#1 Mitglied ist offline   Booster123 

  • Gruppe: aktive Mitglieder
  • Beiträge: 23
  • Beigetreten: 04. November 19
  • Reputation: 0

geschrieben 10. Dezember 2019 - 14:28

Hallöchen liebe Community,

ich habe eine HTML, auf der ich Dienstautos buchen kann. Dafür gebe ich in eine Maske alle erforderlichen Daten, wie Name und Datum der Buchung ein. Die Maske hat einen Punkt der sich "Maßnahme" nennt, wenn man dort in die Zeile etwas eingibt was ein ' beinhaltet und ich den Rest ausfülle und abspeichere, zeigt mir die Seite eine erfolgreiche Buchung an. Gehe ich jedoch auf die Liste der gebuchten Autos wird dieses nicht angezeigt. Gebe ich jedoch anstatt ein ' gleich zwei hintereinander an, so speichert er es mir ab.


Meine Frage ist nun, ist es möglich, wenn jemand ein Auto buchen möchte und in der Spalte "Maßnahme" etwas mit einem ' eingibt das er es entweder speichert oder mir eine Fehlermeldung ausgibt.

Ich bedanke mich jetzt schonmal für eure Hilfe.

Mit freundlichen Grüßen

Booster123!
0

Anzeige



#2 Mitglied ist offline   Stef4n 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.216
  • Beigetreten: 20. August 18
  • Reputation: 250
  • Geschlecht:Männlich
  • Wohnort:RLP ~Mainz
  • Interessen:pc

geschrieben 10. Dezember 2019 - 14:49

Welche Logik wendest du denn in deiner HTML Datei an? Außer HTML Code für die Formular Ausgabe muss ja noch irgendwas Code mäßiges passieren, damit die Buchung für das Dienstauto ausgeführt wird. Javascript? PHP? Und damit wäre es ja dann auch möglich eine Abfrage und auch Ausgabe deines Maßnahmen Feldes zu generieren.
... aber bitte vorher ein Backup machen! ;-)
0

#3 Mitglied ist offline   Holger_N 

  • Gruppe: aktive Mitglieder
  • Beiträge: 5.111
  • Beigetreten: 11. September 10
  • Reputation: 458
  • Geschlecht:Männlich

geschrieben 10. Dezember 2019 - 19:54

Vermutlich sorgt das ' dafür, dass der Query beim Datenbankeintrag unterbrochen wird und so nicht funktioniert. Die Meldung über die Buchung ist nur an den Aufruf des Scripts gekoppelt, unabhängig davon ob überhaupt etwas erfolgreich in die Datenbank eingetragen wurde. Ich würde die Maßnahmen in eine extra Datenbanktabelle schreiben und in der eigentlichen Verabeitung nur mit den IDs aus dieser Tabelle Arbeiten und die Bezeichnungen nur für die Ausgabe verwenden.

Ansonsten könnte man übergangsweise versuchen, die ' durch ' zu ersetzen.

Dieser Beitrag wurde von Holger_N bearbeitet: 10. Dezember 2019 - 19:54

Bauernregel: Regnets mächtig im April, passiert irgendwas, was sich auf April reimt.
0

#4 Mitglied ist offline   Holger_N 

  • Gruppe: aktive Mitglieder
  • Beiträge: 5.111
  • Beigetreten: 11. September 10
  • Reputation: 458
  • Geschlecht:Männlich

geschrieben 11. Dezember 2019 - 01:03

Jetzt sehe ich gerade, dass ein Teil meiner Antwort nicht so ganz passt. Was sind denn das für Maßnahmen? Lassen die sich auf einen gewissen Umfang eingrenzen? Dann kann man die über eine Auswahlliste wählen lassen und hat gar kein Problem mit fehlerhaften Eingaben.

Ansonsten müsste das mit ' aber funktionieren. Einfach im String ' durch ' ersetzen lassen und mal prüfen (lassen) ob da nicht eine kleine Sichegheitslücke eingebaut ist, falls sich der Query tatsächlich wie vermutet manipulieren lässt.
Bauernregel: Regnets mächtig im April, passiert irgendwas, was sich auf April reimt.
0

#5 Mitglied ist offline   Gispelmob 

  • Gruppe: aktive Mitglieder
  • Beiträge: 2.591
  • Beigetreten: 14. August 15
  • Reputation: 392

geschrieben 11. Dezember 2019 - 04:29

Wie Stef4n schon schrieb, muss hinter dem HTML (was die Oberfläche erzeugt) noch Code in Javascript, PHP oder sonstwas stehen der für die Bearbeitung und die Funktion zuständigt ist. In dem Code müssen die Eingaben auf gültige Eingaben geprüft werden (z.B. ob in ein Datumsfeld auch ein gültiges Datum eingegeben wurde) und erst wenn alle Eingaben stimmen darf gespeichert werden.
AMD Ryzen 9 5950X, Asus ROG Strix X570-F Gaming, 32GB Corsair DDR4-3200, Asus Geforce GTX 3060 12GB, Creative Sound Blaster AE-7, 240GB SSD, 500GB SSD, 3x 1TB SSD, Win11 Home, 4x Acer G246HL Bbid, Logitech MX518 Gaming Mouse, Logitech G440 Mousepad, Logitech K120 Keyboard, Razer Tiamat 7.1 V2 Headset, Creative Inspire 5.1 5300 Soundsystem
0

#6 Mitglied ist offline   Booster123 

  • Gruppe: aktive Mitglieder
  • Beiträge: 23
  • Beigetreten: 04. November 19
  • Reputation: 0

geschrieben 11. Dezember 2019 - 10:25

Guten Morgen und vielen Dank für eure Antworten.

Ja der Code ist mit PHP geschrieben. Richtig ich gehe davon aus das durch das Hochkomma ein neuer String entsteht bzw die Datei denkt, dass nun ein String entsteht.

Wie implementiere bzw ersetze ich denn " ' durch ' " ?

Bei Maßnahme wird eingetragen, wofür man das Dienstfahrzeug nutzt, also zB "Michael's Lehrgang". Es muss also ein manuell eintragbares Feld bleiben, wobei ich nicht verlangen kann das jeder bei einem ' dann ' eingeben muss.

Ist es denn möglich es in die PHP Datei zu implementieren, sodass er nicht denkt das es ein String ist, sondern es als normales Sonderzeichen behandelt und übernimmt?


Vielen Dank Leute.



MfG

Booster123!
0

#7 Mitglied ist offline   Stef4n 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.216
  • Beigetreten: 20. August 18
  • Reputation: 250
  • Geschlecht:Männlich
  • Wohnort:RLP ~Mainz
  • Interessen:pc

geschrieben 11. Dezember 2019 - 12:17

Du kannst ja in php eine Abfrage machen ob im eingegebenen String des Feldes Maßnahme ein ' Zeichen drin ist und ersetzt es entsprechend mit dem was drinstehen soll.

Ich bin in PHP etwas eingerostet, aber hiermit sollte es zu machen sein:
https://www.php.net/...str-replace.php

Bzw. mit einer anderen Funktion suchst du das ' Zeichen und gibst dem Anwender eine Meldung aus, dass es sich um ein nicht genehmigtes Zeichen in der Eingabe handelt.

Dieser Beitrag wurde von Stef4n bearbeitet: 11. Dezember 2019 - 12:18

... aber bitte vorher ein Backup machen! ;-)
0

#8 Mitglied ist offline   Holger_N 

  • Gruppe: aktive Mitglieder
  • Beiträge: 5.111
  • Beigetreten: 11. September 10
  • Reputation: 458
  • Geschlecht:Männlich

geschrieben 11. Dezember 2019 - 13:59

Jo also entweder ersetzen mit

str_replace('\'',''',$string);



wobei $string die zu verarbeitende Zeichenkette ist, also da die Variable rein muß, die im richtigen Script verwendet wird oder mit

if 
    (
    strstr($string, '\'', true)
    )
    {
     // Fehlerabarbeitung
    }
    else
    {
    // Datenbankeintrag
    }



nur nach einem Apostroph suchen und entscheiden, ob ein Eintrag gemacht oder ein Fehler ausgegeben wird.

Aber wie gesagt, dass das Apostroph das Ganze beeinflusst, lässt darauf schließen, dass möglicherweise der vom Benutzer eingegebene Text, 1:1 in den Query übernommen wird. Das wäre nicht gut und eröffnet Manipulationsmöglichkeiten.
Bauernregel: Regnets mächtig im April, passiert irgendwas, was sich auf April reimt.
0

#9 Mitglied ist offline   Booster123 

  • Gruppe: aktive Mitglieder
  • Beiträge: 23
  • Beigetreten: 04. November 19
  • Reputation: 0

geschrieben 13. Dezember 2019 - 11:56

Vielen Lieben Dank für die schnellen Antworten. :D

Ich werde mich mal mit euren Ideen auseinandersetzen und schreibe sobald es geklappt hat :D
0

#10 Mitglied ist offline   Gispelmob 

  • Gruppe: aktive Mitglieder
  • Beiträge: 2.591
  • Beigetreten: 14. August 15
  • Reputation: 392

geschrieben 13. Dezember 2019 - 15:39

Weder str_replace noch strstr sind zu Prüfung von gültigen Formaten sinnvoll, denn man müsste dann auf alle verbotenen Strings prüfen. Es gibt für den Befehl filter_var verschiedene Filter mit denen man eingegebene Strings direkt auf ein gültiges Format prüfen kann.
AMD Ryzen 9 5950X, Asus ROG Strix X570-F Gaming, 32GB Corsair DDR4-3200, Asus Geforce GTX 3060 12GB, Creative Sound Blaster AE-7, 240GB SSD, 500GB SSD, 3x 1TB SSD, Win11 Home, 4x Acer G246HL Bbid, Logitech MX518 Gaming Mouse, Logitech G440 Mousepad, Logitech K120 Keyboard, Razer Tiamat 7.1 V2 Headset, Creative Inspire 5.1 5300 Soundsystem
0

#11 Mitglied ist offline   Holger_N 

  • Gruppe: aktive Mitglieder
  • Beiträge: 5.111
  • Beigetreten: 11. September 10
  • Reputation: 458
  • Geschlecht:Männlich

geschrieben 13. Dezember 2019 - 15:58

Um ungültige Formate, bzw. eine Fehlermeldung ginge es ja nur, wenn keine Möglichkeit bestünde, ein Apostroph zu verwenden. Da es durch eine Maskierung aber möglich ist und ein Apostroph, so es denn tatsächlich dorthin gehört (nicht wie im Beispiel), dann ist es ja kein ungültiges Format, sondern kann im Text vorkommen.
Bauernregel: Regnets mächtig im April, passiert irgendwas, was sich auf April reimt.
0

#12 Mitglied ist offline   Gispelmob 

  • Gruppe: aktive Mitglieder
  • Beiträge: 2.591
  • Beigetreten: 14. August 15
  • Reputation: 392

geschrieben 13. Dezember 2019 - 19:45

Der Apostroph in einem String kann/wird ein Problem in einem Datenbankquery erzeugen. Entweder wird der Qeury dann gar nicht oder nur teilweise ausgeführt. Das liegt einfach daran dass der Apostroph Teil des Syntax eines Queries ist und im Query den Anfang und das Ende von Strings angibt.

Beispiel:

INSERT INTO dummytable (column1, column2) VALUES ('nichts', 'garnichts');

Beinhaltet also der String selbst einen Apostroph der nicht entsprechend maskiert wurde, dann geht die DB davon aus, dass der Befehl an dem Punkt zu Ende ist und der Query erzeugt entweder einen Fehler oder produziert schlimmeres.

Beispiel:

INSERT INTO dummytable (column1, column2) VALUES ('nichts', 'gar'nichts');
(hier wäre der Befehl nach gar zu Ende)

Wenn man ' und " unbedingt als Eingabe erlauben will, dann gibt es verschiedene Möglichkeiten:

- man kann bereits während der Eingabe den Apostroph doppelt schreiben: '' Das wird dann in der DB zu einem ' verlassen würd ich mich auf die Methode aber nicht und ob es auch bei " funktioniert kann ich nicht sagen

- man kann den eingegeben String escapen bevor er in den Query übernommen wird, um zu escapen gibt es den PHP Befehl addslashes oder man nutzt mysqli_real_escape_string für eine sql Datenbank wie mysql, mariadb etc.

- man kann ' und " im String durch DB Befehle wie CHAR oder ASCII maskieren

- es gibt weitere Befehle direkt für Datenbanken wie STRING_ESCAPE oder MYSQL_QUOTE

Insgesamt hat man mehrere Möglichkeiten einen String mit ' oder " in Datenbanken zu schreiben ohne dabei einen QUERY Fehler zu erzeugen.

Dieser Beitrag wurde von Gispelmob bearbeitet: 13. Dezember 2019 - 19:51

AMD Ryzen 9 5950X, Asus ROG Strix X570-F Gaming, 32GB Corsair DDR4-3200, Asus Geforce GTX 3060 12GB, Creative Sound Blaster AE-7, 240GB SSD, 500GB SSD, 3x 1TB SSD, Win11 Home, 4x Acer G246HL Bbid, Logitech MX518 Gaming Mouse, Logitech G440 Mousepad, Logitech K120 Keyboard, Razer Tiamat 7.1 V2 Headset, Creative Inspire 5.1 5300 Soundsystem
0

#13 Mitglied ist offline   Holger_N 

  • Gruppe: aktive Mitglieder
  • Beiträge: 5.111
  • Beigetreten: 11. September 10
  • Reputation: 458
  • Geschlecht:Männlich

geschrieben 14. Dezember 2019 - 16:50

Man kann auch einfach die Variablen per bindValue an den Query übergeben. Da es aber darum geht, dass Hinz und Kunz die Eingaben machen, würde ich gar keine Eingabe erlauben, sondern einen Pool mit Maßnahmen anlegen, aus dem ausgewählt werden kann. Dann kommt es gar nicht erst zu Problemen.
Bauernregel: Regnets mächtig im April, passiert irgendwas, was sich auf April reimt.
0

#14 Mitglied ist offline   Booster123 

  • Gruppe: aktive Mitglieder
  • Beiträge: 23
  • Beigetreten: 04. November 19
  • Reputation: 0

geschrieben 09. Januar 2020 - 15:28

Moin Moin,

vielen Dank für eure zahlreichen Antworten.
Ehrlich gesagt war ich die letzten Wochen krank und habe mich nicht mehr an das Projekt setzten können. Dies wird ab nächste Woche jedoch wieder der Fall sein. Bis jetzt konnte ich auch leider nichts mit euren Antworten anfangen. Sobald ich mich daran gesetzt habe, werde ich euch mein Ergebnis mitteilen.

vielen dank noch einmal


Gruß

Booster 123!
0

Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0