Igäl
Erfahrenes Mitglied
Werte Gemeinde
Wiedermal stehe ich vor einem kleinen Problem, das aufgrund eines Kenntnismangels in einem bestimmten Bereich aufgetaucht ist. Das Thema ist Regex, wo ich über Basiskenntnisse verfüge und mich durchwursteln kann.
Ausgangslage: Ich habe ein Formular mit 64 Feldern. Diese will ich nicht alle manuell ansprechen und packe deshalb das ganze Formular in foreach. Regex soll mir dann die Felder formModalEditProps([a-zA-z]+) auslesen (bspw. gibt es einen Input namens 'formModalEditPropsAge', 'formModaleEditPropsWeight' etc.). Es gibt aber auch für fast alles eine Checkbox mit den passenden Namen 'formModalEditPropsAgeDisplay', 'formModaleEditPropsWeightDisplay', wo der User bestimmen kann, ob das in seinem Profil angezeigt wird oder nicht (CMS für meine D&D-Gruppe zur Charakterbewirtschaftung, nicht irgendein Tinderabklatsch ).
Dieses Snippet erfasst schön alle meine Felder. Da eine nicht getickte Checkbox jedoch keinen Wert zurückgibt und entsprechend das Feld nicht im $_POST-Array erscheint, stellt mich das vor gewisse Probleme, da die erste preg_match-Funktion auch die Displayfelder erfasst, was ich nicht will...
Der folgende Codeschnippsel sorgt dafür, dass die Displayfelder nicht angezeigt werden. Allerdings fehlt dann bei jedem Feld der letzte Buchstabe, was wirklich extrem ungünstig ist, wie ihr euch vorstellen könnt.
Ich könnte zwar das hier schreiben:
Dann habe ich im Array $field einen Index [2] mit dem letzten Buchstaben. Ich könnte das dann in einer Schleife mit dem Index [1], also dem Rest des Feldnamens, concaten. Aber das widerstrebt mir, weil ich denke, dass es auch anders gehen muss und ich etwas übersehe.
Warum also schneidet mir das vorletzte Snippet den letzen Buchstaben des Formularfeldnamens ab? Und wo liegt der Weg zur sauberen Lösung?
Ich danke bestens für Inputs und verbleibe mit freundlichen Grüssen an die Community.
Dä Igäl
Wiedermal stehe ich vor einem kleinen Problem, das aufgrund eines Kenntnismangels in einem bestimmten Bereich aufgetaucht ist. Das Thema ist Regex, wo ich über Basiskenntnisse verfüge und mich durchwursteln kann.
Ausgangslage: Ich habe ein Formular mit 64 Feldern. Diese will ich nicht alle manuell ansprechen und packe deshalb das ganze Formular in foreach. Regex soll mir dann die Felder formModalEditProps([a-zA-z]+) auslesen (bspw. gibt es einen Input namens 'formModalEditPropsAge', 'formModaleEditPropsWeight' etc.). Es gibt aber auch für fast alles eine Checkbox mit den passenden Namen 'formModalEditPropsAgeDisplay', 'formModaleEditPropsWeightDisplay', wo der User bestimmen kann, ob das in seinem Profil angezeigt wird oder nicht (CMS für meine D&D-Gruppe zur Charakterbewirtschaftung, nicht irgendein Tinderabklatsch ).
PHP:
foreach($_POST as $k => $v) {
preg_match('/formModalEditProps([a-zA-z]+)/', $k, $field);
preg_match('/formModalEditProps([a-zA-z]+Display)/', $k, $field_display);
}
Dieses Snippet erfasst schön alle meine Felder. Da eine nicht getickte Checkbox jedoch keinen Wert zurückgibt und entsprechend das Feld nicht im $_POST-Array erscheint, stellt mich das vor gewisse Probleme, da die erste preg_match-Funktion auch die Displayfelder erfasst, was ich nicht will...
Der folgende Codeschnippsel sorgt dafür, dass die Displayfelder nicht angezeigt werden. Allerdings fehlt dann bei jedem Feld der letzte Buchstabe, was wirklich extrem ungünstig ist, wie ihr euch vorstellen könnt.
PHP:
preg_match('/formModalEditProps([a-zA-z]+)[^Display]/', $k, $field);
Ich könnte zwar das hier schreiben:
PHP:
preg_match('/formModalEditProps([a-zA-z]+)([^Display])/', $k, $field);
Dann habe ich im Array $field einen Index [2] mit dem letzten Buchstaben. Ich könnte das dann in einer Schleife mit dem Index [1], also dem Rest des Feldnamens, concaten. Aber das widerstrebt mir, weil ich denke, dass es auch anders gehen muss und ich etwas übersehe.
Warum also schneidet mir das vorletzte Snippet den letzen Buchstaben des Formularfeldnamens ab? Und wo liegt der Weg zur sauberen Lösung?
Ich danke bestens für Inputs und verbleibe mit freundlichen Grüssen an die Community.
Dä Igäl