Ankündigung

Einklappen
Keine Ankündigung bisher.

Mehrdimensionales Array + Schleifen?

Einklappen

Neue Werbung 2019

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

  • Mehrdimensionales Array + Schleifen?

    Hallo PHP'ler,

    ich steh' irgendwie auf'm Schlauch und es klappt mal wieder nicht so wie ich möchte, deswegen sah' ich als letzten Lösungsweg ein Post hier im Forum.

    Ich bin dabei für meinen Vater eine Werkzeugverwaltungsplattform zu programmieren. Er betreibt einen Werkzeugverleih mit Hebebühnen, Kettensägen etc..

    Er kann in dieser Plattform neue Kunden anlegen, löschen, bearbeiten - genauso ist das für Werkzeuge möglich. Nun möchte er aber eine Übersicht haben in der er außerdem zuweisen kann, welcher Kunde, an welchem Tag und auch in welchem Zeitraum das Werkzeug belegt.

    Dazu habe ich ein multiples Select-Feld zum Auswählen der Werkzeuge erstellt, mit einem Datumfilter, damit er einstellen kann welchen Zeitraum er betrachten möchte.

    Sobald das Formular mit den ausgewählten Options und den beiden Datumsangaben abgeschickt wurde, werden in einer Tabelle soviele Zeilen wie Werkzeuge ausgewählt wurden, erstellt.

    Also in Koordinatensystemform wären auf der Y-Achse die Werkzeugnamen, auf der X-Achse die Tage.

    In jedem Feld soll jedoch nicht nur eine Sache gespeichert werden, sondern der Kundenname (auswählbar via Select-Feld, da vorher in Datenbank eingetragen), der Status der Werkzeugs (also belegt oder verfügbar), der Zeitraum bzw. eine Checkbox für "ganztätig", sowie eine Checkbox für das löschen der Werte dieses Feldes.

    Unter der Tabelle soll ein einziger Button stehen, der alles speichert. Also bei mehreren ausgewählten Werkzeugen, alle Kundennamen, alle Uhrzeiten für jeden der betrachteten Tage.

    Daher dachte ich an ein 3-dimensionales Array...

    Mein Problem dabei ist, dass ich zurzeit nur den letzten Wert ausgegeben bekomme via
    PHP-Code:
    print_r($_POST); 
    . Also wenn der letzte Tag in der Auswahl der 03.09.2014 ist dann bekomme ich in dem Array nur diesen Wert und den Kundennamen, den ich in diesem Feld ausgewählt habe.

    Vielleicht könnt ihr sehen wo mein Fehler liegt?


    Mein Code sieht folgendermaßen aus:

    PHP-Code:
    <form method="post" action="">
    <input type="hidden" name="werkzeugeSelect[]" value="<?php echo $werkzeuge?>" /> // beinhaltet die ausgewählten Werkzeuge aus dem multiplen Select-Feld (sollen nach neuladen der Seite bestehen bleiben)
    <?php
        
    foreach($werkzeuge as $w){
            
    ?>
                    <input type="hidden" name="belegt[Werkzeug]" value="<?php echo $w?>" />
            <tr>
                <td style="background:white;">
                    <?php 
                        $werkzeugName 
    $DE->getWerkzeugName($w); 
                        echo 
    $werkzeugName;
                    
    ?>
                    
                </td>
    <?php
                        $counter 
    0;
                        
    $start $_SESSION['belegtVon'];
                        
    $startArr explode("-",$start);
                        
    $startDay $startArr[2];
                        
    $startMonth $startArr[1];
                        
    $startYear $startArr[0];
                        
    $startDatum $startYear "-" $startMonth "-" $startDay;
                        
    $end $_SESSION['belegtBis'];
                        
    $endArr explode("-",$end);
                        
    $endDay $endArr[2];
                        
    $endMonth $endArr[1];
                        
    $endYear $endArr[0];
                        
    $endDatum $endYear "-" $endMonth "-" $endDay;
                        
    $endStamp strtotime($endDatum);
                        
    $curr strtotime($startDatum);
                        while(
    $curr <= $endStamp){
                            
    $counter++;
                            
    ?>
                            <td style="background:white;">
                            <?php 
                            $currDate 
    date("Y-m-d"$curr);
                            
    ?>
                                                    <input type="hidden" name="belegt[Datum]" value="<?php echo $currDate?>" />
                                                   <?php
                                                   $wDateData 
    $DE->getDateData($currDate$w);
                            if(!empty(
    $wDateData)){
                                                           
    // Anzeige der Daten
                            
    }else{
                                
    ?>

                                <input type="hidden" name="werkzeuge" value="<?php echo $consultants?>" />
                                <select name="belegt[Werkzeug][Datum][Kunde]" size="1">
                                <?php
                                
    echo '        <option>Kunde</option>';
                                                            
    // $kundenDatas beinhaltet die Namen der Kunden
                                
    foreach($kundenDatas AS $k){
                                    echo 
    '<option ';
                                    echo 
    '>'.$k['ID'].'</option>';
                                    
    ?>
                                    <?php
                                
    }
                                echo 
    '    </select><br />';
                                
    ?>
                                <?php
                
                                ?>
                                <?php
                                
    echo '    <select name="belegt[Werkzeug][Datum][Status]" size="1">';
                                echo 
    '        <option>Status</option>';
                                                           
    // $StatusDatas beinhaltet die Namen der Status
                                
    foreach($StatusDatas AS $Status){
                                    echo 
    '<option ';
                                    echo 
    '>'.$Status['statusName'].'</option>';
                                }
                                echo 
    '    </select><br />';
                            }
                            
    ?>
                            </td>
                            <?php
                            $curr 
    += 86400;
                        }
                        
    ?>
                        <td>
                        <input type="submit" name="table_submit" value="Speichern" />
                        </td>
                </tr>
                </form>
                <?php
        
    }
    ?>
    Vielleicht kann mir jemand von euch weiterhelfen?


  • #2
    Damit
    Code:
    name="belegt[Werkzeug]
    hast du mehrfach den selben Namen und somit bekommt du per Formular den Wert des letzten Elements mit diesem Namen. Das trifft bei all deinen Formularfeldern zu
    Die Deutsche Rechtschreibung ist Freeware! Du darfst sie kostenlos nutzen, allerdings ist sie nicht Open Source, d.h. Du darfst sie nicht verändern oder in veränderter Form veröffentlichen.

    Kommentar


    • #3
      Also wäre es so richtig?

      PHP-Code:
      <form method="post" action="">
      <input type="hidden" name="werkzeugeSelect[]" value="<?php echo $werkzeuge?>" /> // beinhaltet die ausgewählten Werkzeuge aus dem multiplen Select-Feld (sollen nach neuladen der Seite bestehen bleiben)
      <?php
          
      foreach($werkzeuge as $w){
                     echo 
      "<input type='hidden' name='belegt[$w]' value='$w' />";
      ?>
              <tr>
                  <td style="background:white;">
                      <?php 
                          $werkzeugName 
      $DE->getWerkzeugName($w); 
                          echo 
      $werkzeugName;
                      
      ?>
                      
                  </td>
      <?php
                          $counter 
      0;
                          
      $start $_SESSION['belegtVon'];
                          
      $startArr explode("-",$start);
                          
      $startDay $startArr[2];
                          
      $startMonth $startArr[1];
                          
      $startYear $startArr[0];
                          
      $startDatum $startYear "-" $startMonth "-" $startDay;
                          
      $end $_SESSION['belegtBis'];
                          
      $endArr explode("-",$end);
                          
      $endDay $endArr[2];
                          
      $endMonth $endArr[1];
                          
      $endYear $endArr[0];
                          
      $endDatum $endYear "-" $endMonth "-" $endDay;
                          
      $endStamp strtotime($endDatum);
                          
      $curr strtotime($startDatum);
                          while(
      $curr <= $endStamp){
                              
      $counter++;
                              
      ?>
                              <td style="background:white;">
                              <?php 
                              $currDate 
      date("Y-m-d"$curr);
                                                      echo 
      "<input type='hidden' name='belegt[$currDate]' value='$currDate' />";
                                                     
      $wDateData $DE->getDateData($currDate$w);
                              if(!empty(
      $wDateData)){
                                                             
      // Anzeige der Daten
                              
      }else{
                                  
      ?>

                                  <input type="hidden" name="werkzeuge" value="<?php echo $belegt?>" />
                                  <?php echo "<select name='belegt[$w][$currDate][Kunde]' size='1'>";
                           
                                  echo 
      '        <option>Kunde</option>';
                                                              
      // $kundenDatas beinhaltet die Namen der Kunden
                                  
      foreach($kundenDatas AS $k){
                                      echo 
      '<option ';
                                      echo 
      '>'.$k['ID'].'</option>';
                                      
      ?>
                                      <?php
                                  
      }
                                  echo 
      '    </select><br />';
                                  
      ?>
                                  <?php
                  
                                  ?>
                                  <?php
                                  
      echo '    <select name="belegt[$w][$currDate][Status]" size="1">';
                                  echo 
      '        <option>Status</option>';
                                                             
      // $StatusDatas beinhaltet die Namen der Status
                                  
      foreach($StatusDatas AS $Status){
                                      echo 
      '<option ';
                                      echo 
      '>'.$Status['statusName'].'</option>';
                                  }
                                  echo 
      '    </select><br />';
                              }
                              
      ?>
                              </td>
                              <?php
                              $curr 
      += 86400;
                          }
                          
      ?>
                          <td>
                          <input type="submit" name="table_submit" value="Speichern" />
                          </td>
                  </tr>
                  </form>
                  <?php
          
      }
      ?>

      Kommentar


      • #4
        Zitat von razzru Beitrag anzeigen
        Also wäre es so richtig?
        Wenn's funktioniert, vielleicht ja. Wenn's nicht funktioniert, dann nein.
        Die Deutsche Rechtschreibung ist Freeware! Du darfst sie kostenlos nutzen, allerdings ist sie nicht Open Source, d.h. Du darfst sie nicht verändern oder in veränderter Form veröffentlichen.

        Kommentar


        • #5
          Hat super geklappt! Danke

          Kommentar


          • #6
            Eine letzte Frage habe ich jedoch noch....

            Wie lese ich das gesamte Array nun am effizientesten aus?

            Irgendwie funktioniert mein Code hier nicht:

            PHP-Code:
            if(isset($_POST['table_submit'])){
                
            $belegt $_POST['belegt'];
                foreach(
            $werkzeuge as $w){
                    
            $anfang $_POST['startDate'];
                    
            $ende $_POST['endDate'];
                    
            $curr strtotime($anfang);
                    
            $endStamp strtotime($ende);
                    while(
            $curr <= $endStamp){
                        
            $current date("Y-m-d"$curr);
                        foreach (
            $belegt as $id => $content){
                            echo 
            $content[$id];
                                
                            }
                                
            $curr += 86400;
                    }
                }

            Folgendes wird über

            PHP-Code:
            print_r($_POST); 
            ausgegeben.

            Code:
            Array ( [startDate] => 2014-08-29 [endDate] => 2014-09-04 [belegt] => Array ( [0002] => Array ( [2014-08-29] => Array ( [Kunde] => Kunde [Status] => Status ) [2014-08-30] => Array ( [Kunde] => Kunde [Status] => Status ) [2014-08-31] => Array ( [Kunde] => Kunde [Status] => Status ) [2014-09-01] => Array ( [Kunde] => Kunde [Status] => Status ) [2014-09-02] => Array ( [Kunde] => Kunde [Status] => Status ) [2014-09-03] => Array ( [Kunde] => KUNDE [Status] => Status ) [2014-09-04] => Array ( [Kunde] => Kunde [Status] => Status ) ) ) [table_submit] => Speichern )

            Kommentar


            • #7
              Wenn der Code nicht funktioniert solltest du erstmal richtig Debuggen.

              http://www.php.de/wiki-php/index.php...ging:Leitfaden
              http://tut.php-quake.net/de/error.html

              Und woher kommt $werkzeuge?

              Kommentar


              • #8
                Also der Code funktioniert nur gibt er nicht das richtige aus ...

                PHP-Code:
                $werkzeuge $_SESSION['werkzeuge']; // beinhaltet alle ausgewählten Werkzeuge 

                Kommentar


                • #9
                  Trotzdem mal Debuggen!

                  Wo speicherst du eigentlich die ganzen Daten? Also von wan bis wan welches Werkzeug reserviert ist, usw. Es wäre denke ich einfacher sowas per Datenbank dann abzufragen.

                  Was mir gerade nochmal aufgefallen ist:

                  PHP-Code:
                  <form method="post" action="">
                  <input type="hidden" name="werkzeugeSelect[]" value="<?php echo $werkzeuge?>" /> // beinhaltet die ausgewählten Werkzeuge aus dem multiplen Select-Feld (sollen nach neuladen der Seite bestehen bleiben)
                  <?php
                      
                  foreach($werkzeuge as $w){
                                 echo 
                  "<input type='hidden' name='belegt[$w]' value='$w' />";
                  ?>
                  Du setzte $werkzeuge als value im Inputfeld und möchtest es dann per Schleife verarbeiten?

                  Kommentar

                  Lädt...
                  X