Felix Riesterer: Jetzt gehts um Formularüberprüfungen

Beitrag lesen

Lieber PHP-Neuling,

 if (isset($_POST['aktion']) and $_POST['aktion']=='speichern') {

$Variable1 = isset($_POST['Feld1'];
....
;

das Umkopieren von $_POST['Feld1'] in eine Variable hat so keinen Sinn und ist deswegen eher gefährlich.

$aktualisieren = $db->prepare(
  "UPDATE TABLESET $ColSet WHERE ID = $ID1"
);

Autsch! Hier sieht man nicht mehr, woher der Inhalt in $ID1 her ist. Außerdem wirfst Du diesen Wert direkt in Deinen SQL-Code, ohne ihn über statement->execute kontext-behandelt hineinzugeben. Das könnte im schlimmsten Fall so aussehen:

$ID1 = $_POST['ID1'];
// was wäre, wenn das der übertragene Inhalt wäre?
$ID1 = 'null; DROP DATABASE db_name; --';

$aktualisieren = $db->prepare(
  "UPDATE TABLESET $ColSet WHERE ID = $ID1"
);

Hier sieht man nur noch den Variablennamen $ID1 im SQL-Statement, ohne seine Herkunft. Vergleiche:

// was wäre, wenn das der übertragene Inhalt wäre?
$_POST['ID1'] = 'null; DROP DATABASE db_name; --';

$aktualisieren = $db->prepare(
  "UPDATE TABLESET $ColSet WHERE ID = '"
  .$_POST['ID1']
  ."'"
);

Hier sieht man sehr schnell, dass da möglicherweise gefährlicher Code entsteht. Daher willst Du immer(!!!) Parameter binden:

// was wäre, wenn das der übertragene Inhalt wäre?
$_POST['ID1'] = 'null; DROP DATABASE db_name; --';

$aktualisieren = $db->prepare(
  "UPDATE TABLESET $ColSet WHERE ID = :id1'
);

$aktualisieren->execute(
  array(':id1' => $_POST['ID1'])
);

Aber nach dem neu laden der Seite (Sofern "Feld1" leer gelassen wurde) werden meine per css gestylten Checkboxen nicht mehr dargestellt, und auch Feldgrößen (input width) passen nicht mehr

Warum? Was ist bei dem HTML im Browser anders?

Meine ganze Seite ist mit CSS bearbeitet. Ich verstehe auch nicht warum das CSS nur teilweise zerschossen ist, das grós aber vorhanden bleibt :-S

Wenn der HTML-Code Fehler enthält, muss der Browser raten, was Du wohl gemeint haben könntest. Dabei kann eine leicht andere Dokumentstruktur entstehen, die zu den von Dir beobachteten Darstellungsschwierigkeiten führen.

Ist das grundlegend der Falsche weg? Ich wollte das HTML nicht zwangsweise komplett ins PHP hauen, sondern habe es lieber getrennt (zumindest soweit möglich)

Aus Deinem ursprünglichen Thread heraus habe ich diese Erweiterung zum DOMDocument-Tutorial geschrieben. Vielleicht hilft sie Dir?

Liebe Grüße

Felix Riesterer