Hello,
Ich hoffe dass Ihr mir ein wenig weiterhelfen könnt!
Klar, gerne.
Also erstmal die Ursache:
es liegt mit 99% Wahrscheinlichkeit an der automatischen Sessionorganisation von PHP. Wenn mann die Seite das erste Mal aufruft, also vom Browser noch kein Session-Parameter mit dem Request mitgesendet wurde, dann baut PHP (bei Standardeinstellung) in jedes Formular ein <hidden>-Element ein mit der neuen Session-ID.
Wie kannst Du das feststellen?
Lasse Dir das $_POST-Array zum Debuggen ausgeben
echo "<pre>\r\n";
echo htmlspecialchars(print_r($_POST,1));
echo "</pre>\r\n";
Was machst Du falsch?
Du _zählst_ die per POST übergebenen Paramter, obwohl die Anzahl vollkommen irrelevant ist.
Wie kannst Du es besser machen?
Die Liste der notwendigen Felder mit dem POST-Array vergleichen
Du baust ein Vergleichsarray mit den Namen aller Parameter auf
$_expected['name'][$i] Name des POST-Paramters
$_expected['duty'][$i] Ist er Pflicht?
$_expected['complete'][$i] Muss er ergänzt werden, wenn er fehlt?
$_expected['default'][$i] was ist der Default bei Ergänzung?
... weitere z.B. für valid-Prüfung usw.
$_expected['checked'][$i] POST-Array und Vorgabe bereits verglichen
dann fährst Du das $_POST-Array mit foreach() ab und vergleichst die Vorgaben in $_expected. Alle geprüften werden mit ['checked'] = true gekennzeichnet. Diejenigen, die dort nicht enthalten sind, führen zum Prüfungsfehler!
Wenn die Prüfung bis hierher ok war, machst Du die Gegenprobe, indem Du mit foreach() und array_filter() die ['checked']-Spalte des $_expected-Arrays abfährst und alle diejenigen, die noch nicht checked wurden, nach eingetragenen Vorgaben (z.B. Default) abarbeitest.
Auch hierbei führt ein fehler zum Prüfungsfehler!
So verhinderst Du, dass Du unerwartete Parameter erhalten kannst und auch, dass welche fehlen. Außerdem kannst Du diejenigen, die nur im Auswahlfall mitkommen (radio, checkbox, select, ...) im POST-Array ergänzen, sodass ein Datenbankupdate dann später nach Schema F ablaufen kann.
Wenn Du noch Fragen hast zum Verfahren, dann melde dich nochmal.
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
