Problem mit Array

Arndtinho

Erfahrenes Mitglied
Hallo,

ich habe ein Array mit folgendem Aufbau:
PHP:
$aInvPos = array( 'pos1' => array( 'product_type' 		 => 'p1',
				  		 	    'product_code' 		 => 'pt1',
				  			     'product_description' => 'bla',
				 	 		     'unit_price'          => '10',
				  			     'quantity' 			 => '1',
				  			     'price' 				 => '10',
				  			     'vat_rate' 			 => '19',
				  			     'vat_amount' 		 => '125' ),
				  'pos2' => array( 'product_type' 		 => 'p2',
				  		 	    'product_code' 		 => 'pt2',
				  			     'product_description' => 'blabla',
				 	 		     'unit_price'          => '13',
				  			     'quantity' 			 => '2',
				  			     'price' 				 => '26',
				  			     'vat_rate' 			 => '19',
				  			     'vat_amount' 		 => '250' ) );
Nun möchte ich den Inhalt dieses Arrays in der entsprechenden DB-Tabelle speichern. Leider wird aber immer nur "pos1" gespeichert.
PHP:
for( $iItemNo=1; $iItemNo<=count( $aInvPos ); $iItemNo++ ) {
    insertNewPos( $aInvPos["pos".$iItemNo], $iItemNo );
}

function insertNewPos( $aData, $iItemNo ) {
    $sFields = "";
    $sValues = "";
		
    foreach( $aInvPos as $sItemKey => $sItemValue ) {
			
       	$sFields   .= "i_".$sItemKey.", " ;
       	$sValues   .= "'".addslashes( utf8_decode( $sItemValue ) )."', ";
    }

    $sQuery = "INSERT INTO `invoice_pos`  
		      ( pos_no, $sFields created_by ) 
		      VALUES 
		      ( '$iItemNo', $sValues 'admin' )";
    ...
}
Was mache ich verkehrt?

Gruß
Arndtinho
 
Du hast ein 2 Dimonsionales array erzeugt daher brauchst du auch 2 foreach Schleifen um die Daten auszulesen zu können.

Pro weitere Dimension 1 weitere Foreach Schleich notwenig.

Mfg Splasch
 
Versuch mal anstatt:

PHP:
for( $iItemNo=1; $iItemNo<=count( $aInvPos ); $iItemNo++ ) { 
    insertNewPos( $aInvPos["pos".$iItemNo], $iItemNo ); 
}

Das hier:

PHP:
$iItemNo=1;
foreach($aInvPos as $aInvPos_arr){
    insertNewPos($aInvPos_arr, $iItemNo);
    $iItemNo++;
}
 
Zuletzt bearbeitet:
Du hast ein Fehler in der foreach-Schleife in der insertNewPos-Funktion. Du musst natürlich auch mit den an die Funktion übergebenen Daten arbeiten und nicht direkt am Array selbst (du vertauschst einfach $aInvPos mit $aData):
PHP:
// falsch:
foreach( $aInvPos as $sItemKey => $sItemValue ) { 
// richtig:
foreach( $aData as $sItemKey => $sItemValue ) {
 
Danke Euch.
Mal von dem von mAu angemahnten Fehler, funktioniert es auch so, wie ich mir gedacht habe. Ich habe nur nach dem ersten Insert ein return gemacht, von daher konnte ja auhc immer nur eine Position eingetragen werden.

Gruß
Arndtinho
 
Zurück