Input Felder, For each und Insert in DB

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

  • Input Felder, For each und Insert in DB

    Hi,

    such nun schon den ganzen Tag nach einer Lösung für mein Problem, aber
    ohne Erfolg.

    Ich entwickle mir gerade ein kleines Kochbuch habe nun aber ein Problem
    mit der Zutatenliste.

    Ich habe dafür 3 Input Felder für die jeweiligen Zutaten.

    Also Zutatenname, Menge und die Einheit.

    Man kann nun natürlich 10 oder 20 Zutaten haben. Daher verwende ich ein
    Array.

    PHP-Code:
    <input  name="Zutaten[]"  type="text" value="<? $Zutaten[0] ?>">
    <input  name="Menge[]"  type="text" value="<? $Menge[0]?>">
    <input  name="Einheit[]"  type="text" value="<? $Einheit[0]?>">
    Ich rufe dann eine Funktion auf um die Werte in die DB einzutragen. Dafür
    wollte ich dann die Foreach verwenden. Das klappt auch gut mit den
    Zutaten, aber natürlich brauche ich auch noch die jeweilige Menge und
    Einheit. Habe das mit 2 For each probiert aber dann werden immer viel zu
    viele Werte eingetragen. Ich sitze wirklich auf der Leitung hier. Wo ist
    denn da der Gedankenfehler?

    PHP-Code:
    foreach ($_POST['Zutaten'] as $key => $Zutaten ) {
    if (
    trim($Zutaten!="")){
        
    //foreach ($_POST['Menge'] as $key2 => $Menge ) {
        //if (trim($Menge!="")){
        
    $DBConnection->query("INSERT INTO tblZutaten 
    (RezeptID,Zutatenname,Zutatenmenge) VALUES ('"
    .$_Session
    ['RezeptID']."','".$Zutaten."','".$Menge."')"); 

    //}
    }

    Hoffe jemand hat einen Tip. Habe die Suche bereits auch probiert aber
    nichts passendes gefunden. Vielen Dank im voraus für Eure Hilfe.

    Gruss Luka

  • #2
    wozu foreach, warum nicht for? mit Count ermittelst du die Größe des Arrays et voilà

    Kommentar


    • #3
      Re: Input Felder, For each und Insert in DB

      Original geschrieben von Luka
      Man kann nun natürlich 10 oder 20 Zutaten haben. Daher verwende ich ein array
      Und wie baust du es dann auf ?
      Hast du pro zeile dann jeweils 3 Inputfelder ?

      Ich würde es mal so aufbauen:
      PHP-Code:
      zutat[name][]
      zutat[menge][]
      zutat[einheit][] 
      Somit kannst du dann in einer for schleife auf die restlichen werte der zutat für das gericht zugreifen (mit count $i++.


      EDIT: so zb.
      PHP-Code:
        for ($i=0;$i<count($_POST['zutat']['name']);$i++)
        {
         echo 
      '<pre>';
         
      print_r($_POST['zutat']);
         echo 
      '</pre>';
        } 


      Sers
      Der Boris
      Zuletzt geändert von boris-schneider; 25.04.2006, 20:25.

      Kommentar


      • #4
        @asp2php

        versuche das gerade mit dem count aber im moment zählt er auch noch die leeren Input Felder mit.


        @boris-schneider

        ja ich habe pro Zeile jeweils 3 Inputfelder, wobei ich das noch ändern
        und dann per Schleife dynamisch erstellen wollte.

        Ich muss mir Deinen Vorschlag jetzt aber mal genauer anschauen und ausprobieren. Mal schauen ob es klappt.


        Vielen Dank schonmal für die Hilfe.

        Kommentar


        • #5
          @boris-schneider


          Also ich weiss ja nicht, was ich da falsch mache, aber als Anzahl gibt er mir die gesamt Anzahl des Arrays an. Sprich ich habe jetzt 3 Reihen also ist array count 3 auch wenn die leer sind. Versuche ich den Wert mal auszugeben steht da nur Array drinn. Na ja, Arrays waren echt nie mein Freund aber irgenwann muss es doch mal klick sagen...

          Kommentar


          • #6
            ich habe nen kleinen fehler gemacht
            ansonsten ist das vorgehen so korrekt.

            Aber so wie du es laufen hast kann es ja nicht gehen, denn du hast ja mit:
            PHP-Code:
            Zutaten[]
            Menge[]
            Einheit[] 
            Jeweils drei verschiedene arrays, wenn du dann mehrere inputfelder zu verfügung stellst schaut das ganze ja so aus:

            PHP-Code:
            <input  name="Zutaten[]"  type="text" value="<? $Zutaten[0] ?>">
            <input  name="Menge[]"  type="text" value="<? $Menge[0]?>">
            <input  name="Einheit[]"  type="text" value="<? $Einheit[0]?>">
            <input  name="Zutaten[]"  type="text" value="<? $Zutaten[0] ?>">
            <input  name="Menge[]"  type="text" value="<? $Menge[0]?>">
            <input  name="Einheit[]"  type="text" value="<? $Einheit[0]?>">
            <input  name="Zutaten[]"  type="text" value="<? $Zutaten[0] ?>">
            <input  name="Menge[]"  type="text" value="<? $Menge[0]?>">
            <input  name="Einheit[]"  type="text" value="<? $Einheit[0]?>">
            <input  name="Zutaten[]"  type="text" value="<? $Zutaten[0] ?>">
            <input  name="Menge[]"  type="text" value="<? $Menge[0]?>">
            <input  name="Einheit[]"  type="text" value="<? $Einheit[0]?>">
            etc.
            Du musst schon einen array bestimmen und den namen der zutat wie auch die menge und die einheit zu der "einen" zutat zuordnen, sonst bekommst du nie das gewünschte ergebnis



            Sers
            Der Boris
            Zuletzt geändert von boris-schneider; 25.04.2006, 21:04.

            Kommentar


            • #7
              Irgendwie macht das Sinn was Du da sagst, das habe ich so nicht gesehen. Dachte halt wirklich das ich ruhig 3 Arrays haben kann und diese dann entsprechend für das Insert auslesen kann.

              Also muss ich die Felder nun alle mit

              zutat[Name][]
              zutat[Menge][]
              Zutat[Einheit][] benennen. Aber ich begreife immer noch nicht wie ich nun nur die ausgefüllten lesen und dann das entsprechende Insert ausführen kann.

              Man komme ich mir mal wieder blöd vor..

              Kommentar


              • #8
                Original geschrieben von Luka
                Aber ich begreife immer noch nicht wie ich nun nur die ausgefüllten lesen und dann das entsprechende Insert ausführen kann.
                wie wäre es mit:
                PHP-Code:
                if(!empty(... 
                so werden dann nur die variablen im foreach verarbeitet die "gefüllt" sind.



                Sers
                Der Boris

                Kommentar


                • #9
                  Man ich bin wirklich zu blöd dafür. Habe nun 2 Zutatenreihen. Wenn ich eine ausfülle bekomme ich nun aber 8 Einträge in die DB geschrieben.

                  Habe auch nur diesen beiden Felder:

                  <input name="zutat[name][]" type="text" value="<? $Zutaten[0] ?>">
                  <input name="zutat[menge][]" type="text" value="<? $Menge[0] ?>"

                  <input name="zutat[name][]" type="text" value="<? $Zutaten[1] ?>">
                  <input name="zutat[menge][]" type="text" value="<? $Menge[1] ?>">

                  Trage ich nun etwas in die 1. Reihe ein gibt das 8 Einträge in die DB.

                  PHP-Code:
                  for ($i=0;$i<count($_POST['zutat']['name']);$i++)
                    {
                     
                    

                  foreach (
                  $_POST['zutat']['name'] as $key => $Zutaten ) {
                  if (
                  $_POST['zutat']['name']!=""){
                      
                  $DBConnection->query("INSERT INTO tblZutaten (RezeptID,Zutatenname,Zutatenmenge) VALUES ('".$_Session
                  ['RezeptID']."','".$Zutaten."','".$_REQUEST['Menge']."')"); 

                  }}

                  Gibt 4 mal den Eintrag Erbsen und 4 mal nix. Boh wie verzwackt ist das denn?

                  Wo ist denn mal wieder mein Denkfehler, ich komme da einfach nicht drauf.

                  Kommentar


                  • #10
                    erm, IöI...
                    frage: wie lässt du denn die Input felder ausgeben, in einer Schleife ?
                    dann Nummeriere doch alle Felder durch..., du musst ja anfangs schon vorgeben "wieviele" inputfelder angezeigt werden, oder ?

                    PHP-Code:
                    <?php

                    echo '<form action="bsp.php" method="post">';

                    for(
                    $count 0$count 3$count++)
                    {
                    echo 
                    '
                    <input type="input" name="zutat['
                    .$count.'][name]">
                    <input type="input" name="zutat['
                    .$count.'][menge]">
                    <input type="input" name="zutat['
                    .$count.'][einheit]">
                    <br>
                    '
                    ;
                    }

                    echo 
                    '
                    <input type="submit" name="submit" value="Senden" />
                    </form>
                    '
                    ;

                    if(isset(
                    $_POST['submit']))
                    {

                    echo 
                    '<pre>';
                    print_r($_POST['zutat']);
                    echo 
                    '<pre>';

                    }

                    ?>
                    was dann:
                    PHP-Code:
                    <form action="bsp.php" method="post">
                    <
                    input type="input" name="zutat[0][name]">
                    <
                    input type="input" name="zutat[0][menge]">
                    <
                    input type="input" name="zutat[0][einheit]">
                    <
                    br>
                    <
                    input type="input" name="zutat[1][name]">
                    <
                    input type="input" name="zutat[1][menge]">
                    <
                    input type="input" name="zutat[1][einheit]">
                    <
                    br>
                    <
                    input type="input" name="zutat[2][name]">
                    <
                    input type="input" name="zutat[2][menge]">
                    <
                    input type="input" name="zutat[2][einheit]">
                    <
                    br>
                    <
                    input type="submit" name="submit" value="Senden" />
                    </
                    form
                    ..ergibt!

                    Eine andere möglichkeit fällt mir jetzt auch nicht ein, sorry...


                    Sers
                    Der Boris
                    Zuletzt geändert von boris-schneider; 25.04.2006, 22:33.

                    Kommentar


                    • #11
                      Lösung gefunden !!
                      PHP-Code:
                      for ($i=0;$i<count($_POST['zutat']);$i++)
                        {
                        
                      $zutat$_POST['zutat'][$i];

                      if(!empty (
                      $zutat['name'])){
                      $DBConnection->query("INSERT INTO tblZutaten (Zutatenname,Zutatenmenge,Zutateneinheit) VALUES ('".$zutat['name']."','".$zutat['menge']."','".$zutat['einheit']."')"); 

                      Nochmal vielen Dank für die Gedankenansätze. Am Schluss hat es also doch noch klick gemacht.
                      Zuletzt geändert von Luka; 26.04.2006, 10:54.

                      Kommentar

                      Lädt...
                      X