Thomas Luethi: Formular-Variablen, register_globals, isset()

Beitrag lesen

Hallo Gregor,

Bitte aendere nicht staendig das Subject </faq/#Q-20>, und wenn,
dann nur so, dass es sinnvoll und aussagekraeftig ist </faq/#Q-06a>.
Personennamen in Subjects sind uebrigens nicht gerade guter Stil.

ich habs einfach so gemacht:

if ($tabellenTeile != "ja") {
$tabellenTeile = "nein"; }

Das ist zwar einigermassen sicher, weil danach die Variable
$tabellenTeile nur entweder "ja" oder "nein" enthaelt.
Soweit OK.
Und IMHO kannst Du diesen Wert dann auch gleich
in die DB schreiben.

Allerdings war im 1. Posting die Rede davon, dass
bei nicht angekreuzter Checkbox _nichts_ in das Feld
der DB geschrieben werden soll, damit die _DB_ ihren
"default" Wert reinschreibt.

Jetzt definierst Du den default-Wert aber ploetzlich in PHP.

Das, was Du an meinem Schreibstil
if ((isset($_REQUEST['meinebox'])) AND ($_REQUEST['meinebox']=='ja'))
so "umstaendlich" findest, ist stabiler und zukunftssicherer
als Deine Methode.

Du verwendest einerseits die Formular-Werte einfach so weiter,
indem Du auf sie als globale Variablen zugreifst.
Das funktioniert nur in alten PHP-Versionen "einfach so".
Bei neuen Versionen ist register_globals=off, und Du
_musst_ $_REQUEST['meinebox'] bzw. $_GET/$_POST verwenden,
um an die Parameter aus dem Formular oder der URL ranzukommen.
http://www.dclp-faq.de/q/q-formular-register-globals.html

Zudem pruefst Du nicht, ob die Variable ueberhaupt existiert.
Das kann - wenn irgendjemand an der php.ini rumbastelt - zu
(auch fuer den Endbenutzer sichtbaren) "Notices" fuehren:
Notice:  Undefined variable: tabellenTeile in /pfad/tests.php on line xy
Schreib mal ganz oben in Dein Script:
error_reporting (2047);
und staune...

Lies zum Thema Formular-Variablen auch noch:
http://www.dclp-faq.de/q/q-security-variablen.html
http://www.dclp-faq.de/q/q-sicherheit-parameter.html

Wenn Du Dinge aus Formularen u.s.w. in die Datenbank schreibst,
solltest Du den String vorher _mindestens_ durch die Funktion
mysql_escape_string() schicken.
http://ch.php.net/manual/de/function.mysql-escape-string.php

Gruesse,

Thomas