Insérer dans la base de données plusieurs tableaux via une boucle

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Insérer dans la base de données plusieurs tableaux via une boucle

Re: Insérer dans la base de données plusieurs tableaux via une boucle

par Saian » 28 avr. 2015, 16:22

En admettant que $arrays contienne tous les tableaux il suffit de faire quelque chose dans le style :
$sql = $db->prepare('INSERT INTO '.$_SESSION['table'].' (weight_min, weight_max, price) VALUES (:weight_min, :weight_max, :price)');

foreach($arrays as $array)
    $sql->execute(array(
        ':weight_min' => $array[0], 
        ':weight_max' => $array[1], 
        ':price' => $array[2]));

Re: Insérer dans la base de données plusieurs tableaux via une boucle

par tjoce05 » 28 avr. 2015, 16:00

Code : Tout sélectionner

foreach($weight_min as $key_weight_min => $weight_min_value) { echo "<p>weight_min: [".$key_weight_min."]".$weight_min_value."</p>"; foreach( $weight_max as $key_weight_max => $weight_max_value ){ echo "<p>weight_max: [".$key_weight_max."]".$weight_max_value."</p>"; foreach( $price as $key_price => $price_value ){ echo "price: [".$key_price."]".$price_value."<br />"; }}}
Les tableaux sont générés automatiquement via jquery avec appendTo(). Leur nombre est illimité. Je les récupère dans un fichier PHP à l'aide d'Ajax. Puis je dois les insérer dans ma table avec une boucle. À l'instant où je vous envoie ce mail, je pense à une autre soluss, ne faudrait-il pas compter d'abord le nombre de tableaux généré automatiquement dans la boucle, puis répété n fois l'insertion dans une boucle for.

Re: Insérer dans la base de données plusieurs tableaux via une boucle

par Saian » 28 avr. 2015, 15:25

Tu peux écrire la requête comme ça :
INSERT INTO <table_name> ( Column1, Column2 )
VALUES ( Value1, Value2 ), ( Value3, Value4 )

Et oui ça a un impact sur le temps d'exécution mais entre une requête qui insère 3 lignes et 3 requêtes qui insèrent une ligne l'écart doit être vraiment minime. Il faut certainement beaucoup plus de requêtes pour voir une différence.

Re: Insérer dans la base de données plusieurs tableaux via une boucle

par PortgasDKiba » 28 avr. 2015, 15:21

Tu peux nous en dire plus sur la manière dont tu récupères les valeurs dans ton tableau ?

Avec une boucle sur ton tableau je pense.

Un foreach devrait faire l'affaire !

Re: Insérer dans la base de données plusieurs tableaux via une boucle

par tjoce05 » 28 avr. 2015, 15:20

Oui, j'ai pensé aux 3 requêtes mais est-ce que cela ne risque pas de ralentir la BDD ? Existe-t-il une méthode pour ne faire q'une seule requête dans une boucle, ou alors fusionner les arrays pour ne faire qu'une requête, j'ai tenté mais ça ne marche pas.

Re: Insérer dans la base de données plusieurs tableaux via une boucle

par Saian » 28 avr. 2015, 15:08

Et bien fais 3 requêtes non ?

Insérer dans la base de données plusieurs tableaux via une boucle

par tjoce05 » 28 avr. 2015, 14:57

Bonjour,

Comment insérer dans la bdd ces 3 tableaux :

Code : Tout sélectionner

Array ( [0] => 1 [1] => 10 [2] => 30 ) Array ( [0] => 2 [1] => 20 [2] => 35 ) Array ( [0] => 1 [1] => 20 [2] => 35 )
key [0] correspond au champ "weight_min"
key [1] correspond au champ "weight_max"
key [2] correspond au champ "price"

le requete

Code : Tout sélectionner

$sql = $db->prepare("INSERT INTO ".$_SESSION["table"]." ( weight_min, weight_max, price ) VALUES (:weight_min, :weight_max, :price) ");
merci d'avance ! :roll: