tkrebs / ep3-bs

Online booking system for courts
http://bs.hbsys.de/
MIT License
183 stars 108 forks source link

Buchung mit Mitspielern - Exception bei wahrscheinlich "ungültigen" Namen #437

Open Dristian opened 3 years ago

Dristian commented 3 years ago

Hallo zusammen,

erstmal vielen Dank für das tolle Open Source Projekt!

Ich habe derzeit lediglich ein Problem. Beim Buchen von >1 Mitspielern kommt bei mir folgende Fehlermeldung, wenn der Mitspielername wahrscheinlich zu kurz oder nur aus einen Namen besteht (ohne leerzeichen). Kann man den Fehler bereits vorher abfangen oder ggf. konfigurieren?

Getestet mit PHP 7.4 sowie EP3 1.7

Danke Grüße

Exception details Type RuntimeException Mitteilung Die <b>vollständigen Vor- und Nachnamen</b> der anderen Spieler sind erforderlich File C:\xampp\htdocs\booking\module\Square\src\Square\Controller\BookingController.php:140 Stack trace

#0 C:\xampp\htdocs\booking\vendor\zendframework\zend-mvc\src\Controller\AbstractActionController.php(84): Square\Controller\BookingController->confirmationAction()
#1 [internal function]: Zend\Mvc\Controller\AbstractActionController->onDispatch(Object(Zend\Mvc\MvcEvent))
#2 C:\xampp\htdocs\booking\vendor\zendframework\zend-eventmanager\src\EventManager.php(490): call_user_func(Array, Object(Zend\Mvc\MvcEvent))
#3 C:\xampp\htdocs\booking\vendor\zendframework\zend-eventmanager\src\EventManager.php(260): Zend\EventManager\EventManager->triggerListeners('dispatch', Object(Zend\Mvc\MvcEvent), Object(Closure))
#4 C:\xampp\htdocs\booking\vendor\zendframework\zend-mvc\src\Controller\AbstractController.php(116): Zend\EventManager\EventManager->triggerEventUntil(Object(Closure), Object(Zend\Mvc\MvcEvent))
#5 C:\xampp\htdocs\booking\vendor\zendframework\zend-mvc\src\DispatchListener.php(118): Zend\Mvc\Controller\AbstractController->dispatch(Object(Zend\Http\PhpEnvironment\Request), Object(Zend\Http\PhpEnvironment\Response))
#6 [internal function]: Zend\Mvc\DispatchListener->onDispatch(Object(Zend\Mvc\MvcEvent))
#7 C:\xampp\htdocs\booking\vendor\zendframework\zend-eventmanager\src\EventManager.php(490): call_user_func(Array, Object(Zend\Mvc\MvcEvent))
#8 C:\xampp\htdocs\booking\vendor\zendframework\zend-eventmanager\src\EventManager.php(260): Zend\EventManager\EventManager->triggerListeners('dispatch', Object(Zend\Mvc\MvcEvent), Object(Closure))
#9 C:\xampp\htdocs\booking\vendor\zendframework\zend-mvc\src\Application.php(340): Zend\EventManager\EventManager->triggerEventUntil(Object(Closure), Object(Zend\Mvc\MvcEvent))
#10 C:\xampp\htdocs\booking\public\index.php(66): Zend\Mvc\Application->run()
#11 {main}
cbits68 commented 3 years ago

Das ist ja kein Fehler, sondern ein Feature ;-) Wegen der Corona Pandemie mach es ja gerade Sinn Vor und Zunamen des Mitspielers anzugeben, damit Kontakte auch nachvollziehbar sind. Ich hatte unter der 1.6.4 noch das Problem, dass einige Mitglieder nur den Vornamen des Mitspielers angegeben haben. Dann habe ich mich immer gefragt, welche der z Sabine haben denn nun gespielt :-) mit der 1.7.0 schein eine Prüfung in der Abfrage der Mitspieler eingebaut zu sein. Wahrscheinlich ob es mindestens 2 Buchstabenfolgen durch Leerzeichen getrennt sind. Ich denke aber Du kannst im Code die zwingende Angabe weiterer Spieler auch deaktivieren, oder aber auch den Prüfmechanismus, denn der war ja in der 1.6.4 auch noch nicht da.

Dristian commented 3 years ago

Danke für die schnelle Antwort.

Den Mechanismus kann ich auch als Feature soweit nachvollziehen ;). So wie es aussieht, müssen es mind. 5 Buchstaben sein und ein Leerzeichen bzw. eben Vor. & Nachname. Die frage ist, ob man dies schon bereits bei der Eingabe validieren kann. Der Fehler ist in der Darstellung für den Normalverbraucher erstmal abschreckend.

cbits68 commented 3 years ago

Während der Eingabe ist bei einer Webapplikation imho nicht möglich. Wenn Du in einem Shop System Daten eingeben musst, dann kann das auch erst geprüft werden, wenn Du das Formular mit dem Bestätigen Button abschickst. Ich finde dieses Feature gut! Das erspart mir künftig sicher einige Mails an Mitglieder, bitte doch, wie in den Buchungsregeln angegeben, den vollen Vor- und Zunamen der Mitspieler anzugeben ;-) Ich werde aber in den Buchungsregeln noch einen Hinweis aufnehmen, dass es nun im System validiert wird und sonst keine Buchung möglich ist (obwohl es ja auch in der Fehlermeldung schon steht).

Shineson1001 commented 3 years ago

Hi @Dristian, prüf' mal die Einstellung in der Datei /config/init.php https://github.com/tkrebs/ep3-bs/blob/139e2165f812f3463592d21670d2e00131bf6773/config/init.php.dist#L13 .. und setze den Wert auf false: define('EP3_BS_DEV_TAG', false); ... evtl. gestaltet sich die Fehlermeldung dann benutzerfreundlicher.

Kleiner Nachtrag: Ich habe die Passage (foreach Schleife) tatsächlich bei mir auskommentiert. https://github.com/tkrebs/ep3-bs/blob/139e2165f812f3463592d21670d2e00131bf6773/module/Square/src/Square/Controller/BookingController.php#L138

grafik

Dristian commented 3 years ago

Danke, das ist schon mal deutlich schöner.

Genau, die Passage hatte ich auch "gefunden" gehabt. Ich denke zwar weiterhin, dass eine Validation direkt bei der Eingabe möglich wäre und sinnvoll, da der Button "weiter zur Übersicht" ja auch erst Sichtbar wird wenn etwas eingegeben wird. Aber da bin ich grundlegend zu weit von PHP entfernt.

Vielleicht finde ich am Wochenende eine Möglichkeit. Falls jemanden bis dahin etwas weiß, sehr gerne. Ansonsten kann ich ja vielleicht was dazu beitragen.

Bereits vielen Dank für die Schönheitskorrektur.

Shineson1001 commented 3 years ago

Hi, den Feldinhalt kann man auch während der Eingabe oder beim Verlassen des Feldes prüfen lassen. Da die Seite jQuery nutzt, sollte die Prüfung schon mit wenigen Zeilen Code gegessen sein. Evtl. kommentiere ich meine Änderungen wieder ein und signalisiere dem Benutzer die unvollständige Eingabe direkt nach dem Verlassen des Feldes.

cbits68 commented 3 years ago

Hi Shineson, klingt interessant, war mir gar nicht so bewusst. Da unsere Vereins Homepage unter Joomla auch mit jQuery arbeitet, hast Du natürlich recht, dass man hier auch die Validierung bereits während der Eingabe durchführen kann. In Joomla funktioniert das bei mir allerdings auch nur, wenn man aus dem Eingabefeld mit Maus oder TAB bzw. Return heraus geht, also meist in das nächste Eingabefeld wechselt. Hier wird man aber wahrscheinlich den Namen des Mitspielers (zumindest bei einem) eingeben und dann gleich auf den verbindlich Buchen Button klicken. Vielleicht wäre es dann sinnvoll zurück zum Buchungsfenster zu wechseln mit einem Hinweis, dass Vor und Zuname korrekt eingegeben werden müssen, anstatt eine Fehlermeldung auszugeben und die buchende Person muss mit dem Buchungsprozess von vorn beginnen.

Shineson1001 commented 3 years ago

Hier wäre mal ein billiges Beispiel mit jQuery: https://jsfiddle.net/tn35g01r/

mjmpeace commented 3 years ago

Ich habe das jetzt auch erstmal rausgenommen. Es hat bei mir nicht funktioniert. Egal wie ich Namen und Telefonnummer eingetragen habe, die Fehlermeldung kam trotzdem. Kann jemand eine funktionierende Version posten oder erklären, was bei mir falsch gelaufen ist?

cbits68 commented 3 years ago

Es wird auf Vor und Nachnamen (>=5) geprüft, die dann logischerweise nicht aus Zahlen, sondern Buchstaben bestehen müssen, die mit einem Leerzeichen getrennt sein müssen. Ich denke wenn Du da die Telefonnummer einträgst, dann akzeptiert der Prüfmechanismus das nicht. Probiere mal mit nur mit Vor- und Nachnamen, dann sollte das gehen.. Bei uns im Verein passt das ganz gut, da wir von allen Mitgliedern ja die Kontaktdaten haben und daher die Telefonnummer ja nicht bei der Buchung benötigen. Wenn das bei Euch aber notwendig ist, würde ich die Prüffunktion auch erstmal aus kommentieren.

mjmpeace commented 3 years ago

Das komische ist folgendes: Ich habe Vor- und Nachname korrekt eingestellt. Hüpfe in das Telefonfeld und gebe das wie gewünscht die Nummer ein - alles richtig - aber es wird nicht akzeptiert. Das bedeutet für mich, das ist in der Prüfroutine etwas falsch, wenn man einstellt, Name und Telefonnummer müssen angegeben werden. Bitte kann das mal gecheckt werden vom Entwickler. Version ist die aktuelle 1.7

cbits68 commented 3 years ago

Wo habt Ihr denn bei der Buchung das Telefonfeld her? Das gibt es bei mir nicht. Habt Ihr das zusätzlich in den Code eingebaut?

cbits68 commented 3 years ago

Sorry, habe es gefunden bei den Platz Einstellungen. Ich habe da derzeit nur "nach Namen der anderen Spieler (verpflichtend)" eingestellt, daher gibt es bei mir auch das Problem nicht.

mjmpeace commented 3 years ago

Wenn ich die Prüfung komplett rausnehme, dann kann ich weiter anklicken ohne Namen einzutragen. Bei der der Version 1.63 ist das anders, da erscheint der Button zum weiterklicken erst, wenn man den Namen und die Telefonnummer eingetragen hat. Bei der Version 1.7 funktioniert aber die Prüfung nicht, weil wenn man die Telefonnummer auch aktiviert, geht die Prüfung schief. Die Prüfroutine ist falsch offenbar. Aktiviert man nur den Namen verprflichtend erscheint der Button erst nachdem man den Namen eingetragen hat, da funktioniert es dann wie vorher. Was tun? @tkrebs

mjmpeace commented 3 years ago

Buchung Hier sieht man - der Button zum weiterklicken ist da, obwohl man keine Namen eingetragen hat.

cbits68 commented 3 years ago

hast Du für Platz 6 auch wirklich eingetragen, dass die Angabe verpflichtend ist und nicht optional? 2021-03-16 19_20_50-

mjmpeace commented 3 years ago

Könnte sein – das das falsch war. Ich habe ja jetzt alle auf nur Namen gesetzt. Das lustige – Teste ich es mit Telefonnummer und gebe dort Buchstaben ein, dann kann ich buchen.

Danke für die Hilfe

Michael

Von: anborn @. Gesendet: Dienstag, 16. März 2021 19:22 An: tkrebs/ep3-bs @.> Cc: mjmpeace @.>; Comment @.> Betreff: Re: [tkrebs/ep3-bs] Buchung mit Mitspielern - Exception bei wahrscheinlich "ungültigen" Namen (#437)

hast Du für Platz 6 auch wirklich eingetragen, dass die Angabe verpflichtend ist und nicht optional? https://user-images.githubusercontent.com/60112941/111360252-d01c6f80-868c-11eb-9e9a-b782647676cb.png

— You are receiving this because you commented. Reply to this email directly, view it on GitHub https://github.com/tkrebs/ep3-bs/issues/437#issuecomment-800500185 , or unsubscribe https://github.com/notifications/unsubscribe-auth/ALELBU5JRMNPK425VNCOXILTD6OUNANCNFSM4WUALDAQ . https://github.com/notifications/beacon/ALELBUZ33X7UD3Y3QBHMWF3TD6OUNA5CNFSM4WUALDA2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOF63KTWI.gif

cbits68 commented 3 years ago

Für die Telefonnummer habe ich bisher auch keinen Prüfmechanismus gefunden, z.B. dass nur Zahlen erlaubt sind. Lässt sich aber sicher einfach im Code einstellen. die Funktion dazu ist is_numeric()

cbits68 commented 3 years ago

geht aber auch einfacher mit input type=int name="zahlen"

cbits68 commented 3 years ago

attribut "int" sorgt dafür, dass nur die Eingabe von Ganzzahlen möglich ist. Aber ich glaube im Offline-Modus findet keine Kontrolle statt!

cbits68 commented 3 years ago

oder eben mit Java Script

cbits68 commented 3 years ago

viele Wege führen nach Rom ;-)

mjmpeace commented 3 years ago

Danke für Eure schöne Unterstützung. Ich gucke mir das Morgen an, wie ich es löse.