Silke: Prüfen, ob nur ein Eingabefeld ausgefüllt

Ich habe ein Formular geschrieben, dessen Daten ich in mehrere Tabellen übergeben möchte. Allen Tabellen gemeinsam ist die Kundennummer. Jetzt möchte ich Datenbankeinträge verhindern, die außer der Kundennummer nichts beinhalten. Gibt es da so etwas wie:

if only($kdnr){
#starte insert into}
else {
&sub1}

???

Ich habe nämlich eine Vielzahl von Eingabefeldern und möchte die nicht einzeln abprüfen.

  1. Ich habe nämlich eine Vielzahl von Eingabefeldern und möchte die nicht einzeln abprüfen.

    Hallo Silke,

    sieht imho schlecht aus. Du könntest aber schreiben:

    unless (length($feld1.$feld2.$feld3.$feld4 ....)) {     # in Datenbank eintragen     } else {     # Fehlermeldung     }

    btw: ich habe bwußt "length(...)" genommen, denn ein Test    unless ($feld1.$feld2.$feld3.$feld4) {... würde probeleme bereiten, wenn "0" eine gültige Eingabe ist.

    Ciao   K@rl

    1. unless (length($feld1.$feld2.$feld3.$feld4 ....)) {
          # in Datenbank eintragen
          }
      else {
          # Fehlermeldung
          }

      Kann ich damit auch einen Datenbankeintrag machen, wenn nur zwei Felder von mehreren ausgefüllt sind? Ich möchte nämlich einen Datenbankeintrag dann machen, wenn mindestens ein Feld außer der Kundennummer eingetragen wurde. In meinem Formular existieren auch Kannfelder; deshalb die Prüfung ;-)

      1. Hallo,

        Kann ich damit auch einen Datenbankeintrag machen, wenn nur zwei Felder von mehreren ausgefüllt sind? Ich möchte nämlich einen Datenbankeintrag dann machen, wenn mindestens ein Feld außer der Kundennummer eingetragen wurde. In meinem Formular existieren auch Kannfelder; deshalb die Prüfung ;-)

        In Anlehnung an des Ausgangsposting (die Erwartung einer Funktion 'only' finde ich übrigens toll) könntest Du das eventuell so lösen:

        sub only
        {
        return 0 unless $kdnr;
        return 1 if $feld1;
        return 1 if $feld2;
        return 1 if $feld3;
        return 1 if $feld4;
        return 1 if $feld5;
        return 0;
        }

        oder wenn Du das Ganze z.B. in einem Hash gespeichert hast:

        sub only
        {
        my($must,$hashref) = @_;

        return 0 unless $hashref->{$must};
        foreach my $key(keys %$hashref)
          {
          return 1 if $hashref->{$key};
          }
        return 0;
        }

        Aufgerufen wird ersters dann
        if(&only)
           {
           &machwas;
           }
        else
           {
           &machnix;
           }

        und zweiteres

        if(&only('kdnr',%werte))
           {
           &machwas;
           }
        else
           {
           &machnix;
           }

        Aber das gibt es sicherlich noch viele andere Spielarten.

        Grüße
          Klaus

        1. Werd ich doch glatt mal ausprobieren ;-) Danke