2016-08-03 4 views
1

Ich habe ein Problem mit post-Daten Variablennamen zum Beispiel ich diese Art von Eingabe bekommen könnte:Codeigniter POST-Daten Namen

<input type="number" name="amount[BKP1P+NC10A]" /> 

die es in der Theorie nichts falsch mit dem Namen Feldelement ist und wenn ich bin nicht im codeigniter erhalte ich den Array-Namen und greife wie gewöhnlich darauf zu, aber merkwürdig ist, wenn ich $this->input->post() benutze oder wenn ich direkt auf die Daten von $_POST zugreife, wird der Name des Array-Elements entfernt und stattdessen bekomme ich ein enumeratives Array.

Zum Beispiel in der normalen Post (ohne codeigniter) i erhalten:

array(1) { 
    ["amount"]=> 
    array(1) { 
    ["BKP1P+NC10A"]=> 
    string(2) "12" 
    } 
} 

Während in codeigniter i diese:

array(1) { 
    ["amount"]=> 
    array(1) { 
    [0]=> 
    string(2) "12" 
    } 
} 

Kann mir jemand sagen, was los ist und wie ich das bekommen kann tatsächlicher Name anstelle eines enumerativen Arrays?

Dank & Grüße

+0

Warum in süß heck brauchen Sie die Eingabe-Array-Name zu sein "BKP1P + NC10A". Ich habe keine Beweise, aber ich habe den starken Verdacht, dass CodeIgniter '-> post()' einige Sonderzeichen entfernt, vielleicht für einen potentiellen Sicherheits-Exploit oder vielleicht nur für Entwickler. – Goose

+0

Diese Art von Code ist eine Teilenummer und ja, es kann als ein Element verwendet werden. Im Codeigniter nicht nur -> post() sondern auch $ _POST verhält sich gleich und bekommt ein enumeratives Array – Combinu

+0

Es scheint, dass es nicht als ein Element in CodeIgniter verwendet werden kann, was wahrscheinlich ist, warum Sie dieses Verhalten bekommen. Es ist wahrscheinlich nicht dokumentiert und Sie müssten in den Systemcode von CodeIgniter schauen, um zu bestätigen (und zu beheben), aber wenn dieser Array-Element-Name Ihnen unerwartetes Verhalten gibt, liegt das wahrscheinlich an dem + -Zeichen. Es ist unkonventionell, einen Datenschlüssel zum Speichern von Daten zu verwenden. Anstatt zu versuchen, ein Feld zu verwenden, um zwei Dinge zu tun, sollten Sie zwei Felder haben, dasjenige, das Sie jetzt mit einem allgemeinen Schlüsselnamen und einem versteckten Feld mit der Teilenummer haben. – Goose

Antwort

2

Es scheint, dass das Problem als @Goose ist aus dem Kern codeigniter wies darauf hin, und als ich die Kerneingangsklasse revisited fand ich eine Funktion _clean_input_keys, die enthält:

preg_match('/^[a-z0-9:_\/|-]+$/i', $str); 

Wie Sie + und sehen können. sind nicht erlaubt, also änderte ich es zu:

preg_match('/^[a-z0-9\+\.:_\/|-]+$/i', $str); 

Hoffe das hilft jedem!

+0

Sie können auch Ihre eigene Antwort akzeptieren. – coderodour

+0

Nicht vor 2 Tagen – Combinu

+0

Ich empfehle auch dringend, den Array-Schlüssel zu etwas generischen zu ändern und wenn Sie die Teilenummer übergeben müssen, übergeben Sie es als Wert und nicht als Schlüssel. Sonst wirst du dein nächstes Problem sehr bald treffen. – Goose

Verwandte Themen