Nichts tun

…ist immer nett, ich weiss :wink:

hallo da draußen!

ich hätt mal wieder eine anfängerfrage :-}

es darum, fehlerhafte angaben (präziser: ein leeres feld) aus einem html-formular abzufangen, was ich im wesentlichen via javascript erledige. die eventuellen eingaben werden seitens meines perl-scripts noch um localtime ergänzt und in einem flat-file abgelegt- 08/15…
nun lässt sich aber nicht vermeiden, dass onClick auch gleichzeitig das perl-script gestartet wird, was im falle leerer felder zu einem einsamen eintrag des datums in das flat-file führt. somit ist das ziel: im falle eines leeren feldes soll das script schlicht gar nichts tun.
yo- und was ich so in der fachliteratur an lösungen gefunden habe, sah auch immer alles hübsch einfach aus. ich hab’s nur nicht zum laufen gekriegt… (:frowning: die haben allerdings auch ausnahmslos mit „die“-meldungen gearbeitet, was ich gerade nicht will.
script an sich laüft problemlos, deswegen kann ich den code hier wohl ganz kurz auf sub-ebene abhandeln. hier mal der simpelste versuch:

if (param ())
{
eintragen;
anzeigen;
}

fehlermeldung gibt’s keine, aber das datum wird trotzdem eingetragen…
wär nett, wenn mir da mal wer einen tipp geben könnte.
kanndochnichtsoschwersein *grmpf*

gruß & dank schonmal
bernd

Hallo !

…ist immer nett, ich weiss :wink:

hallo da draußen!

ich hätt mal wieder eine anfängerfrage :-}

es darum, fehlerhafte angaben (präziser: ein leeres feld) aus
einem html-formular abzufangen, was ich im wesentlichen via
javascript erledige. die eventuellen eingaben werden seitens
meines perl-scripts noch um localtime ergänzt und in einem
flat-file abgelegt- 08/15…
nun lässt sich aber nicht vermeiden, dass onClick auch
gleichzeitig das perl-script gestartet wird, was im falle

JavaScript:
Überprüfung in onSubmit in den Form-Tag legen
bei onCubmit=„return checkinput();“ kannst du bei Falscheingabe in der Funkion false zurückgeben (return false), dann wird das Formular nicht abgesendet.

script an sich laüft problemlos, deswegen kann ich den code
hier wohl ganz kurz auf sub-ebene abhandeln. hier mal der
simpelste versuch:

if (param ())

param() liefert ein Array, in welchem alle Parameter stehen, das ist nicht leer…
Du suchst param(„Feldname“).

Alexander

schon recht aber…
hi alexander,

JavaScript:
Überprüfung in onSubmit in den Form-Tag legen
bei onCubmit=„return checkinput();“ kannst du bei
Falscheingabe in der Funkion false zurückgeben (return false),
dann wird das Formular nicht abgesendet.

alles schon längst passiert (funktioniert auch :wink:, aber es ändert reinewech garnix an dem problem, dass bei klick auf den „abschicken“-button eben auch das perl-script gestartet wird…

param() liefert ein Array, in welchem alle Parameter stehen,
das ist nicht leer…
Du suchst param(„Feldname“).

richtig, das. war inzwischen sogar mir aufgefallen… :wink:
nach diversem anderen hab ich nach deiner anregung nochmal das allerblödeste probiert:

if (not (param(‚name‘)))
{script}

gibt (natürlich): error 500…
leider fällt mir nun nix mehr ein.

greetings
bernd

p.s.: braucht „if“ in perl auch immer ein „else“?

Hi !

hi alexander,

if (not (param(‚name‘)))

if (!param(‚name‘)) oder
unless (param(‚name‘)) geht auch, aber daran liegt es nicht, die Zeile ist richtig.

{script}

gibt (natürlich): error 500…

use CGI::Carp ‚fatalsToBrowser‘;
oder
perl -cw scriptname (auf der Konsole)
oder
im Errorlog nachsehen

um die richtige Fehlermeldung zu finden.

leider fällt mir nun nix mehr ein.

Schicke mal das Script per Mail, wenn es nicht gehen sollte…

greetings
bernd

p.s.: braucht „if“ in perl auch immer ein „else“?

Nein.

Alexander

if (!param(‚name‘)) oder
unless (param(‚name‘)) geht auch, aber daran liegt es nicht,
die Zeile ist richtig.

tatsaechlich?
ich haette gemeint es braucht ne CGI-Instanz…

/usr/bin/perl
use CGI;

$foo = new CGI;

if (!$foo-\>param('name'))
 { script; }

der code also
hallo alexander,
der code ist weder geheimnis noch etwas besonderes und vor allem: er funktioniert bestens. blöderweise ist eben gerade das hier das problem. deswegen glaube ich auch, dass das hier kaum weiter helfen wird- aber nen versuch ist’s wert.
(wie ihr unschwer erkennen könnt, geht es um ein simples gästebuch)

#!/usr/bin/perl

use CGI (‚param‘);
use CGI::Carp (‚fatalsToBrowser‘);
use strict;
#variablen aus formular
my ($betreff, $name, $date, $nachricht, $mail);
#für sub anzeigen
my (@rev);
my ($zeile);
my (@einzeln);

sub eintragen
{
#dies hier produziert auch dann einen eintrag, wenn vom

formular undef kommt:

$date=localtime();

#das funktioniert genauso, wie es soll:
$betreff=param(‚betreff‘);
$name=param(‚name‘);
$nachricht=param(‚nachricht‘);
$mail=param(‚mail‘);

$nachricht=~ s/(?:\015\012?|\012)/
/g;

#eintragen
open (IN, „>>…/…/bernds/gaeste.txt“);
print IN „$betreff\t $name\t $date\t $mail\t $nachricht\n“;
close IN;
}

#das spar ich mir jetzt mal (läuft auch prima)

sub anzeigen {…}


#und das finale wäre hier also gewesen

if (not (param(‚name‘)))
{
eintragen;
anzeigen;
}

und nun: kannst du was erkennen?

*gespanntbin*
bernd

das kam mir…
…doch irgendwie bekannt vor :wink:

tach dog,

/usr/bin/perl
use CGI;

$foo = new CGI;

if (!$foo->param(‚name‘))
{ script; }

genau das hatte ich irgendwann auch schonmal probiert- mit bekanntem ausgang: error 500 :frowning:

greetings
bernd

geht doch!
hey dog-
du warst doch auf dem richtigen weg- SO klappt das:

my ($check);

$check= new CGI;

if (!$check->param(‚name‘ eq ‚‘)

mal wieder den wald vor lauter bäumen nicht gesehen…
obwohl mir nicht so ganz klar ist, warum so manche logische variante nicht lief, aber egal- 1:0 (hauptsache weiter :wink:

nix für ungut
bernd

hallo alexander,

Hallo !

use CGI (‚param‘);

use CGI ‚:standard‘;

mit Param habe ich das noch nie gesehen, wird auch im Manual nicht erwähnt.

if (not (param(‚name‘)))

Wenn Parameter name NICHT gesetzt ist ???

{
eintragen;
anzeigen;
}

Alex