Der Fragende?: $_POST Array indexes auslesen

halloo,

ich versuche gerade mehrere Daten in einer Tabelle gleichzeitig zu ändern, also ein klick ändert alle Daten.

Die input-Elemente sehen wie folgt aus: <imput type='text' name='G[]'>

In die Namen der Elemente, wird zwischen den rechteckigen Klammern eine Zahl aus der Datenbank mit einer while-Schleife eingefügt, d.h. ich hole mir die Datensätze erst und gebe sie in einer Tabelle aus. Die ID des Datensatzes ist dann entsprechend gleich dem Index des Arrays.

So, nun zum Problem:
Es kann sein, dass Datensätze zwischendurch gelöscht wurden, die Nummerierung ist also nicht unbedingt folgend. Daraus ergeben sich Muster wie diese:
      G[1]
      G[3]
      G[6]
      G[19]
usw. Also einige Indexes sind unbelegt. Ich weiß zwar wie ich jetzt mit count() zähle wie viele Datensätze ich habe. Das ist auch schön und gut, aber ich kann schlecht folgendes schreiben:

	for($i=0;$i<count($_POST['G']);$i++)  
	{  
		if(isset($_POST['G'][$i]))  
		{  
			echo $_POST['G'][$i] .' - ';  
		}  
	}

Datensatz mit Index 6 und 19 werden dementsprechend ausgegrenzt, da count nur bis 4 zählt. Mit print_r so weiß ich, zeigt er auch nur die gefüllten Datensätze an und sowas bräuchte ich, dass ich nicht unnötig jeden Datensatz abfragen muss, wenn jetzt ein Unterschied von 100 oder mehr dazwischen liegt. Ich glaube das macht sich nicht so gut auf die Performance.

Kann mir jemand einen Tipp geben, wie ich den nur vorhandenen Index anspreche, also 1 3 6 und 19 von $_POST['G']?
Mit current(); und end(); kann ich auch nur den Wert des ersten und letzten ausgeben, aber weiß nicht welchen index es hat.

Alternativ könnte ich den niedrigsten Wert und höchsten Wert während der while-Schleife (Ausgabe) zwischenspeichern, das sehe ich ja anhand der ID. Oder das komplette direkt irgendwo im Array zwischenspeichern, also jeden Wert, indem ich vorher ein Array erzeuge und mittel array_push immer ein zusätzlichen Wert dranhänge. Doch es würde mich brennend interessieren, ob es auch ohne Zwischenspeicher möglich wäre.

Und falls jemand das anders lösen würde, kann er es mir auch sagen, wenn es von der Performance besser wäre.

würde mich sehr freuen!

mfg :)

  1. Om nah hoo pez nyeetz, Der Fragende?!

    Kann mir jemand einen Tipp geben, wie ich den nur vorhandenen Index anspreche, also 1 3 6 und 19 von $_POST['G']?

    foreach?

    Matthias

    --
    Der Unterschied zwischen Java und JavaScript ist größer als der zwischen Sonde und Sonderzeichen.

  2. Lieber Fragende,

    wie Mathias schon völlig richtig schrieb, suchst Du foreach, insbesondere die zweite Schreibweise:

    foreach ($_POST['G'] as $key => $value) {  
        // Wert in "..." verpacken:  
        $_POST['G'][$key] = "... $value ...";  
    }
    

    Liebe Grüße,

    Felix Riesterer.

    --
    ie:% br:> fl:| va:) ls:[ fo:) rl:| n4:? de:> ss:| ch:? js:) mo:} zu:)
    1. halloo

      ich danke euch beiden. Darauf hätte ich kommen müssen...

      mfg :)

    2. Meine Herren!

      foreach ($_POST['G'] as $key => $value) {

      // Wert in "..." verpacken:
          $_POST['G'][$key] = "... $value ...";
      }

        
      Bei Schreibzugriffen, finde ich die Referenz-Schreibweise angenehmer:  
        
      ~~~php
      foreach ($_POST['G'] as $key => &$value) { // & vor $value beachten  
           // Wert in "..." verpacken:  
           $value = "... $value ..."; // Hier wird der Vorteil* spürbar  
      }
      

      *) Aber das ist pure Geschmackssache. Andere Entwickler meiden diese Schreibweise, weil die Referenz nach der Schleife immer noch auf das letzte Array-Element zeigt und zu ungewollten Seiten-Effekten führen kann. Umgangen werden kann das mit einem anschließenden: unset( $value );

      --
      “All right, then, I'll go to hell.” – Huck Finn
    3. Hello,

      foreach ($_POST['G'] as $key => $value) {

      // Wert in "..." verpacken:
          $_POST['G'][$key] = "... $value ...";
      }

        
      Nur mal so als Teaser:  
        
      Wenn die Daten aus einer Datenbank kommen, die während der Abarbeitung der Abfrage weiterarbeitet:  
        
      es könnte dann immer noch zu einem Fehler führen, wenn die Daten inzwischen auch durch Andere  weiterverarbeitet wurden.  
        
      Seit der Abfrage könnten schon wieder Datensätze verschwunden sein.  
      Außerdem könnten Datensätze seit der Abfrage bearbeitet worden sein  
        
      Dafür gibt es "komplexe" Lösungsansätze.  
        
        
        
        
      Liebe Grüße aus dem schönen Oberharz  
        
        
      Tom vom Berg  
      ![](http://selfhtml.bitworks.de/Virencheck.gif)  
        
      
      -- 
       ☻\_  
      /▌  
      / \ Nur selber lernen macht schlau  
      <http://bikers-lodge.com>
      
  3. hi,

    Die input-Elemente sehen wie folgt aus: <imput type='text' name='G[]'>

    Kannse auch verbessern, mit einem namentlichen Index, so:
      name="G[foo]"
      name="G[bar]"

    und kannst dann über $_POST['G']['foo'] direkt darauf zugreifen.

    Horst Griffig