PHP Forum

PHP Forum (http://www.selfphp.de/forum/index.php)
-   PHP Grundlagen (http://www.selfphp.de/forum/forumdisplay.php?f=12)
-   -   Name einer Post-Variable prüfen? (http://www.selfphp.de/forum/showthread.php?t=24928)

panametrics 07.04.2013 10:14:56

Name einer Post-Variable prüfen?
 
Hallo,

ich steh heute voll auf dem Schlauch und blicke es gerade nicht.
Ich habe folgendes Problem:
Ein Formular mit mehreren Feldern. Einige Felder sind dynamisch aufgebaut, deren Name mit "serial-" anfängt. Diese muss/möchte ich aber gesondert behandeln, beim wegschreiben in die Datenbank.

Irgendwie fehlt mir gerade voll der Ansatz, wie ich den Namen der Post-Variable prüfe.

Ich möchte also prüfen wenn der Name der POST Variable mit "serial-" beginnt, dann ....
Bin schon am überlegen ob ich alle $_POST mit foreach durchlaufe und dann aufteile in $name => $value, und dann kann ich ja an den Namen ran, aber das muss doch auch kürzer gehen oder?

Ich würde mich über einen Denkansatz freuen. Mir fällt grad keine Funktion aus der Referenz ein, mit der ich das machen kann. Vielleicht liegts aber auch nur an der frühen Uhrzeit.

Danke,
Tom

panametrics 07.04.2013 11:22:18

AW: Name einer Post-Variable prüfen?
 
Für die Nachwelt,

ich habe es jetzt mal so gelöst.
Ist zwar etwas umständlich und ich dachte es geht auch kürzer, aber Lösung ist in diesem Fall erstmal Lösung ;-)

PHP-Code:

        foreach( $_POST AS $postFeldName => $postFeldValue )
        {
            if( 
eregi"serial-"$postFeldName ) )
            {
                
// ... mach was
            
}
        } 


DokuLeseHemmung 07.04.2013 11:24:12

AW: Name einer Post-Variable prüfen?
 
Zitat:

Ich möchte also prüfen wenn der Name der POST Variable mit "serial-" beginnt, dann ....
Das ist keine gute Idee!

Besser:

HTML-Code:

name="serial[]"
oder
HTML-Code:

name="serial[irgendwas]"
Dann basteln dir Browser und PHP die Daten in einem schönen Array zusammen, und du hast sofort alle am Haken

panametrics 07.04.2013 12:47:48

AW: Name einer Post-Variable prüfen?
 
Hey Dokulesehemmung,

das geht leider nicht, da die POST Varis keinen Namen haben aus dem ich ein Array machen kann.
z. B. heißen diese $_POST["serial-Geraet"] oder $_POST["serial-Tubus"]

daher geht
Zitat:

HTML-Code:

name="serial[]"
oder
HTML-Code:

name="serial[irgendwas]"
Dann basteln dir Browser und PHP die Daten in einem schönen Array zusammen, und du hast sofort alle am Haken
leider nicht.

panametrics 07.04.2013 12:54:07

AW: Name einer Post-Variable prüfen?
 
Vergessen: Danke für Deine Anregung. :)
Deinen Vorschlag mit name="serial[XXX]" könnte ich zwar umbauen, müsste aber dann im Form auch wieder aufdröseln.

Beziehungsweiße, was spricht gegen die Prüfung mit foreach und dann eregi?
Es gibt ja auch noch andere Post Felder, die nicht mit serial- beginnen.

Da es weder eine kritische Anwendung noch ein kritischer Server ist, ist mir die Rechenzeit für diese Abfrage egal.

Ich schweife mal kurz aus:
In der DB gibt es eine Spalte serials. Diese beinhaltet alle Seriennummern eines Röntgengeräts.

Sieht dann so aus:
Gerät§1234%Röhre§2345%Bedienelement§9876%Tubus§5555

und im Form splitte ich dann auf, zerlege erstmal den Inhalt der Spalte aus der DB mit explode anhand des Trenners % und danach nochmal mit § um quasi Name und Value zu bekommen und erstelle dann input-Felder mit dem Namen serial-Roehre, serial-Tubus, usw.

Und das ganze dann nach dem Absenden des Forms wieder umgekehrt. Da baue ich dann wieder alle Felder die mit serial- beginnen zusammen zu einem Inhalt der in die Spalte geschrieben wird.

Hat leider folgenden Grund, dass es bei verschiedenen Rö-Geräten verschiedene Seriennummern gibt, beim einen Hersteller sind es 5, beim anderen nur 3, bei einem anderen Gerät (unterschied zwischen 2D und 3D) sind es bsp. 5 bzw. 8, und so weiter. Somit spar ich mir 5000 Spalten in der Tabelle und würfle alles in einer Spalte. Ja ist umständlich, aber die schnellste Variante für Änderungen, etc. Wenn ein neues Gerät dazukommt, wird im Formular einfach ein weiteres input-Feld mit serial-XXXX aufgenommen und dann kann dies mit eingebaut werden, keine Spalten in der Tabelle anlegen, etc.

DokuLeseHemmung 07.04.2013 13:37:59

AW: Name einer Post-Variable prüfen?
 
Zitat:

und im Form splitte ich dann auf, zerlege erstmal den Inhalt der Spalte aus der DB mit explode anhand des Trenners % und danach nochmal mit § um quasi Name und Value zu bekommen und erstelle dann input-Felder mit dem Namen serial-Roehre, serial-Tubus, usw.
Ein Verstoß gegen die erste Normal Form.
Also ganz und gar nicht zu empfehlen.

Ja, ich sage es ist falsch!

Die 5 Normal Formen

urvater 07.04.2013 13:38:32

AW: Name einer Post-Variable prüfen?
 
Was spricht dagegen eine weitere DB-Tabelle anzulegen, in der du alle "Zusätze" speicherst?

id | bezeichnung
1 | Röhre
2 | Bedienelement
etc.

In deiner jetzigen Spalte könntest du dann die ID zum speichern nutzen.
Das Formular könntest du dann anhand der Spalte "bezeichnung" erstellen. So müsstest du keine weitere Spalte in der jetzigen Tabelle erzeugen. Könntest dein Formular automatisiert ergänzen, wenn ein neuer Zusatz dazu kommt und deine Formularfelder kannst du dann leicht mit serial[XX] beschreiben.

Gegen deine momentane Lösung spricht meiner Meinung nach nur, dass du unnötigen Code erzeugt hast. Hier geht es ja nicht nur um Systemlast und Ausführungszeit sondern auch um die Pflege deines Codes. Je weniger Code desto leichter die Pflege.

panametrics 07.04.2013 14:06:01

AW: Name einer Post-Variable prüfen?
 
Zitat:

Zitat von urvater (Beitrag 144820)
Gegen deine momentane Lösung spricht meiner Meinung nach nur, dass du unnötigen Code erzeugt hast. Hier geht es ja nicht nur um Systemlast und Ausführungszeit sondern auch um die Pflege deines Codes. Je weniger Code desto leichter die Pflege.

Lieber Dokulesehemmung und Urvater,

danke für die Ansätze. Ja das mit dem unnötigen Code stimmt wohl - Leider. :-(
Dass es gegen die Normal-Formen verstößt weiß ich auch, und bisher habe ich immer darauf verzichtet ein DB-Feld so zu befüllen.

Wie gesagt, komplex macht es das ganze nur, dass es halt eben schon vom Namen her unterschiedliche Seriennummern Bezeichner gibt, wie beschrieben "Röhre", "Tubus", oder eben bei einem Befundungsmonitor heißt es dann "Seriennummer Monitor", und die Anzahl variiert.

Durch diese etwas unschöne Lösung, bin ich der Meinung ist mir bei anderen Formularen wie z. B. Datensatz bearbeiten, neu hinzufügen, etc, ein wenig Arbeit erspart.
Gefallen tut es mir persönlich auch nicht wirklich. Aber: Es funktioniert, und ist kompatibel zu neuen Geräten, die vielleicht erst in einem halben Jahr auf den Markt kommen, und wieder andere Seriennummern haben. Ja, das wäre mit der Extra-Tabelle auch zu lösen, sehe ich ein. :D

Wie gesagt, es ist keine kritische Anwendung und kein kritischer Server, daher ist der Aufwand es sauberer zu lösen zur Relation saubere Datenbank Tabellen relativ.

Vielleicht mache ich mir mal die Arbeit es wirklich so umzubauen.

Ich danke euch trotzdem, auch wenn es nun voll am ursprünglichen Thema vorbeigeht.

schönen Sonntag.

vt1816 07.04.2013 14:20:09

AW: Name einer Post-Variable prüfen?
 
Zitat:

Zitat von panametrics (Beitrag 144822)
[..]
Vielleicht mache ich mir mal die Arbeit es wirklich so umzubauen.

In der Zeit die wir hier alle gemeinsam mit der Problemanalyse und den Lösungsvorschlägen verbracht haben, hättest Du nutzen können um die Datenbankstruktur zu berichtigen.

Wir werden uns über kurz oder lang hier wieder lesen, wennDu ein neues Problem mit der verwurschtelten Struktur hast.

Bitte nicht falsch verstehen - aber haben wir hier oft genug gehabt.

DokuLeseHemmung 07.04.2013 14:37:59

AW: Name einer Post-Variable prüfen?
 
Zitat:

Ich danke euch trotzdem, auch wenn es nun voll am ursprünglichen Thema vorbeigeht.
Bitte schön, gern geschehen...

Hmmm...
Könnte es sein, dass du das jetzige Problem gar nicht hättest, wenn du dich an die Normalisierungsregeln halten würdest?


Alle Zeitangaben in WEZ +2. Es ist jetzt 17:50:58 Uhr.

Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.