2010-12-15 94 views
0

J'ai un tableau (bidimensionnel) et je l'insère dans ma base de données.Insertion d'un tableau multidimensionnel dans les lignes Mysql

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

-je obtenir 5 inserts dans la base de données, mais seulement 5 ont les informations que je veux. Les premières sont incomplètes.

quelqu'un peut me aider?

Désolé pour mon anglais.

+0

incomplète? qu'est-ce qui manque? – travelboy

+0

Est-ce php? Si oui, ajoutez le tag php – Enrique

Répondre

0

vérifier si vous avez envoyé vars depuis le navigateur dans le tableau (comme
nom d'entrée = « some_name [] » ...

Vous pouvez aussi vérifier ce que vous obtenez à tout moment en mettant var_dump (your_var de $) en tout lieu dans le script.

bonne chance :)

0

Vous voulez probablement avoir votre requête et les 5 missions ci-dessus que en dehors du foreach. Au lieu de cela dans une nouvelle boucle qui ne s'exécute qu'une fois pour chaque élément au lieu de 5 fois. Votre indentation suggère même la même chose mais vos crochets ne le font pas.

Actuellement, il n'attribue qu'une seule valeur à chaque fois et exécute une nouvelle requête. Après 5 fois toutes les variables sont assignées et la dernière rangée insérée a finalement tout ce qu'il faut.

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

Mise en marche de votre niveau d'erreur E_ALL aurait laissé entendre dans une telle direction, entre autres:

  • non cotées clés-tableau: si une constante de le même nom existe votre script être imprévisible.

  • les variables unescaped: valeurs malformés ou même contenant une citation qui doit être là échoueront votre requête ou pire .

  • explosant naïve: pas chaque _POST-clé $ variable contiendra la chaîne article et votre liste échouera, y compris l'utilisation ultérieure de $num