PHP Formular, POST-Array nicht komplett ..?
Dr.Colossos
- php
0 Lothar0 Dr.Colossos0 Lothar
0 Patrick Figel0 Dr.Colossos0 ChrisB
Hi,
ich habe ein ganz seltsames (PHP?) Problem.
Ich habe ein PHP script dass mir ein HTML-Formular ausgibt, das 1:1 meiner gewählten Tabelle entspricht.
Sprich, ich wähle "Personen" in einem HTML-Selectfeld, und ich krieg alle Personen in der DB-Tabelle "Personen" in einem HTML-Formular dass als HTML-Tabelle aufgebaut ist - pretty straightforward.
Es hat auch immer wunderbar funktioniert, ist ja ned viel dahinter.
Vor einiger Zeit hat mein provider (greatnet) ein Update durchgeführt, zumindest glaube ich das ... und nun ist nach dem Absenden eines Formulars nicht mehr die "ganze Tabelle" im PHP-POST-Array.
Sprich: meine HTML-Tabelle enthält 20 Zeilen, aber nur die ersten 5 sind im PHP-Array. Dabei sind diese aber komplett, sprich es wird nicht eine Zeile abgeschnitten, sondern z.B. eben nach dem letzen Feld z.B. der 5 Zeile.
HTML is laut W3C Validator fehlerlos, und wenn ich die Seite auf meinen Rechner lokal ausführe geht auch alles.
Bei der online Variante habe ich mit dem Firebug-Netzwerk-Tab getestet, und es wird dort auch das ganze Formular abgesendet, d.h. es werden z.B. alle 20 Zeilen der HTML-Tabelle abgesendet - nur im PHP-POST-Array sind dann nur z.B. 5 Zeilen.
Ergo: HTML ist okay laut W3C, Formular funktionert da es lokal funktioniert, also muss es am PHP bei greatnet liegen - aber wieso?
Wer kann mir da elfen, hab keine Idee mehr ...
Danke euch!
Wer kann mir da elfen, hab keine Idee mehr ...
Danke euch!
Geb zu, ich versteh Dein Problem nicht zu 100%.
Aber hast Du schonmal dran gedacht, das ganze lokal über XAMPP o.ä. zu testen?
Dann hast Du Gewissheit, obs am Provider liegt...
Grüße, Lothar
Hi,
lokal hab ich es bereits getestet wie oben erwähnt, und da gings.
Also nochmal zum Verständnis.
Ich habe ein paar Tabellen in einer mysql Tabelle. Für jede Tabelle kann ich mir ein HTML-Forumar erstellen lassen, dass sozusagen die Tabelle in HTML ausgibt. Ich kann darin jedes Feld der Tabelle ändern, und per HTML POST schicke ich das Formular ab, und mein PHP Script aktualisert die DB-Tabelle anhand der gesendeten Daten - nur dass halt seit kurzem nicht mehr alle Zeilen der HTML-Tabelle, was eine HTML-Tabelle von HTML-input fields ist, um die ein <form> gebaut ist, am PHP backend ankommen.
Sprich, print_r(_POST) liefert ein array mit z.B. index 0, 1, 2, 3, 4 - obowhl die Tabelle/das Forumular 20 Zeilen hatte. Lokal gehts, HTML ist korrekt laut W3C, und firebug Netwerk-Tab sagt dass alle Felder im POST-Request sind - auch in der online Variante. Also geh ich mal davon aus dass das online PHP nicht so mag wie ich, aber wieso.
Weitere Ideen?
Danke
Weitere Ideen?
Danke
Alles klar. Problem verstanden, aber keine Idee...
Außer:
Wenns lokal läuft und auch sonst keiner eine wirklich Idee hat, Providerwechsel ;-) Wenig hilfreich, ich weiss, aber einer meiner Provider macht grad ganz ähnliche Zicken und ich weiß schon, ab wann er einem neuen weichen wird... nur er weiß es noch nicht :-)
Grüße, Lothar
Die einzige Möglichkeit die mir einfällt, wie der Webhoster so ein Verhalten verursachen kann, ist die suhosin.post.max_vars-Direktive im Suhosin-Patch.
Wäre aber ziemlich ungewöhnlich ... ein niedriger Wert macht hier bei vielen PHP-Projekten Probleme.
Du kannst dem ja mal mit ini_get_all() nachgehen.
Hi,
ja, genau, dass gig in die richtige Richtung.
Es ist aber das setting "suhosin.post.max_array_index_length", welches das Problem ist.
Ich denke mal ich kann das nicht mit ini_set() überschreiben, oder?
Und noch was komisches. phpinfo() gibt ir für den local value und den master value 64, d.h. ich könnte eine 64-zeilige Tabelle (erfolgreich) absenden.
Lass ich mir den Wert allerdins mit ini_get_all() ausgeben, dann ist das kein integer Wert, sondern ein Array.
["suhosin.post.max_array_index_length"]=>
array(3) {
["global_value"]=>
string(2) "64"
["local_value"]=>
string(2) "64"
["access"]=>
int(6)
}
Anscheinend wird der [access] key benutzt (6 => Zeilen), den ich aber nirgends dokumentiert gefunden habe.
Was kann ich machen? Provider bitten den Wert zu erhöhen?
Danke nochmals
Hi,
Lass ich mir den Wert allerdins mit ini_get_all() ausgeben, dann ist das kein integer Wert, sondern ein Array.
Wenig verwunderlich, schliesslich ist das der definierte Rückgabetyp der Funktion.
["suhosin.post.max_array_index_length"]=>
array(3) {
["global_value"]=>
string(2) "64"
["local_value"]=>
string(2) "64"
["access"]=>
int(6)
}Anscheinend wird der [access] key benutzt (6 => Zeilen),
Das glaube ich nicht, Tim ...
den ich aber nirgends dokumentiert gefunden habe.
In der Beschreibung zu ini_get_all findest du ihn dokumentiert; und in einem der Nutzerkommentare auch die Werte erklärt. (Dass der Wert 6 da nicht bei ist, mag vielleicht darauf hindeuten, dass es sich dabei um eine Spezialität von suhosin handelt, die im "normalen" PHP nicht vorkommt.)
MfG ChrisB
Hi,
Wenig verwunderlich, schliesslich ist das der definierte Rückgabetyp der Funktion.
Ahh, okay, sorry. Hätt bei ini_get_all() nachsehen sollen. Das mit dem Wert "6" hat aber einfach so gut gepasst ...
Trotzdem bin ich mir sicher dass es suhosin liegt, da es zuvor funktioniert hat ...
EDIT: Der Wert von "suhosin.post.max_vars" ist das Problem. Derzeit 200, und wie's der Teufel will, hatte die Tabelle die ich getestet habe genau 40 Spalten => ergo sind nur 5 GENAU Zeilen im POST-Array.
Danke sehr, sollte gelöst sein sobald greatnet mir den Wert erhöht.