Formularfelder mit Inhalt grösser als 0?

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Formularfelder mit Inhalt grösser als 0?

    Liebe PHP-Gemeinde

    Ich habe ein Formular, auf dem z.B. 20 Produkte aufgelistet sind. Neben jedem Produkt hat es ein Eingabefeld, in dem man die Anzahl eintragen kann. Standardmässig steht "0" drin.

    Wenn jetzt bei z.B. 3 Produkten jeweils eine Anzahl eingetragen wird und das Formular abgeschickt wird, sollten im Mail natürlich nur diese 3 Produkte mit der jeweiligen Anzahl aufgelistet sein.

    Welchen PHP-Ansatz muss ich da nehmen damit nicht auch die anderen 17 Produkte mit "0"-Anzahl aufgelistet werden? Wäre "for-each" der richtige Weg? Also so:

    for($_POST['anzahl'] > 0) {
    Auflistung*
    }

    *diesen Auflistungscode muss ich dann natürlich noch herausfinden und ergänzen.. aber mir gehts jetzt vor allem mal um den "for"-Code.

    Vielen Dank für eure Hilfe

  • #2
    Wie hast du denn die einzelnen Eingabefelder benannt?

    Peter
    Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
    Meine Seite

    Kommentar


    • #3
      Zitat von Kropff Beitrag anzeigen
      Wie hast du denn die einzelnen Eingabefelder benannt?
      Peter
      Hallo Peter

      Das Anzahl-Feld sieht im jeweils Formular so aus:
      HTML-Code:
      <input value="0" name="anzahl[154]" />
      <input value="0" name="anzahl[157]" />
      <input value="0" name="anzahl[162]" />
      <input value="0" name="anzahl[163]" />
      <input value="0" name="anzahl[166]" />
      usw.
      Wobei die Zahl in den eckigen Klammern jeweils der Artikel-Nr. entspricht.
      Im Mail steht dann also quasi:

      Anzahl für Artikel 157: 4
      Anzahl für Artikel 163: 7

      Kommentar


      • #4
        Und wo ist nun das Problem? Zur Anschauung:
        PHP-Code:
        $str '';
        foreach(
        $_POST['anzahl'] as $key => $value)
        {
          if (!empty(
        $value))
          {
            
        $str .=  $key.'-'.$value."\n";
          }
        }
        echo 
        $str
        Peter
        Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
        Meine Seite

        Kommentar


        • #5
          PHP-Code:
          foreach($_POST["anzahl"]) as $artikelNr=>$anzahl)
          {
             if(
          $anzahl 0)
             {
                 
          //mach was
             
          }

          Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
          Schön - etwas Geschichte kann ja nicht schaden.
          Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!

          Kommentar


          • #6
            Zitat von Kropff Beitrag anzeigen
            Und wo ist nun das Problem? Zur Anschauung:
            PHP-Code:
            $str '';
            foreach(
            $_POST['anzahl'] as $key => $value)
            {
              if (!empty(
            $value))
              {
                
            $str .=  $key.'-'.$value."\n";
              }
            }
            echo 
            $str
            Peter
            jetzt praktisch nirgends mehr..

            mir war einfach nicht klar wie ich es in die for-Schleife packen sollte. Bzw. wollte ich die Abfrage quasi schon in der foreach-Zeile machen.... So gibts mir jetzt schön die Artikel-ID und die Anzahl aus. Jetzt brauche ich es eigentlich nur noch mit den restlichen Angaben zu kombinieren. Aber das sollte ich hinkriegen!
            Vielen Dank!!!

            Kommentar


            • #7
              das nächste Problem ist jetzt doch noch aufgetaucht...
              Die Ausgabe nur von den Artikeln bei denen der Kunde eine Anzahl eingibt, klappt perfekt. Jetzt hat es aber ein weiteres Input-Feld "extras" gegeben. In diesem Feld sind standardmässig versch. mögliche Geschmacksrichtungen eingetragen. Der Kunde kann nun aus diesem Feld, wenn nötig, die Geschmacksrichtungen löschen, die er nicht will...

              Code:
              <input value="Natur,Curry" name="geschmacksrichtung[153]" /> 
              <input value="0" name="anzahl[153]" />
              
              <input value="Natur,Curry,Peperoncino" name="geschmacksrichtung[156]" /> 
              <input value="0" name="anzahl[156]" />
              
              <input value="Natur,Quattro gusti" name="geschmacksrichtung[157]" /> 
              <input value="0" name="anzahl[157]" />
              
              <input value="Natur" name="geschmacksrichtung[160]" /> 
              <input value="0" name="anzahl[160]" />
              
              <input value="Natur,Curry" name="geschmacksrichtung[163]" /> 
              <input value="0" name="anzahl[163]" />
              Ich dachte mir jetzt, ich könnte ja bei der foreach-Anweisung eine zweites Element einbauen, also in dieser Art

              Code:
              $str = '';
              
              foreach($_POST['anzahl'] as $key => $value AND $_POST['geschmacksrichtung'] as $key2 => $value2 ) 
              
              {
                if (!empty($value))
                {
                  $str .=  $key.'-'.$value.'-'.$value2."\n";
                }
              }
              echo $str;
              Aber das bringt mir eine Fehlermeldung. Gibt es eine Möglichkeit, diese zwei Anweisungen zu kombinieren?
              Als Ausgabe sollen wie bisher nur die Einträge aufgeführt werden, die auch Anzahl grösser als 0 haben. Aber einfach noch mit dem dazugehörenden Geschmacksfeld.

              Hoffe ihr versteht was ich meine....
              Vielen Dank!
              Zuletzt geändert von Fanello; 02.01.2010, 11:02.

              Kommentar


              • #8
                Warum willst du das überhaupt übergeben? Woher kommen die Geschmacksrichtungen? Gibt die der User ein?

                Kommentar


                • #9
                  das ganze ist eigentlich ein ganz "simpler" Shop-Script.
                  Die Geschmacksrichtungen stehen bereits in diesem Input-Feld, da diese aus der DB ausgelesen werden. Die Produkte haben aber nicht alle die gleichen Geschmacksrichtungen.
                  Einige sind nur "Natur", andere haben z.B. auch Curry und/oder Peperoncino.

                  Der User kann nun bei einem Produkt mit mehreren Geschmacksrichtungen diejenige aus dem Input-Feld löschen, die er nicht will.

                  Es ist eigentlich nicht ganz ideal her vom Ansatz.. denn es wäre wahrscheinlich einiges benutzerfreundlicher, wenn es mit Checkboxen gelöst wäre. Also bei jedem Produkt sind die versch. erhältlichen Geschmacksrichtungen mittels Checkbox anwählbar.

                  Da hätte ich aber auch ein Problem.. Die Geschmacksrichtungen sind in der einem Feld der DB-Tabelle eingetragen und jeweils mit einem Komma getrennt. Also z.B. "Natur,Curry,Peperoncino". Mit "explode" könnte ich diese ja nun quasi in ein Array schreiben. Aber nun müsste ich aus diesem Array Checkboxen generieren, und da hört mein aktuelles Wissen auf..
                  Müsste das mit einer While-Schleife gelöst werden?

                  Kommentar


                  • #10
                    Zitat von Fanello Beitrag anzeigen
                    das ganze ist eigentlich ein ganz "simpler" Shop-Script.
                    Die Geschmacksrichtungen stehen bereits in diesem Input-Feld, da diese aus der DB ausgelesen werden. Die Produkte haben aber nicht alle die gleichen Geschmacksrichtungen.
                    Einige sind nur "Natur", andere haben z.B. auch Curry und/oder Peperoncino.
                    Und warum übergibst du die Geschmacksrichtungen im Input-Feld, wenn sie doch eh in der Datenbank stehen? Es reicht doch, wenn du einfach nur die ID übergibst:

                    Code:
                    <input type="text" name="anzahl[1]" />
                    <input type="text" name="anzahl[2]" />
                    <input type="text" name="anzahl[3]" />
                    1, 2 und 3 wären in dem Fall die ID zum Eintrag in der Datenbank.

                    Zitat von Fanello Beitrag anzeigen
                    Da hätte ich aber auch ein Problem.. Die Geschmacksrichtungen sind in der einem Feld der DB-Tabelle eingetragen und jeweils mit einem Komma getrennt. Also z.B. "Natur,Curry,Peperoncino". Mit "explode" könnte ich diese ja nun quasi in ein Array schreiben. Aber nun müsste ich aus diesem Array Checkboxen generieren, und da hört mein aktuelles Wissen auf..
                    Müsste das mit einer While-Schleife gelöst werden?
                    Das Datenbankdesign ist fehlerhaft. Mehrere Werte dürfen nicht mit Komma getrennt werden. Halte ich an die Normalformen:

                    Normalisierung (Datenbank) – Wikipedia
                    Zuletzt geändert von h3ll; 02.01.2010, 11:38.

                    Kommentar


                    • #11
                      Zitat von h3ll Beitrag anzeigen
                      Und warum übergibst du die Geschmacksrichtungen im Input-Feld, wenn sie doch eh in der Datenbank stehen? Es reicht doch, wenn du einfach nur die ID übergibst:

                      Code:
                      <input type="text" name="anzahl[1]" />
                      <input type="text" name="anzahl[2]" />
                      <input type="text" name="anzahl[3]" />
                      der User muss ja aber die Möglichkeit haben, die Geschmacksrichtung zu löschen die er nicht will. Es kann ja sein, dass ein Produkt in 4 Geschmacksrichtungen erhältlich ist und vielleicht mag er zwei davon überhaupt nicht und er will das Produkt nur in den anderen beiden Geschmacksrichtungen haben.

                      Kommentar


                      • #12
                        Zitat von Fanello Beitrag anzeigen
                        der User muss ja aber die Möglichkeit haben, die Geschmacksrichtung zu löschen die er nicht will. Es kann ja sein, dass ein Produkt in 4 Geschmacksrichtungen erhältlich ist und vielleicht mag er zwei davon überhaupt nicht und er will das Produkt nur in den anderen beiden Geschmacksrichtungen haben.
                        Dafür gibts die Check-Boxen.

                        Kommentar


                        • #13
                          Zitat von h3ll Beitrag anzeigen
                          Dafür gibts die Check-Boxen.
                          ja genau. Das war jetzt eben die zweite Überlegung. Ist es möglich die im aktuellen Datenbank-Design aufgeführten Geschmacksrichtungen (mit Komma getrennt) in Checkboxen zu generieren?
                          Wäre das nicht der richtige Ansatz?
                          Code:
                          for($i=0;$i<count($geschmack);$i++)
                          {
                          echo '<input type="checkbox" name="check'.$i.'" value="'.$geschmack[$i].'">'.$geschmack[$i].'<br>';
                          }

                          Kommentar


                          • #14
                            Geht mit explode() und foreach(). Würde aber dringend dazu raten, das Datenbankdesign in Ordnung zu bringen, sonst wirst du in Zukunft auf weitere Probleme stoßen.

                            Kommentar


                            • #15
                              werde mir die Zeit auf jeden Fall nehmen.. sobald der Auftrag abgeschlossen ist. Leider haben wir diesen Übernommen und mein Chef hat sich einfach zu wenig gut informiert wie der Aufwand wäre...

                              Auf jeden Fall habe ich es jetzt hinbekommen, dass bei jedem Produkt die Anzahl benötigter Checkboxen angzeigt wird.

                              Danke!!!

                              Als nächstes muss ich noch die Checkbox-Formularwerte übertragen.. aber das sollte ich hinbekommen.

                              Kommentar

                              Lädt...
                              X