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 :

foreach et requête SQL


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Août 2013
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2013
    Messages : 124
    Par défaut foreach et requête SQL
    Bonjour,

    J'ai un tableau jquery avec la possibilité de rajouter X lignes au click d'un bouton.
    Une fois ces X lignes renseignées, je voudrai les enregistrer en BDD
    J'ai réussi à faire quelque chose mais qui ne me convient pas vraiment car ça nécessite autant de requettes qu'il y a de lignes.

    Voici mes codes.
    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
    <input type="button" value="Ajouter une ligne" onclick="NouvelleLigne('table_fourn')">
    <input type="button" value="Supprimer la ligne" onclick="SupprLigne('table_fourn')">
     
    <FORM name="tabl_test" method="post" action="bdd.php">
        <table id="table_fourn" style="border:solid 1px black">
            <tbody>
    			<tr>
    				<td><input type="checkbox" name="suppr_lign[]" ></td>
    				<td><input type="text" name="mode_reglement[]" ></td>
    				<td><input type="text" name="ref_reglement[]" ></td>
    				<td><input type="text" name="paiement_fournisseur[]"></td>
    			</tr>
    		</tbody>
    	</table>
    	<input type="submit" value="Valider" name="valider">
    </FORM>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     	$m_r = $_POST['mode_reglement'];
    	$r_r = $_POST['ref_reglement']; 
    	$p_f = $_POST['paiement_fournisseur'];
     
    foreach($m_r as $a => $b){
    	echo $m_r[$a] ." - ". $r_r[$a] ." - ". $p_f[$a] ."<br>";
     
     		$insert = Cnx::connectCnx()->prepare("INSERT INTO fournisseurs_commandes (mode_reglement, ref_reglement, paiement_fournisseur) VALUES (".$m_r[$a]." , ". $r_r[$a] ." , ". $p_f[$a]	.") ");
    		$insert -> bindValue(':mode_reglement', $m_r[$a]);
    		$insert -> bindValue(':ref_reglement', $r_r[$a]);
    		$insert -> bindValue(':paiement_fournisseur', $p_f[$a]);
    		$insert -> execute(); 
    		echo  "ok"; 
    	  }
    Si quelqu'un a une idée?

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    C'est normal d'avoir une requête par insertion.
    Les requêtes préparées sont d'ailleurs faites pour ça.
    Par contre dans ta requête préparées tu as mis les valeurs au lieu des paramètres.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Août 2013
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2013
    Messages : 124
    Par défaut
    Salut Sabotage
    J'ai changé bindValue par bindParam.
    Mais si mon tableau fait 100 lignes, je vais avoir 100 requêtes....
    N'y a t il pas une possibilité de faire autrement???
    par exemple de boucler uniquement sur les valeurs et ensuite exécuter le tout?

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Ce n'est pas un problème de bindValue/bindParam, c'est dans ta requête qu'il manque les paramètres nommés ; d'ailleurs c'est étrange qu'il n'y ait pas d'erreur.
    Quel est ton problème avec le fait d'executer 100 requêtes ? Comme je te dis, les requêtes paramétrées sont faites pour ça, seules les valeurs changent à chaque execution.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre expérimenté
    Homme Profil pro
    Consultant PLM
    Inscrit en
    Août 2007
    Messages
    203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Consultant PLM

    Informations forums :
    Inscription : Août 2007
    Messages : 203
    Par défaut
    En PDO : http://php.net/manual/fr/pdo.commit.php

    Step by step :
    1. On commence une transaction.
    2. On prépare une requête.
    3. Pour chaque donnée à insérer, on fait une exécution avec les bons paramètres.
    4. On committe la transaction globale.

    L'exemple 1 sur la page PHP.net indique exactement ce principe-là.

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Les transactions servent à garantir que toutes les requêtes sont bien exécutées ou à tout annuler.
    Je ne pense pas que ce soit ça qui soit cherché ici.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #7
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Août 2013
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2013
    Messages : 124
    Par défaut
    Merci de votre participation.
    Citation Envoyé par sabotage Voir le message
    Par contre dans ta requête préparées tu as mis les valeurs au lieu des paramètres.
    Je ne comprend ça que tu veux dire. Ou me suis je planté?

    Et concernant le nombre important de requêtes, il me semble que ça va consommer plus de bande passante et ralentir l’insertion en BDD.
    Mais peut être que je me plante complètement. Juste des question que je me pose et vous pose

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     		$insert = Cnx::connectCnx()->prepare("INSERT INTO fournisseurs_commandes (mode_reglement, ref_reglement, paiement_fournisseur) VALUES (:mode_reglement, :ref_reglement, :paiement_fournisseur) ");	
    foreach($m_r as $a => $b){
    		$insert -> bindValue(':mode_reglement', $m_r[$a]);
    		$insert -> bindValue(':ref_reglement', $r_r[$a]);
    		$insert -> bindValue(':paiement_fournisseur', $p_f[$a]);
    		$insert -> execute(); 
    		echo  "ok"; 
    	  }
    Est ce mieux?

Discussions similaires

  1. Requête SQL
    Par Leludo dans le forum Langage SQL
    Réponses: 3
    Dernier message: 12/07/2024, 15h41
  2. [SQL-Server] Boucle foreach et requêtes sql
    Par anjolin dans le forum PHP & Base de données
    Réponses: 0
    Dernier message: 06/06/2012, 10h08
  3. [ DB2 ] [ AS400] requête sql
    Par zinaif dans le forum DB2
    Réponses: 6
    Dernier message: 23/08/2008, 19h42
  4. Utilisation de MAX dans une requête SQL
    Par Evil onE dans le forum Langage SQL
    Réponses: 7
    Dernier message: 15/06/2004, 18h38
  5. PB requète SQL avec Interbase
    Par missllyss dans le forum InterBase
    Réponses: 2
    Dernier message: 15/07/2003, 11h37

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