Вы, вероятно, хотите, чтобы ваш запрос и 5 назначений были выше вне foreach.Вместо этого в новом цикле, который выполняется только один раз для каждого элемента вместо 5 раз.Ваш отступ даже предлагает то же самое, однако ваши скобки - нет.
В настоящее время каждый раз присваивается только одно значение и выполняется новый запрос.Через 5 раз все переменные назначены, и в последней вставленной строке наконец-то все исправно.
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')");
}
Переключение уровня ошибки на E_ALL указало бы в таком направлении, среди прочего:
без кавычек ключей массива: если константа с тем же именем существует, ваш сценарий будет непредсказуемым.
неэкранированные переменные: некорректные значения или даже просто содержащие кавычку, котораядолжен быть там, потерпит неудачу в вашем запросе или еще хуже.
наивный взрыв: не каждая переменная $ _POST-key будет содержать строку item и ваш список потерпит неудачу,включая последующее использование $num