david: for schleife

hallo

<?php
$bestOK = true;
for($i=1;$i<=8;$i++)
{

if(!empty($ArtNr[$i]) or !empty($Gr[$i]) or !empty($Anz[$i]))
 {
    echo("$ArtNr[$i]  ");
 echo("$Gr[$i]  ");
 echo("$Anz[$i]  <br>");
    $bestOK = true;
 }
else
{
   $bestOK = false;
}
}
if( $bestOK == false)
{echo("sie haben nichts ausgefüllt");}

?>

die forschleife fragt die 8 zeilen ab. es genügt aber wenn der benutzer nur eine zeile ausfüllt, er braucht auch nur ein feld der zeile ausfüllen.

es sollte also nur dei fehker meldung ausgegebn werden wenn er KEINE
zeile ausfüllt.wie mach ich das?

danke

  1. <?php
    $bestOK = false;
    for($i=1;$i<=8;$i++)
    {

    if(!empty($ArtNr[$i]) or !empty($Gr[$i]) or !empty($Anz[$i]))
     {
        echo("$ArtNr[$i]  ");
     echo("$Gr[$i]  ");
     echo("$Anz[$i]  <br>");
        $bestOK = true;
     }
    }
    if( $bestOK == false)
    {echo("sie haben nichts ausgefüllt");}

    ?>

    so gehts
    ich bin soo mies, buahhh plärr
    für elegantere lösungen oder sonstige anregungen zum besseren programmieren bin ich immer offen

    1. Hallo,

      ich bin soo mies, buahhh plärr

      ooooh, eine Runde Mitleid!  ;-)

      für elegantere lösungen oder sonstige anregungen zum besseren programmieren bin ich immer offen

      Nein, der Ablauf ist so schon mal in Ordnung: Korrekt und durchschaubar.
      Ungewöhnlich ist, dass du die Indexe von 1 beginnend zählst; üblicherweise beginnt die Indizierung von Arrays bei 0. Aber das ist Geschmackssache, wenn die Arrays ($ArtNr[], $Gr[] und $Anz[]) auch so initialisiert sind.

      if(!empty($ArtNr[$i]) or !empty($Gr[$i]) or !empty($Anz[$i]))

      Bist du sicher, dass die Oder-Verknüpfung hier richtig ist? Es genügt also, wenn eine Artikelnummer ODER eine Größe ODER eine Anzahl eingegeben wird? Ich vermute, hier sollte jeweils ein logisches und stehen. Oder? ;-)

      if( $bestOK == false)

      Das kann man eleganter schreiben als
        if (!$bestOK)
      Aber das ist eine Frage des persönlichen Stils.

      Schönen Sonntag noch,
       Martin

      --
      Die letzten Worte der Challenger-Crew:
      Lasst doch mal die Frau ans Steuer!
      1. also des mit den arrays hab ich von unserem lehrer so gelernt.

        Bist du sicher, dass die Oder-Verknüpfung hier richtig ist? Es genügt also, wenn eine Artikelnummer ODER eine Größe ODER eine Anzahl eingegeben wird? Ich vermute, hier sollte jeweils ein logisches und stehen. Oder? ;-)

        ja so is das nat. nicht so sinnvoll, aber das ist nur zum testen(sprich üben) und ich wollt halt das oben genannte prob lösen.

        es geht eigentlich nur darum den user zu sagen
        1. du hast nix ausgef.
        2. du hast falsch ausgef.*

        *das will ich jetzt noch mit
          $ArtNrOK = ereg("[1]{8}$",$ArtNr[$i]);
          $AnzOK = ereg("[2][0-9]{0,3}$",$Anz[$i]);
          $GrOK = ereg("[(xl)(xxl)(m)(s)(l)]",$Gr[$i]); //geht das so???

        überprüfen.

        vielen dank fürs mitleid:-))


        1. 0-9 ↩︎

        2. 1-9 ↩︎

    2. hi

      wieso machst du die echos wie eine funktion? du schreibst

      echo ("test");

      echo "test"; ist aber richtig

      wenn du nur eine variable ausgeben willst, schreibst du:

      echo "$test";

      richtig ist aber:
      $test

      lg
      nick

      1. Hallo nick.

        wieso machst du die echos wie eine funktion? du schreibst

        echo ("test");

        echo "test"; ist aber richtig

        Nein, beides ist korrekt:

        echo() ist nicht wirklich eine Funktion sondern ein Sprach-Konstrukt, daher _brauchen_ Sie keine Klammern verwenden.

        Nichtsdestotrotz sind die Klammern üblicherweise überflüssig.

        wenn du nur eine variable ausgeben willst, schreibst du:

        echo "$test";

        richtig ist aber:
        $test

        Du meinst sicher „echo $test“. Auch hier sind die umschließenden Zeichen schlichtweg überflüssig.

        Einen schönen Sonntag noch.

        Gruß, Ashura

        --
        sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
        „It is required that HTML be a common language between all platforms. This implies no device-specific markup, or anything which requires control over fonts or colors, for example. This is in keeping with the SGML ideal.“
        [HTML Design Constraints: Logical Markup]
      2. Hallo,

        wieso machst du die echos wie eine funktion? du schreibst
        echo ("test");
        echo "test"; ist aber richtig

        das ist Geschmackssache. Sicher, echo ist keine Funktion. Aber ebenso wie z.B. bei include *kann* man Klammern setzen, wenn man möchte - man muss es aber nicht. Aus stilistischen Gründen verwende ich aber auch in solchen Fällen Klammern, ebenso wie beim return. Ohne Klammern sieht's für meine Augen irgendwie unvollständig aus.

        wenn du nur eine variable ausgeben willst, schreibst du:
        echo "$test";
        richtig ist aber:

        echo $test;

        Ja, hier ist dein Einwand berechtigt: Warum dem Parser erst einen String anbieten, in den er eine Variable hineinoperieren soll, wenn man diese Variable auch direkt ausgeben könnte. Hier ist es tatsächlich ein Performancegewinn - wenn auch ein sehr geringer, denn bei der Ausgabe muss der Variableninhalt so oder so in einen String umgewandelt werden.

        Ciao,
         Martin

        --
        Die letzten Worte des Architekten:
        Mir fällt da gerade was ein...
        1. echo $begrüßung;

          wieso machst du die echos wie eine funktion? du schreibst
          echo ("test");
          echo "test"; ist aber richtig

          das ist Geschmackssache. Sicher, echo ist keine Funktion. Aber ebenso wie z.B. bei include *kann* man Klammern setzen, wenn man möchte - man muss es aber nicht. Aus stilistischen Gründen verwende ich aber auch in solchen Fällen Klammern, ebenso wie beim return. Ohne Klammern sieht's für meine Augen irgendwie unvollständig aus.

          Dieser Meinung schließe ich mich nicht an. Die Klammern kapseln hier einen (Teil-)Ausdruck. Ihre Funktion ist gleichzusetzen mit den Klammern im Ausdruck (a + b) * c. Zuerst wird der in Klammern stehende Ausdruck ausgerechnet, danach der Rest ausgeführt.

          Die Klammern hören spätestens dann auf "Geschmackssache" zu sein, wenn sie wirklich fehlplatziert sind.

          $a = 42;
            $b = ($a);

          Das ist kein Fehler. Das kann man so schreiben, die Klammern sind nur überflüssig.

          $a = 42;
            $b =& ($a);

          Hier soll $b eine Referenz auf $a werden. ($a) ist aber ein Ausdruck und nicht die Variable $a. Referenzen kann man nur auf Variablen anlegen, nicht auf Ausdrücke. Ergebnis ist ein Parse-Error.

          Das gleiche gilt, wenn eine Funktion eine Referenz zurückgeben soll:

          return ($a);

          Hier ist ($a) wiederum ein Ausdruck, auf den keine Referenz zeigen kann. Das meckert der Parser nicht an, das gibt "nur" eine Notiz. Man beachte das zweite Note: Returning References

          echo "$verabschiedung $name";