Insert multiples dans une table

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 : Insert multiples dans une table

par Truc » 08 déc. 2006, 02:05

Pense à t'inscrire avant les éventuelles autres questions. tu pourras profiter des avantages des membres et tagger toi même le sujet [Résolu] :wink:

Insert multiples dans une table

par Invité » 08 déc. 2006, 01:35

Mon script fonctionne.

Merci pour votre aide et pour la clarté des explications.

Insert multiples dans une table

par Invité » 08 déc. 2006, 01:11

Merci pour votre aide. Je suis en train de tester les infos de Cyrano que je comprends mieux mais j'avoue que je n'aurais pas trouver.

par Cyrano » 08 déc. 2006, 01:02

Fais afficher la requête créée et affiche-nous ça ici :-k

Insert multiples dans une table

par Invité » 08 déc. 2006, 01:00

J'ai testé mais mysql ne me renvoie aucun message!

Pour précision, je devrais récupérer 5 articles différents avec 5 quantités différentes et les insérés simultanément dans une table.

par Truc » 08 déc. 2006, 00:58

Salut,

La synatxe de récupération des variables POST n'est pas fausse mais va renvoyer un booleen (Vrai, Faux) pas le vrai contenu.
Regarde ce post pour l'opérateur ternaire

faudrait ajouter des [] à l'attribut "name" (name="quantite[]" )des input du formulaire, pour pouvoir récupérer toutes les données (sous forme de tableau) et non seulement le derier champ.

ensuite tu peux par exemple boucler sur $_POST['Quantite'] (j'utilise $quantite après l'utilisation de l'opérateur ternaire.. tu verra :wink: ).
//tableau qui va contenir les différents "insert"
$sql = array();
foreach($quantite => $cle as $val)
{
    // ce qui doit donner (152,'[email protected]',4)...en supposant le code comme "chiffre"
   $sql[] = " (".$code[$cle].", '".$courriel."', ".$val.") ";
} 
// l'implode concatènera toutes les valeurs du tableau 
$req1="INSERT INTO commande (id_produit, email_client, quantite) VALUES ".implode(",",$sql);

// ne sert que de test de visualisation
echo "<p>la requete générée est : ".$req1</p>";
$rep= mysql_query($req1); 
Edit: Quasi la même chose Cyrano.... ça veut dire que je suis bon moi aussi :lol:
(par contre plus rapide quoi moi :ordi: )

par Cyrano » 08 déc. 2006, 00:57

Salut,
premier problème : ton formulaire : tu as plusieurs champs ayant le même nom, donc tu ne peux pas tout récupérer. Pour corriger ça, il faut que les valeurs dans les attributs name soient des tableaux. On fait ça en ajoutant des crochets [], ce qui donne :
<?php
include ("connect.inc.php");
include ("connect_mysql.inc.php");


//récupération des données de la base
$req= "SELECT * FROM articles_fleurs";
$res= mysql_query($req);
while ($ligne= mysql_fetch_array($res))
{
    ?>
  <tr> 
    <td class="td" width="25" ><b>5:</b></td>
    <td class="td" width="100"><input class="input" type="text" name="Code[]" size="10" value="<?php print $ligne['code']; ?>"></td>
    <td class="td" width="150"><input class="input" type="text" name="Design[]" size="20" value="<?php print $ligne['design']; ?>"></td>
    <td class="td" width="100"><input class="input" type="text" name="Quantite[]" size="4" value=""></td>
    <td class="td" width="100"><input class="input" type="text" name="Prix[]" size="10" value="<?php print $ligne['prixU']; ?>"></td>
    <td class="td" width="100">&nbsp;</td>
  </tr>
<?php
}
?>
Ensuite, tu récupères les valeurs : comme je l'ai mentionné, ce sont des tableaux, donc :
$Code = $_POST['Code'];
$Design = $_POST['Design'];
//... etc...
Ensuite, il faut créer dynamiquement ta requête avec chaque ligne. Tu auras le nombre en comptant un des tableaux obtenus :
$nb = count($Code);
Enfin, il te reste à construire la requête : deux phases, d'abord le début de la requête, et ensuite les séries de valeurs :
$sql = "INSERT INTO commande (id_produit, email_client, quantite) VALUES";
/* On crée un tableau pour stocker les séries de valeurs */
$valeurs = array();
for($i = 0; $i < $nb; $i++)
{
    $valeurs[] = " ('". $Code[$i] ."', '". $courriel ."', ". $Quantite[$i] .")";
}
/* On regroupe les valeurs pour les ajouter à la requête de base: */
$sql .= implode(",", $valeurs);
/* Affichage de débugage : */
echo("<code>". $sql ."</code>\n");
Et ensuite tu peux exécuter.

par Ajoloca » 08 déc. 2006, 00:51

Bonsoir,

De la façon dont tu présentes ton code (tu ne récupères qu'un article à la fois)
La concaténation des valeurs à insérer n'a aucun intérêt.

C'est intéressant si tu recevais 30, 40, 50, ... ou plus articles dans ta page de traitement car ce qui est couteux c'est l'accès à la base (ouverture de connexion)

Parcontre ce qui serait bien c'est que tu sépares las variables PHP du reste de la requête
$req1='INSERT INTO commande (id_produit, email_client, quantite) VALUES ("' . $Code. '", "' . $courriel . '", "' . $Quantite . '")';
Et que tu testes le retour de MySQL
$rep= mysql_query($req1) or die ('ERR_SQL ' . $req1 . '<br />' . mysql_error());

Insert multiples dans une table

par Invité » 08 déc. 2006, 00:48

J'essaie d'avancer et je voulais vérifier en transformant ma variable $code en tableau combien il contient de valeur et quelles sont elles. Je devrais avoir 5 valeurs d'enregistrées or mon tableau m'en retourne 1 et la dernière valeur?
<?php

if (isset($_POST['nom']))
$nom= strtoupper($_POST['nom']);
if (isset($_POST['rcs']))
$rcs= strtoupper($_POST['rcs']);
if (isset($_POST['adresse1']))
$adresse1= strtoupper($_POST['adresse1']);
if (isset($_POST['adresse2']))
$adresse2= strtoupper($_POST['adresse2']);
if (isset($_POST['codepostal']))
$codepostal= strtoupper($_POST['codepostal']);
if (isset($_POST['ville']))
$ville= strtoupper($_POST['ville']);
if (isset($_POST['courriel']))
$courriel= ($_POST['courriel']);
if (isset($_POST['Code']))
$Code[]= $_POST['Code'];
if (isset($_POST['Design']))
$Design= $_POST['Design'];
if (isset($_POST['Quantite']))
$Quantite= $_POST['Quantite'];
if (isset($_POST['Prix']))
$Prix= $_POST['Prix'];
if (isset($_POST['total']))
$total= $_POST['total'];

include ("connect.inc.php");
include ("connect_mysql.inc.php");

$new=array();
$new=$Code;
$compte=count($new);
print_r($new);
     

//insertion des données dans la table commande
  $Code= (isset($_POST['Code']));
  $courriel= (isset($_POST['courriel']));
  $Quantite= (isset($_POST['Quantite']));  

  $req1="INSERT INTO commande (id_produit, email_client, quantite) VALUES (\"$Code\", \"$courriel\", \"$Quantite\")";
  $rep= mysql_query($req1);

  ?>

Insert multiples dans une table

par Invité » 08 déc. 2006, 00:06

Bonsoir,

Je cherche à faire plusieurs insert simultanés dans une même table mais cela me pose des problèmes.

J'ai trouvé un post à ce sujet qui donne une piste mais je ne sais pas comment l'exploiter :

J'ai une page qui affiche une liste de produits avec leurs codes, leurs libellés et leur prix. Les données proviennent d'une base.
<?php
    
    include ("connect.inc.php");
    include ("connect_mysql.inc.php"); 
    

    //récupération des données de la base
    $req= "SELECT * FROM articles_fleurs";
    $res= mysql_query($req);
    while ($ligne= mysql_fetch_array($res))
    { ?>
    <tr> 
    <td class="td" width="25" ><b>5:</b></td>
    <td class="td" width="100"><input class="input" type="text" name="Code" size="10" value="<?php print $ligne['code']; ?>"></td>
    <td class="td" width="150"><input class="input" type="text" name="Design" size="20" value="<?php print $ligne['design']; ?>"></td>
    <td class="td" width="100"><input class="input" type="text" name="Quantite" size="4" value=""></td>
    <td class="td" width="100"><input class="input" type="text" name="Prix" size="10" value="<?php print $ligne['prixU']; ?>"></td>
    <td class="td" width="100">&nbsp;</td>
    </tr>
    <?php } ?>
L'utilisateur doit saisir les quantités. Le formulaire est traité dans la page commande1.php. Je voudrais que toutes les quantités saisies ainsi que les code produits et l'email du client soit insérer dans une table:
<?php
include ("connect.inc.php");
include ("connect_mysql.inc.php");
     

//insertion des données dans la table commande
  $Code= (isset($_POST['Code']));
  $courriel= (isset($_POST['courriel']));
  $Quantite= (isset($_POST['Quantite']));  

  $req1="INSERT INTO commande (id_produit, email_client, quantite) VALUES (\"$Code\", \"$courriel\", \"$Quantite\")";
  $rep= mysql_query($req1);

  ?>

La piste que j'ai trouvé indique qu'il faut obtenir quelque chose du type :
$req1="INSERT INTO commande (id_produit, email_client, quantite) VALUES (\"$Code\", \"$courriel\", \"$Quantite\") (\"$Code1\", \"$courriel1\", \"$Quantite1\") ";
  $rep= mysql_query($req1);

Et donc boucler autant de fois que j'ai de ligne à insérer.
Mais je ne réussis pas à le traduire en code.

Merci de votre aide.