2010-12-15 15 views
0

Ich habe ein Array (zweidimensional) und ich füge es in meine Datenbank ein.Mehrdimensionales Array einfügen in Mysql Zeilen

Mein Code:

$yourArr = $_POST; 

$action = $yourArr['action']; 
$mysql = $yourArr['mysql']; 
$total = $yourArr['total']; 
unset($yourArr['action'] , $yourArr['mysql'] , $yourArr['total']); 

foreach ($yourArr as $k => $v) { 
    list($type,$num) = explode('_item_',$k); 
    $items[$num][$type] = $v; 
$pnr= $items[$num][pnr]; 
$pkt= $items[$num][pkt]; 
$desc= $items[$num][desc]; 
$qty= $items[$num][qty]; 
$price= $items[$num][price]; 


$eintragen = mysql_query("INSERT INTO rechnungspositionen (artikelnummer, menge, artikel, beschreibung,preis) VALUES ('$pnr', '$qty', '$pkt', '$desc', '$price')"); 
}

ich 5 Einsätze in der Datenbank, sondern nur die fünfte haben die Informationen ich will. Die ersten sind unvollständig.

Kann mir jemand helfen?

Entschuldigung für mein Englisch.

+0

unvollständig? was fehlt? – travelboy

+0

Ist das PHP? Wenn ja, füge bitte das PHP-Tag hinzu – Enrique

Antwort

0

überprüfen, ob Sie Vars von Browser-Array gesendet haben (wie
input name = "some_name []" ...

auch Sie können überprüfen, was Sie jederzeit erhalten, indem var_dump ($ your_var in) Skript jedem Ort.

viel Glück :)

0

Sie wollen wahrscheinlich über dieser außerhalb der foreach Ihre Anfrage und die 5-Zuordnungen haben. Stattdessen in einer neuen Schleife, die nur einmal für jeden Gegenstand statt nur 5 Mal ausgeführt wird. Ihre Einrückung schlägt sogar dasselbe vor, aber Ihre Klammern nicht.

Derzeit wird nur jeweils ein Wert zugewiesen und eine neue Abfrage ausgeführt. Nach 5 Mal sind alle Variablen zugewiesen und die zuletzt eingefügte Zeile hat endlich alles richtig.

error_reporting(E_ALL); 

$items = array(); 

foreach($yourArr as $k => $v) { 

    // check here if the variable is one you need 
    list($type, $num) = explode('_item_', $k); 
    $items[$num][$type] = $v; 
} 

foreach($items as $item) { 

    $pnr = mysql_real_escape_string($item['pnr']); 
    $pkt = mysql_real_escape_string($item['pkt']); 
    $desc = mysql_real_escape_string($item['desc']); 
    $qty = mysql_real_escape_string($item['qty']); 
    $price = mysql_real_escape_string($item['price']); 

    $eintragen = mysql_query("INSERT INTO rechnungspositionen (artikelnummer, menge, artikel, beschreibung,preis) VALUES ('$pnr', '$qty', '$pkt', '$desc', '$price')"); 
} 

auf Fehlerebene Umschalten auf E_ALL haben in einer solchen Richtung würde angedeutet, unter anderem:

  • unquoted Array-Schlüssel: Wenn eine Konstante von den gleichen Namen Ihr Skript existiert, wird unvorhersehbar sein.

  • unescaped Variablen: fehlerhafte Werte oder sogar enthält nur ein Zitat, das es sein muss, wird Ihre Abfrage oder schlechter ausfallen.

  • naiv Explodieren: nicht jeder $ _POST-key Variable wird die Zeichenfolge Artikel enthält und Ihre Liste wird fehlschlagen, darunter die spätere Verwendung von $num