Hallo Struppi,
hi,
my $username = CGI::param('user') || '0';
?Nein, wenn du in das Formular eine null eingibst (und es ist ein gültiger Wert), dann wird aus der null ein Leerstring. Falls die null ein gültiger Wert ist, musst du sowas machen:
ok das war klar.
my $username = defined CGI::param('user') ? CGI::param('user') :'' ;
»»
ja,das versteh ich auch,ich hatte eben ein problem mit dem ''; (nichts),was das bedeutet ein leerstring.
Du hast offensichtlich immer noch nicht den Unterschied eines definierten Wertes und eines falschen Wertes verstanden.
Wenn ein Formularfeld nicht ausgefüllt wird und das Formular trotzdem abschickt wird ist:
print CGI::param('name') ? 'definiert' : 'undefniert';
undefiniert
Wird eine null eingetippt ist:
print CGI::param('name') ? 'definiert' : 'undefniert';auch undefiniert
Wenn gar nichts eingegeben wird ist:
my $name = CGI::param('name') || '';
$name ein leerer String aber definiert, d.h. du kannst die Länge abfragen ohne Fehlermeldung.
aha,aber was wäre dann die länge eines leerstrings,rein theoretisch? ''(2)?
: '' ist lediglich dazu da, das kein undefinierte Eingabe erfolgt und du die Länge überprüfen kannst.
Wenn du da eine 1 hinschreibst, würde das bedeuten, das du eine 1 als Defaultwert (bei keiner Eingabe) haben möchtest, was ich sehr bezweifle.
ok,aber eigentlich möchte ich schon einen (leer)string prüfen können bzw. eine klare definition um dann einen fehler dennoch von mir zu erzeugen,dann wäre z.B.
eine abfrage wie diese denkbar:
my $name = CGI::param('name') || 'xyz';
if ($name eq "xyz")
{
die "falsche eingabe\n";
}
das hiese jetzt,wenn der benutzer nichts eingibt dann wäre $name = xyz und das sollte einen fehler erzeugen.
es wäre aber in dem fall auch dies denkbar:
if ($name eq '')
{
die "falsche eingabe\n";
}
ich hoffe das ist nun korrekt.
Das geht nicht. Wenn ein Skript den Referrer fälscht und dem Skript gültige Werte übermittelt kannst du das nicht verhindern.
aber erschweren könnte man es schon.
Grüsse
vom Alain