Variable trennen

psifactory

Erfahrenes Mitglied
Hallo,

stehe grad vor folgendem Problem:

Ich bekomme von einem Formular eine Post Variable übergeben die folgendermaßen aufgebaut ist:

Code:
["1-1"]=>
  string(2) "45"
  ["1-2"]=>
  string(2) "54"
  ["2-1"]=>
  string(2) "54"
  ["2-2"]=>
  string(2) "54"
  ["3-1"]=>
  string(2) "54"
  ["3-2"]=>
  string(2) "54"
  ["4-1"]=>
  string(2) "54"
  ["4-2"]=>
  string(2) "54"
  ["5-1"]=>
  string(2) "54"
  ["5-2"]=>
  string(2) "54"
  ["6-1"]=>
  string(2) "54"
  ["6-2"]=>
  string(2) "54"
  ["7-1"]=>
  string(1) "5"
  ["7-2"]=>
  string(3) "454"

Hier enthält die erste Zahl vor dem Strich die ID des Produktes und die zweite Zahl gibt an ob es eine Einzelmenge oder eine Verpackungseinheit ist. Also in etwa so:

Code:
ProduktID	Trenner   EinheitID
    4          -         2

Wie kriege ich das jetzt am Besten hin die Beiden Angaben aufzutrennen um sie dann in meine Datenbank zu schreiben?

EDIT: die ProduktID kann auch 2-3 Stellig sein.
 
Danke schonmal.
Habe jetzt allerdings noch das Problem dass ich in der $_post noch andere Werte habe, wie z.B. ein Datum.
Wie kriege ich nur die Werte welche den Bindestrich haben in z.b. ein Array um sie dann in eine datenbank zu schreiben? Ich würde das dann meiner Meinung nach am Besten in ein Multidimensionales Array schreiben um eben auch die aufgetrennten werte besser verarbeiten zu können. Oder kann man das auch direkt aus der $_post lösen?
 
Entweder du überprüfst, ob ein Bindestrich im Schlüssel enthalten ist, oder du machst es sauber, in dem du deine Felder sinnvoll benennst. Ich würde letzteres bevorzugen.
 
Ist leider etwas schwierig mit dem Benennen. Weil ich in der Eingabemaske Produkte mit ID´s habe die aus einer Datenbank ausgelesen werden und dann die Werte für Einzeln und VE eingegeben werden. Deswegen auch die Benennung "ProduktID - Verpackungseinheit"
 
falls nur die Produkte in ihrem Arraykey einen Bindestrich haben, kannst Du es quick and dirty machen, schön wird es so eh nicht, machen wir uns nichts vor:

Code:
foreach( $deinPostArray as $key => $value ){
  $explodedKey = explode("-", $key);
  if ( count($explodedKey) < 2 ){
    continue;
  }
  $productId = $explodedKey[0];
  $colliSwitch = $explodedKey[1];
    // hier kannst Du dann dein Array zum Abspeichern befüllen, oder sofort in die Datenbank schreiben
    // in $value steht der Wert des Arrays, der zu dem Key gehört.
}

Gib uns aber lieber mehr Infos, wie Du das Formular genutzt wird und wies in der Datenbank aussieht. Dann könnten wir das vielleicht sogar schöner machen ;)

LG
 
Gib uns aber lieber mehr Infos, wie Du das Formular genutzt wird und wies in der Datenbank aussieht. Dann könnten wir das vielleicht sogar schöner machen

Gerne doch! :) Bin leider "nur" Grafiker und noch ziemlich frisch in Sachen PHP ;)

Ich hab verschiedene Produkte in meiner Datenbank die wie folgt aussieht:

id | name | produkt_kategorie_id

Für diese Produkte muss ich öfters mal eine Bestandsaufnahme durchführen.
Um alle angelegten Produkte zu berücksichtigen (diese ändern sich auch öfters) hole ich mir den Produktnamen und die id aus der Datenbank und habe mir ein Formular gebaut in welchen ma dann die Produkte angezeigt bekommt und dafür einen Bestandswert für "Einzelflaschen" und "Verpackungseinheiten" angeben soll. Da ich die id des Produkts ja für die Auswertung brauche aber auch 2 Textfelder habe muss ich ja irgendetwas machen dass ich die produktkategorie unterscheiden kann.
Habe auch noch ein Datumsfeld in dem Formular welches dann in der Tabelle "bestand" zusammen mit einer ID angelegt werden soll um dieses dann den verschiedenen Produktbeständen zuzuteilen.

Die Daten sollen dann später übrigens in diese Tabellen geschrieben werden:

bestand:
id | datum

bestand_items:
id | bestand_id |*produkt_id |*anzahl_ez |*anzahl_ve

Dachte eigentlich die "eleganteste" Lösung ist die dass ich die Namen der Textfelder aufsplitte dass erst die produkt_id ist und dann die verpackungsart (einzeln od. verpackungseinheiten) über einen wert definiert sind der mit einem bindestrich getrennt ist.

Bin wie gesagt leider kein Programmiergenie, und auch nicht mit den perfekten Herangehensweisen an sowas vertraut. Aber im Grunde wär mir wirklich die sauberste Lösung wichtig damit ich das gleich auch richtig lernen kann.

Hi,
wie wird denn entschieden ob es Einzelverpackungen sind oder Verpackungseinheiten?

Unterschieden hab ich mit der Zahl hinter dem Bindestrich (1 = Einzel / 2 = VE)
 
Zuletzt bearbeitet:
Sorry ich habs noch nicht ganz verstanden. Nochmal, komplett ohne jeglichen Code oder Datenbankdesign:

Du hast Getränke.
Es können bei einer Bestandsaufnahme (die in die Datenbank geschrieben werden soll und nicht darausgeholt werden soll) neue Produkte Getränke hinzukommen.
Die Verpackungseinheit für ein Getränk ist immer die gleiche (also LieblingsBier gibts immer in 20ger Kästen).

Man soll angeben können: Ich habe ein MineralwasserXY und davon habe ich 3x die Verpackungseinheit? Oder soll man sagen können ich habe 3x die Verpackungseinheit und 7x die Einzelanzahl, also 3 Kästen und 7 Flaschen?

LG
 
Ohne jetzt deinen Beitrag vollständig gelesen zu haben: du hast doch gesagt, dass die Werte aus der Superglobalen $_POST kommt. Somit ist dir an dieser Stelle egal, ob das Formular aus Daten aus einer Datenbank generiert wurde oder anderweitig. Somit wäre es interessant zu sehen, wie dein Formular aussieht (vom Quelltext her). Denn ich meinte, dass du dein Problem so löst:
HTML:
<form method="post" action="">
  <input type="text" name="wert_mit_bindestrich[1-1]" value="45" />
  <input type="text" name="wert_mit_bindestrich[1-2]" value="54" />
  <!-- ... -->
  <input type="text" name="anderes_feld" value="..." />
</form>
 
Zurück