• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

Verarbeitung von POST Daten ohne genaues Wissen über Variablennamen

RP-User

New member
Hallo Leute,
ich hatte gehofft hier was im Forum zu finden, nachdem ich 3 Suchergebnisseiten durchgegangen bin hab ich leider nichts gefunden. Ich hoffe nicht nur nach den falschen Begriffen gesucht zu haben.

ich hab eine Frage zur POST-Methode, auf der Seite newWork.php habe ich ein Formular das per Post an sich selbst geschickt wird. Diese Seite enthält auch dynamisch erstellte Felder die durch javascript erstellt wurden. Diese Felder werden über tbAuthorSurname + $id eindeutig benannt und können eine unbestimmte Anzahl haben (es darf keine Obergrenze geben).

Das Problem ist, dass ich jetzt nicht genau weiß wie ich die POST-Daten definiere. Denn ich weiß nicht wie viele Variablen ich habe und weiß auch nicht genau wie diese heißen.

Ich vermute das $_POST im eigentlich nichts anderes als ein Hash ist, jedoch weiß ich nicht wie ich die Infos für Key - Value dort auslesen kann oder ob das überhaupt funktioniert.

Wie kann ich jetzt also rausfinden wie viele Variablen mit "tbAuthorSurname" beginnen und wie diese genau heißen?

Randbedingungen:
- Es muss POST verwendet werden, da die Datenmenge weit über der zu verarbeitenden Länge von GET liegt.
- Zu den dynamischen Feldern kommen auch statische.
- Es gibt 6 verschiedene dynamische Felder

Grüße und Danke
 
wenn man bei einer großen Suchmaschine "_post ausgeben" eingibt bekommt man gleich richtige Ergebnisse

PHP:
echo "<pre>";
print_r($_POST);
echo "</pre>";

oder
PHP:
foreach($_POST as $k=>$v) echo $k . ' -> ' . $v;

habs net getestet, sieht aber sinnvoll aus

edit: sicherheitstechnisch ist dein Vorhaben sehr kritisch...
 
PHP:
for($i = 0; isset($_POST['tbAuthorSurname'.$i]); $i++) {
    echo '$_POST[\'tbAuthorSurname'.$i.'\'] = '.$_POST['tbAuthorSurname'.$i]
}

gleiches prinzip für die anderen feldnamen auch. (vorrausgesetzt du fängst bei 0 mit dem zählen an, sonst muss die for-schleife natülrich mit $i = 1 initialisiert werden)


edit: sicherheitstechnisch ist dein Vorhaben sehr kritisch...

das musst du uns mal näher erklären.
 
... ähm danke, glaube ich. Denn irgendwie versteh ich das ganze nicht so recht.

Aber ich bin mal deinem Rat nachgegangen und hab erstmal mit print_r bei einer bekannten Suchmaschine gesucht ... damit kann ich mir die Inhalte von $_POST ausgeben lassen.
Ok soweit.

Evtl. hab ich mein Problem nicht richtig beschrieben oder mein Gehirn hat den totalen Aussetzer und weigert sich die Info sinnvoll umzusetzen (dann müsste ich mir doch mal Sorgen machen :eek: ).
Es geht mir darum, dass ich die Daten welche ich per $_POST erfassen kann in variablen schreibe und weiterverarbeiten kann.
Es ist schön wenn ich sie anzeigen lassen kann, aber ich möchte wissen wie die Variablen heißen um diese weiter zu verarbeiten.

Mir kommt zwar gerade eine Idee das ganze in eine Datei zu schreiben und diese dann Zeilenweise auszulesen und per pattern an den jeweiligen Variablennamen zu kommen. Diese dann in ein Array schreibe und Stück für Stück durchgehen könnte, aber das muss definitiv einfacher gehen.

Wahrscheinlich steh ich auf der Leitung oder du hast mich falsch verstanden, hier also noch ein Versuch:

Ich denke am einfachsten ist es wenn ich ein Link zur Seite selbst gebe (nur die nötigsten Dateien):
http://mueder-marc.de/t/work/newWork.php

Es geht (im Moment nur) um den Autorenvorname, wenn dort neue hinzugefügt werden und ich das Formular absende weiß ich nicht wie viele Autoren es gibt, also weiß ich auch nicht wie ich diese mit $_POST abfangen kann.
Im Moment hab ich mal die ersten 2 vornamen ausgegeben, ist ja auch kein Problem, aber wenn 5 eingegeben wurden, woher soll ich das wissen? Wie prüfe ich das?

Ich hoffe es war verständlicher und das du mir die Lösung nicht schon gegeben hast und ich diese lediglich nicht verstehe.

Übrigens weiß ich, das bei einem Klick auf den Button um neue Autoren hinzuzufügen die Einträge gelöscht werden, aber das Problem ist noch ungelöst (wobei ich auch noch nicht danach gesucht habe).
 
PHP:
for($i = 0; isset($_POST['tbAuthorSurname'.$i]); $i++) {
    echo '$_POST[\'tbAuthorSurname'.$i.'\'] = '.$_POST['tbAuthorSurname'.$i]
}

gleiches prinzip für die anderen feldnamen auch. (vorrausgesetzt du fängst bei 0 mit dem zählen an, sonst muss die for-schleife natülrich mit $i = 1 initialisiert werden)




das musst du uns mal näher erklären.

sorry hab ich übersehen - da ich den anderen post beantworten wollte. Natürlich hast du recht .. ne for schleife ... ich glaub ich mach erstmal ne pause ...

Das mit dem Sicherheitsrisiko würde ich auch gern wissen, das macht mir etwas Kummer.

Danke auf jedenfall mal euch zweien!
 
okay, pauschal ist die Aussage nicht richtig, ich hab halt an solche Konstrukte gedacht wo mit eval die POST-Variablen gleich in richtige Variablen umgebaut werden

ähnlich wie hier: http://phpforum.de/php/php-handbuch/static/function.eval.html

ich nehme die Aussage zurück, wollte einfach nur nochmal darauf hinweisen, dass man Eingaben immer überpüfen muss, und das ist gerade bei welchen die nicht "fest gecodet" sind schwierig

edit: ganz unbegründet ist meine Befürchtung nicht:
Code:
SELECT rel_work_id FROM author WHERE surname LIKE '% ' or rel_work_id = '1%'

Ihre Suche nach ' or rel_work_id = '1 ergab 1 Treffer.
1
passiert wenn man bei "Vorhandenes Werk ändern" den Suchstring "' or rel_work_id = '1" einfügt

da kann man bestimmt noch ganz andere Dinge machen.... also lösche mal bitte den Link zu deiner Webseite, dass hier keiner auf dumme Ideen kommt
 
Zuletzt bearbeitet:
@Bieber: Das Problem das du schilderst hat nichts mit der tatsache zu tun dass hier aus nem set "unbekannten" vars beliebiger größe gelesen wird. Das is einfach sql injection 1on1 (kein problem auf das man bei dieser fragestellung explizit hinweisen müsste) - recht haste freilich.

@RP-User: mit meinem codeschnipsel kannste durch die parameter loopen, ich hab sie einfach mal echo'ed weil ich nicht weiß was du eigentlich damit machen willst, aber so kommst du an die dinger ran und kannst sie dann weiterverarbeiten wie du willst.
 
@Bieber: Das Problem das du schilderst hat nichts mit der tatsache zu tun dass hier aus nem set "unbekannten" vars beliebiger größe gelesen wird. Das is einfach sql injection 1on1 (kein problem auf das man bei dieser fragestellung explizit hinweisen müsste) - recht haste freilich.

@RP-User: mit meinem codeschnipsel kannste durch die parameter loopen, ich hab sie einfach mal echo'ed weil ich nicht weiß was du eigentlich damit machen willst, aber so kommst du an die dinger ran und kannst sie dann weiterverarbeiten wie du willst.

Ja, war super hilfreich, ich stand einfach total auf der Leitung und bin so versessen drauf gewesen das das irgendwie ganz kompliziert aus post lesen muss ...

ich muss jeden inhalt in einer seperaten variable speichern. wahrscheinlich mach ich das in einem hash und nutze das tb...n als key, das sollte am besten funktionieren.

danke noch mals :)
- implementiert ist es zwar noch nicht, aber jetzt weiß ich wenigstens wie : )
 
@Bieber: Das Problem das du schilderst hat nichts mit der tatsache zu tun dass hier aus nem set "unbekannten" vars beliebiger größe gelesen wird. Das is einfach sql injection 1on1 (kein problem auf das man bei dieser fragestellung explizit hinweisen müsste) - recht haste freilich.

Joar klar, ich versuche nur immer ein bisschen für das Thema Sicherheit zu sensibilisieren. Es kostet ja nichts wenn ich darauf hinweise, was die Leute dann selbst damit anfangen ist ihre Sache. RP-User weiß nun z.B. dass auf seiner Seite SQL-Injections möglich sind.
 
hast du mal den Schnipsel von Bieber ausprobiert?

PHP:
foreach($_POST as $key =>$value) echo $key . ' -> ' . $value.'<br>';

ich muss jeden inhalt in einer seperaten variable speichern. wahrscheinlich mach ich das in einem hash und nutze das tb...n als key, das sollte am besten funktionieren.
wenn ich die richtig verstehe, ist das genau das gleiche als wenn du einfach $_POST weiterverwenden würdest. Ich würde gerne mal wissen woher diese Unsitte, die $_POST/$_GET Arrays in Variablen umzuspeichern, kommt. Gibt es dafür irgendeinen Grund den ich nicht kenne/verstehe?
 
hast du mal den Schnipsel von Bieber ausprobiert?

PHP:
foreach($_POST as $key =>$value) echo $key . ' -> ' . $value.'<br>';


wenn ich die richtig verstehe, ist das genau das gleiche als wenn du einfach $_POST weiterverwenden würdest. Ich würde gerne mal wissen woher diese Unsitte, die $_POST/$_GET Arrays in Variablen umzuspeichern, kommt. Gibt es dafür irgendeinen Grund den ich nicht kenne/verstehe?

Hallo,
ich kenn mich zwar mit dem Thema Variablenhaltbarkeit in PHP nicht aus, aber wenn ich eine saubere For-Schleife machen will (und dort dann i deklariere) müsste ich damit die $_POST['name'.$i] gültig bleibt die For-Schleife über alles ziehen was ich dazu brauche. Wenn ich sie außerhalb deklariere habe ich am ende nur eine Variable anstatt bspw. 10.

Warum das sonst gemacht wird kann ich dir auch nicht sagen, ich hab das bisher auch immer so gemacht weil es meist kürzer ist und somit mit Faulheit verbunden, natürlich ist es auch eine Fehlerquelle, aber ohne die kleinen Fehler würde das doch jeglichen Reiz verlieren ;-)

PS: Den codeschnippsel hab ich noch nich versucht werde ich aber jetzt machen :)
 
Zurück
Oben