IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

plusieurs insertions dans une table en même temps avec SQL?..


Sujet :

PHP & Base de données

  1. #1
    Futur Membre du Club Avatar de atreides51
    Homme Profil pro
    salarié
    Inscrit en
    Septembre 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Septembre 2008
    Messages : 11
    Points : 5
    Points
    5
    Par défaut plusieurs insertions dans une table en même temps avec SQL?..
    bonjour à tous,
    voici mon casse tête :
    j'incrémente d'une page1.php des champs input (date, quantite, fournisseur) en javascript et je récupère leurs valeurs en page2.php avec une boucle foreach...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     <script type="text/javascript">
    	var nb_tags = 0; // compteur
    	function AjouterDate(){ 
     
    		var tag = document.getElementById('ContentTagOeil').value;
     
    	   	if (tag.length<=1) { alert("Vous devriez remplir ce champs avec un terme de plus de une lettre");document.getElementById('ContentTagOeil').focus(); } 
     
    		else {
     
    			var new_span = document.createElement('span'); // on crée un nouvel élément HTML
     
    			new_span.id = 'tag' + nb_tags; // on lui donne un identifiant
    			new_span.innerHTML += '<input type="date" name="date-' + nb_tags +'">';
    			new_span.innerHTML += '<input type="number" name="quantite-' + nb_tags +'" step="0.10" min="0" required>';
    			new_span.innerHTML += '<select class="form-control form-control-sm p-0" name="fournisseur-' + nb_tags +'" required><option value="">Choisissez un fournisseur</option><?php 
    			$query_fournisseur = $bdd->prepare("SELECT id,nom FROM fournisseur order by nom ASC");
    			$query_fournisseur->execute();			
                while($val_fournisseur = $query_fournisseur->fetch()) 
                { echo '<option value="'.$val_fournisseur['id'].'">'.$val_fournisseur['nom'].'</option>'; } ?></select>';
    			new_span.innerHTML += '<br>';
     
    			document.getElementById('wrap').appendChild(new_span); // on insère l'objet
     
    			nb_tags++; // on incrémente le compteur
     
    	   	}
    		return false;
    	}
    	function SupprimerTag(new_span){
    	var node=document.getElementById(new_span);
    	node.parentNode.removeChild(node);
    	}
    </script>
    dans ma page2.php
    j'affiche le résultat avec une boucle foreach : (déjà là, est ce que je suis sur la bonne solution??)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    	foreach($_POST as $cle => $valeur){
    		echo "<br /> - $cle = $valeur";
    }
    ce qui me donne en résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    - id_produit = 1189
    - date-0 = 2021-01-14
    - quantite-0 = 10
    - fournisseur-0 = 5
    - date-1 = 2021-01-16
    - quantite-1 = 25
    - fournisseur-1 = 6
    ma question est : comment faire pour insérer toutes les valeurs ligne par ligne en SQL en 1 seule requête :
    date-0 ,quantite-0, fournisseur-0
    ensuite
    date-1 ,quantite-1, fournisseur-1
    ect...
    Je pense que mon problème c'es la façon dont je fait ma boucle foreach ou je ne sait pas récupérer l’attribut du nom de mon champ input??

    Merci pour votre aide

  2. #2
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 406
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 406
    Points : 15 771
    Points
    15 771
    Par défaut
    dans le code HTML appelez vos champs date[0], date[1], ... dans l'attribut "name".
    ensuite dans le code PHP vous aurez un tableau associatif dans $_POST["date"] avec les identifiants en tant que clés.

  3. #3
    Futur Membre du Club Avatar de atreides51
    Homme Profil pro
    salarié
    Inscrit en
    Septembre 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Septembre 2008
    Messages : 11
    Points : 5
    Points
    5
    Par défaut
    Merci Mathieu pour ton aide
    effectivement le champ date[' + nb_tags +'] m'incrémente bien l'attribut ainsi que les autres mais je ne sais pas comment insérer dans la BDD tout les champs incrémentés
    si j'en génère plusieurs, il m'insert que le dernier dans la BDD: date, fournisseur, quantite...

    une boucle est nécessaire mais comment la faire ?...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    foreach($_POST['date'] as $date_commande => $date_comm)		
    foreach($_POST['fournisseur'] as $fournisseur => $fourn)	
    foreach($_POST['quantite'] as $quantite => $quant)
     
    include('connexion.php');	
    $query= $bdd->prepare("INSERT INTO commandes(id_produit,date_commande,fournisseur,quantite) VALUES(?, ?, ?, ?)");
    $query->execute(array($_SESSION['id_prod'], $date_comm, $fourn, $quant));

  4. #4
    Membre actif
    Homme Profil pro
    Webmaster - Développeur/intégrateur web
    Inscrit en
    Septembre 2011
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Jura (Franche Comté)

    Informations professionnelles :
    Activité : Webmaster - Développeur/intégrateur web
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2011
    Messages : 210
    Points : 246
    Points
    246
    Par défaut
    Bonjour,

    Il est possible d'ajouter plusieurs lignes à la fois, voir : https://sql.sh/cours/insert-into, paragraphe "Insertion de plusieurs lignes à la fois".

    Par contre, oui, il faudra faire une boucle pour construire la requête avant de l’exécuter.

  5. #5
    Futur Membre du Club Avatar de atreides51
    Homme Profil pro
    salarié
    Inscrit en
    Septembre 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Septembre 2008
    Messages : 11
    Points : 5
    Points
    5
    Par défaut
    Merci mathieu tu m'as mis sur la voie

    dans mon form j'ai mis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input name="comptage" type="hidden" value="' + nb_tags +'" />
    dans ma page 2 j'ai mis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    if(count($_POST) > 0 && !empty($_POST['date'])) {
    $comptage = $_POST['comptage']+1;
     
    	include('connexion.php');
     
    	    for($i=0;$i<$comptage;$i++)
            {	
            $date_comm = $_POST['date'][$i];
            $fourn = $_POST['fournisseur'][$i];
            $quant = $_POST['quantite'][$i];
     
                    $query= $bdd->prepare("INSERT INTO commandes(
    				id_produit,
    				semaine,
    				date_commande,
    				fournisseur,
    				quantite
    				) VALUES(?, ?, ?, ?,?)");
                    $query->execute(array(
    				$_SESSION['id_prod'], 
    				$_SESSION['semaine'],
    				$date_comm, 
    				$fourn, 
    				$quant
    				));	
    				echo 'tout a &eacute;t&eacute; ins&eacute;r&eacute;"...';
    		}		
    }
    else {  echo 'Aucune donn&eacute;e n\'a &eacute;t&eacute; re&ccedil;ue"...';   }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2016] Enchaîner plusieurs insert dans une table
    Par odomi1973 dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 21/03/2018, 23h34
  2. [MySQL] Insertion dans deux tables au même temps
    Par roy2work dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 21/10/2013, 23h58
  3. Insertion dans deux Tables en même temps
    Par hajoura89 dans le forum Développement Web en Java
    Réponses: 7
    Dernier message: 19/08/2010, 00h10
  4. [MySQL] Insertion de plusieurs lignes dans une table
    Par BOUWAGGOU dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 04/05/2009, 16h55
  5. [Sybase] Temps d'une insertion dans une table
    Par vsavoir dans le forum Décisions SGBD
    Réponses: 5
    Dernier message: 14/02/2005, 10h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo