Вставка многомерного массива в строки Mysql - PullRequest
0 голосов
/ 15 декабря 2010

У меня есть массив (двумерный), и я вставляю его в свою базу данных.

Мой код:

$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')");
}

Я получаю 5 вставок в базе данных, но только 5-я имеет информациюя хочу.Первые неполные.

Может ли кто-нибудь мне помочь?

Извините за мой английский.

Ответы [ 2 ]

0 голосов
/ 16 декабря 2010

Вы, вероятно, хотите, чтобы ваш запрос и 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

0 голосов
/ 16 декабря 2010

проверьте, отправили ли вы переменные из браузера в массив (например,
input name = "some_name []" ...

также Вы можете проверить, что вы получите в любое время, поставив var_dump ($ your_var) в любом месте сценария.

удачи:)

...